C程序常見模式小結(jié)_第1頁
C程序常見模式小結(jié)_第2頁
C程序常見模式小結(jié)_第3頁
C程序常見模式小結(jié)_第4頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、剛剛接觸程序的同學,可能經(jīng)常面臨著拿到題目不知道從何寫起的問題。其實基本的程序設(shè)計,很大程度上不是一種創(chuàng)造性的工作,而是一種模仿性的工作。如果你只是學了語法,然后直接面對著問題,想憑空想出一種解決方法,這可能是很難的。但是如果你弄懂了一個基本的程序,總結(jié)出了一個基本模式,然后模仿著再解決類似的問題,這就會容易很多。這與我們學英語要背例句是一個道理。你知道了May I borrow your pen?,你就可以類似的寫出借書借錢的句子來?;蛘哒f你要背幾個議論文的常見模式:Some people say AAAAAA. While others think BBBBBBB. From my poi

2、nt of view, CCCCCCCCC. 然后凡是遇到類似的作文題就可以套進去。對于初學者而言,程序能力強不強,可能很大程度上取決于他見過的模式多不多,以及見到一個新的問題,是不是能夠套到模式里面去。在這里,我總結(jié)出我們目前所學的常用基本模式,大家應該將這些模式掌握得非常熟練。至于其余的,就有待自己積累了。選擇模式:如果A條件成立,做B操作,否則做C操作。if ( A )B;elseC;這就是一個最基本的模式。這個說起來似乎很簡單,具體做起來可能還是會有一些困難,例如是否能夠認出這個框架,或者A這個條件是否能夠?qū)憣?,B、C操作能否處理好,都有可能存在問題。先看一個簡單的例子,oj1041:

3、從三鹿奶粉事件開始,眾多三氯氰胺超標的食品出來勒。10月8日發(fā)布公告:“液態(tài)奶(包括原料乳)、奶粉、其他配方乳粉中三聚氰胺的限量值為2.5mg/kg,高于2.5mg/kg的產(chǎn)品一律不得銷售?!爆F(xiàn)在我們就來對多家企業(yè)產(chǎn)品進行檢測。結(jié)合后面的輸入輸出要求,實際上我們就可以將題目簡化成:如果含量/質(zhì)量大于2.5,輸出被污染,否則輸出沒有被污染。這樣很容易就可以得到代碼了。我們在上課的時候,說過可以通過流程圖,幫助理清思路。實際上除了流程圖之外,也可以用偽代碼。偽代碼簡單的說,就是將你的思路用自然語言+程序控制語法寫出來。例如上面就可以寫成:if 含量/質(zhì)量大于2.5 輸出被污染else 輸出沒被污染

4、事實上,這時候程序的思路都已經(jīng)清楚了,剩下就只需要翻譯成C語言就好了。比流程圖更加簡單一點,自己可以試著用一用。拆數(shù)模式:要拆出一個數(shù)的右邊第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 處理剩余情況;這類模型的要點是各種情況互不重疊,只會屬于一種情況。這個問題很容易解決,但是當情況比較復雜,判斷有可

5、能出現(xiàn)重疊包含關(guān)系時,如何安排各種情況的順序就比較有講究,一般應該把特殊的情況放在前面先進行判斷。例如oj1033,判斷三角形:輸入三角形的三條邊,判斷它們能否構(gòu)成三角形。若能構(gòu)成三角形,指出是何種三角形(等腰三角形isosceles triangle、等邊三角形equilateral triangle,直角三角形right-angled triangle、一般三角形scalene triangle)。 這里等邊三角形也能同時滿足等腰三角形以及一般三角形的條件,如果先判斷一般三角形,則等邊三角形的情況就不會進入,因此需要把等邊三角形的判斷放到前面,以此類推。這個題目要寫的話,建議先把偽代碼寫清

