C程式常見模式小結

2021-09-27 22:30:22 字數 2689 閱讀 2144

if 含量/質量大於2.5

輸出被汙染

else

輸出沒被汙染

事實上,這時候程式的思路都已經清楚了,剩下就只需要翻譯成c語言就好了。比流程圖更加簡單一點,自己可以試著用一用。

拆數模式:

要拆出乙個數的右邊第i位,首先使其整除10的i-1次方,將要拆的位變到右邊的第1位,然後%10即可。

例如,求123的右邊第2位,則先整除10的2-1次方,得到12,然後12%10=2。

1+2+……+n=n(n+1)/2。

if-else鏈模式:

當前問題需要分成互不相交的若干種情況來解決

if ( 情況一 )

處理情況一;

else if ( 情況二 )

處理情況二;

。。。else

處理剩餘情況;

這類模型的要點是各種情況互不重疊,只會屬於一種情況。

這個問題很容易解決,但是當情況比較複雜,判斷有可能出現重疊包含關係時,如何安排各種情況的順序就比較有講究,一般應該把特殊的情況放在前面先進行判斷。例如oj1033,判斷三角形:

輸入三角形的三條邊,判斷它們能否構成三角形。若能構成三角形,指出是何種三角形(等腰三角形isosceles ********、等邊三角形equilateral ********,直角三角形right-angled ********、一般三角形scalene ********)。

這裡等邊三角形也能同時滿足等腰三角形以及一般三角形的條件,如果先判斷一般三角形,則等邊三角形的情況就不會進入,因此需要把等邊三角形的判斷放到前面,以此類推。這個題目要寫的話,建議先把偽**寫清楚。

迴圈指定次數模式:

int count, times;

scanf( 「%d」, × );

for ( count = 0; count < times; count++ )

做要做的事情

迴圈到特定條件退出模式:

讀入第一組資料

while(當前資料不滿足結束條件)

在這個模式中,注意while括號裡面是結束條件的否定

迴圈到特定條件退出模式二:

while(1)

迴圈到特定條件退出模式中,第二種模式相對容易寫對,因為結束條件通常比較好判斷。而第一種模式while括號裡要寫結束條件的否定,否定用邏輯運算子連線的表示式時,需要注意變運算子問題

來看乙個綜合例項判斷三角形,題目是這樣的:

判斷輸入的三個整數能否構成三角形

三角形:任意兩邊之和大於第三邊

多組測試資料,每組輸入三個整數,為三角形的三條邊長

如果三個邊長均為0,則結束程式

如果有至少一條邊為非正數,則不處理

如果能構成三角形則輸出yes,否則輸出no,注意要換行

在這個例子中,首先要分析出輸入的方式,根據題目描述,是遇到三個0時結束,即迴圈到特定條件結束模式。確定了輸入模式之後,就可以讀入一組,處理一組了。在處理的過程中,可以看到還有乙個要求,如果有一條邊為非正數,則不處理,注意,像這樣的要求,我們直接使用前面說的if模式即可,判斷是否沒有出現這種情況,只有沒出現的時候才處理。

結束的問題在迴圈中處理,而處理不處理的問題通過條件語句處理——這就是根據經驗作出的選擇。

現在我們需要兩個條件式,乙個判斷是否結束,另乙個判斷是否需要處理。先來看是否結束。

這個結束的條件是大家都是0,那就是(( a == 0 ) && ( b == 0 ) && ( c == 0 ))三個條件必須同時成立才能結束,如果使用模式二,則這句話很容易寫對。可是如果使用模式一,則需要用到結束條件的否定,這個否定條件怎麼寫呢。乙個最簡單的方法是直接加上表示否定的邏輯運算子,即(!

(( a == 0 ) && ( b == 0 ) && ( c == 0 ))),也就是不滿足a、b、c都等於0的條件。如果不喜歡這麼寫,而是想用!=的形式,則需要用到德摩根率的第一條,變號。

變號的意思是,&&變成||,所以結束條件的否定要寫為:(( a != 0 )||(b !

= 0 )||( c != 0 ))也就是a、b、c至少有乙個不為0就接著迴圈。

類似的,我們來看處理不處理的問題,不處理的條件是只要有乙個非正就不處理。在這裡,有乙個經驗,那就是類似「有乙個」,或者含有「非」或者「不」的描述,在翻譯成條件表示式的時候很容易出現問題,所以乙個簡單的辦法,就是盡量處理肯定、所有的情況。這裡,處理的條件是所有的都是正數才處理,這個就很容易寫對了。

在寫程式時,根據實際情況,當需要用到if else語句進行二選一時,可以將比較好判斷的那部分放到if裡。

求和、平均、計數模式:

p44:28套-三【計數】

p12:第2套-三【求和】

函式傳參&&返回結果模式

int fun(int x,int y)

檢查條件是否滿足並返回是或者否模式[判斷乙個數是否是素數]

傳遞指標作為引數模式:p81:56套-

二、三遍歷陣列進行處理模式

找最大值模式&&傳遞陣列作為引數模式

傳遞二維陣列作為引數&&遍歷二維陣列進行處理模式

*標記陣列模式。補充示例cinema

*將不確定個數資料放入陣列模式

*儲存資料查詢模式。

利用陣列統計頻率&&字元的判斷模式。

字串處理模式

*選擇排序模式

以上基本涵蓋了上課講的重點內容,當然很多題目是以上各種模式的綜合運用。另外,大家還應總結各種情況下的輸入輸出方法,以及處理各型別問題的常見錯誤。例如字串處理的常見錯誤、陣列處理的常見錯誤等上課時反覆強調的問題。

C 程式設計師面試常見問題

引用是c 引入的新語言特性,是c 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用。引用簡介 ...

經典c程式

程式1 題目 有1 2 3 4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?1.程式分析 可填在百位 十位 個位的數字都是1 2 3 4。組成所有的排列後再去 掉不滿足條件的排列。2.程式源 include stdio.h include conio.h main getch 程式2 ...

經典c程式

程式1 題目 有1 2 3 4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?1.程式分析 可填在百位 十位 個位的數字都是1 2 3 4。組成所有的排列後再去 掉不滿足條件的排列。2.程式源 main 程式2 題目 企業發放的獎金根據利潤提成。利潤 i 低於或等於10萬元時,獎金可提1...