6、楚。循環(huán)指定次數(shù)模式:int count, times;scanf( “%d”, × );for ( count = 0; count times; count+ )做要做的事情循環(huán)到特定條件退出模式:讀入第一組數(shù)據(jù)while(當前數(shù)據(jù)不滿足結(jié)束條件) 處理當前數(shù)據(jù) 讀入下一組數(shù)據(jù)在這個模式中,注意while括號里面是結(jié)束條件的否定循環(huán)到特定條件退出模式二:while(1) 讀入一組數(shù)據(jù)if 當前數(shù)據(jù)滿足結(jié)束條件break;處理當前數(shù)據(jù)循環(huán)到特定條件退出模式中,第二種模式相對容易寫對,因為結(jié)束條件通常比較好判斷。而第一種模式while括號里要寫結(jié)束條件的否定,否定用邏輯運算符連接的表

7、達式時,需要注意變運算符問題來看一個綜合實例判斷三角形,題目是這樣的:判斷輸入的三個整數(shù)能否構(gòu)成三角形三角形:任意兩邊之和大于第三邊多組測試數(shù)據(jù),每組輸入三個整數(shù),為三角形的三條邊長如果三個邊長均為0,則結(jié)束程序如果有至少一條邊為非正數(shù),則不處理如果能構(gòu)成三角形則輸出yes,否則輸出no,注意要換行在這個例子中,首先要分析出輸入的方式,根據(jù)題目描述,是遇到三個0時結(jié)束,即循環(huán)到特定條件結(jié)束模式。確定了輸入模式之后,就可以讀入一組,處理一組了。在處理的過程中,可以看到還有一個要求,如果有一條邊為非正數(shù),則不處理,注意,像這樣的要求,我們直接使用前面說的if模式即可,判斷是否沒有出現(xiàn)這種情況,只有

8、沒出現(xiàn)的時候才處理。結(jié)束的問題在循環(huán)中處理,而處理不處理的問題通過條件語句處理這就是根據(jù)經(jīng)驗作出的選擇?,F(xiàn)在我們需要兩個條件式,一個判斷是否結(jié)束,另一個判斷是否需要處理。先來看是否結(jié)束。這個結(jié)束的條件是大家都是0,那就是( a = 0 ) & ( b = 0 ) & ( c = 0 )三個條件必須同時成立才能結(jié)束,如果使用模式二,則這句話很容易寫對。可是如果使用模式一,則需要用到結(jié)束條件的否定,這個否定條件怎么寫呢。一個最簡單的方法是直接加上表示否定的邏輯運算符,即(!( a = 0 ) & ( b = 0 ) & ( c = 0 ),也就是不滿足a、b、c都等于0的條件。如果不喜歡這么寫,而

9、是想用!=的形式,則需要用到德摩根率的第一條,變號。變號的意思是,&變成|,所以結(jié)束條件的否定要寫為:( a != 0 )|(b != 0 )|( c != 0 )也就是a、b、c至少有一個不為0就接著循環(huán)。類似的,我們來看處理不處理的問題,不處理的條件是只要有一個非正就不處理。在這里,有一個經(jīng)驗,那就是類似“有一個”,或者含有“非”或者“不”的描述,在翻譯成條件表達式的時候很容易出現(xiàn)問題,所以一個簡單的辦法,就是盡量處理肯定、所有的情況。這里,處理的條件是所有的都是正數(shù)才處理,這個就很容易寫對了。在寫程序時,根據(jù)實際情況,當需要用到if else語句進行二選一時,可以將比較好判斷的那部分放到if里。求和、平均、計數(shù)模式:P44:28套-三【計數(shù)】P12:第2套-三【求和】函數(shù)傳參&返回結(jié)果模式int fun(int x,int y)return ;檢查條件是否滿足并返回是或者否模式判斷一個數(shù)是否是素數(shù)傳遞指針作為參數(shù)模式:P81:56套-二、三遍歷數(shù)組進行處理模式找最大值模式&傳遞數(shù)組作為參數(shù)模式傳遞二維數(shù)組作為參數(shù)&遍歷二維數(shù)組進行處理模式*標記數(shù)組模式。補充示例cinema*將不確定個數(shù)數(shù)據(jù)放入數(shù)組模式*存儲數(shù)據(jù)查詢模

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論