




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、博碩文化出版發(fā)行,程式設(shè)計(jì),第五章 流程控制,課前指引 所謂結(jié)構(gòu)化程式設(shè)計(jì)的趨勢慢慢成為程式開發(fā)的主流概念,其主要精神與模式就是將整個(gè)問題從上而下,由大到小逐步分解成較小的單元,這些單元稱為模組(module)。除了模組化設(shè)計(jì),所謂結(jié)構(gòu)化程式設(shè)計(jì)的特色,還包括三種程式控制基本架構(gòu):循序結(jié)構(gòu)、選擇結(jié)構(gòu)以及重複結(jié)構(gòu)。,章節(jié)大綱,備註:可依進(jìn)度點(diǎn)選小節(jié),5-1 循序結(jié)構(gòu),5-2 選擇結(jié)構(gòu),5-3 重複式結(jié)構(gòu),5-4 迴圈控制指令,循序結(jié)構(gòu)就是程式敘述由上而下一個(gè)接著一個(gè)的執(zhí)行方式 。,5-1 循序結(jié)構(gòu),(入口),(出口),程式區(qū)塊 在C程式中,可以使用大括號 將多個(gè)敘述包圍起來,形式如下所示:,5-
2、1 循序結(jié)構(gòu), 程式敘述; 程式敘述; 程式敘述; ,範(fàn)例 CH05_01.c,5-1 循序結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 第7、8行分別宣告整數(shù)與浮點(diǎn)數(shù)變數(shù)。 第11行輸入Chi、Eng、Math三個(gè)整數(shù)變數(shù)的資料值。 第13行計(jì)算兩者成績總和,並儲存在Total變數(shù)。 第14行計(jì)算兩者平均成績。 第16行將成績平均與總分的結(jié)果輸出。,5-1 循序結(jié)構(gòu),範(fàn)例:CH05_02.c,5-1 循序結(jié)構(gòu),執(zhí)行結(jié)果,5-1 循序結(jié)構(gòu),程式解說 第7行宣告整數(shù)變數(shù)x、y、h,分別存放梯形的長、寬和高。 第8行宣告浮點(diǎn)數(shù)變數(shù)。 第11行分別輸入梯形的長、寬、高,當(dāng)輸入資料時(shí),只要按下tab鍵、Enter鍵或空白
3、鍵為變數(shù)區(qū)隔,即可將資料放入x、y、h中。 第12行計(jì)算梯形面積公式的結(jié)果,這裏在(x+y)加上(float),是為了將整數(shù)型態(tài)的x、y、h計(jì)算後的值,強(qiáng)制轉(zhuǎn)換為浮點(diǎn)數(shù)型態(tài),以求得較精確的計(jì)算結(jié)果。,5-1 循序結(jié)構(gòu),選擇結(jié)構(gòu)(Selection structure):一種條件控制指令,如果條件為真,則執(zhí)行某些程式,一旦條件為假,則執(zhí)行另一些程式。,5-2 選擇結(jié)構(gòu),(入口),(出口),if 條件指令 當(dāng)if的判斷條件成立時(shí)(傳回1),程式將執(zhí)行括號內(nèi)的敘述;否則測試條件不成立(傳回0)時(shí),則不執(zhí)行括內(nèi)號敘述,並結(jié)束if敘述。 if敘述的語法格式如下所示:,5-2 選擇結(jié)構(gòu),if (條件運(yùn)算子
4、) 程式敘述; ,範(fàn)例CH05_03.c /* if條件敘述式之1 */,5-2 選擇結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 第9行輸入停車時(shí)數(shù)。 第10行利用if指令,當(dāng)輸入的數(shù)字大於1時(shí),會執(zhí)行後方程式碼第1114行。,5-2 選擇結(jié)構(gòu),範(fàn)例CH05_04.c /* if條件敘述式之2 */,5-2 選擇結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 在C中,非0(零)的數(shù)都會被視為真(true),而將0(零)視為假(false)。 第11行中,if條件敘述使用運(yùn)算式Select-Result組成,只要運(yùn)算的結(jié)果不為0,都會被視為真(true),而輸出猜錯(cuò)了的訊息。,5-2 選擇結(jié)構(gòu),if-else條件敘述 if-else敘
5、述提供了兩種不同的選擇,當(dāng)if的判斷條件(Condition)成立時(shí)(傳回1),將執(zhí)行if程式敘述區(qū)內(nèi)的程式;否則執(zhí)行else程式敘述區(qū)內(nèi)的程式後結(jié)束if敘述。 和if敘述一樣,在else 敘述下所要被執(zhí)行的程式可以是單行或是用大括號 所包含多行程式碼。 if-else敘述提供了兩種不同的選擇,當(dāng)if的判斷條件(Condition)成立時(shí)(傳回1),將執(zhí)行if程式敘述區(qū)內(nèi)的程式;否則執(zhí)行else程式敘述區(qū)內(nèi)的程式後結(jié)束if敘述。如下圖所示:,5-2 選擇結(jié)構(gòu),if-else條件敘述,5-2 選擇結(jié)構(gòu),範(fàn)例 CH05_05.c,5-2 選擇結(jié)構(gòu),/* if-else條件敘述式 */,執(zhí)行結(jié)果 程
6、式解說 在C第9行請任意輸入一個(gè)整數(shù)。 第11行利用if指令判斷是否為2或3的倍數(shù),與第16行的else敘述為一組。 第1214行則是一組if else敘述,用來判斷是否為6的倍數(shù)。,5-2 選擇結(jié)構(gòu),巢狀(nested)if條件敘述 有時(shí)會出現(xiàn)if條件敘述所包含的複合敘述中,又有另外一層的if條件敘述。 由於在C中並非每個(gè)if都會有對應(yīng)的else,但是else一定對應(yīng)最近的一個(gè)if。當(dāng)然除了if敘述可使用巢狀式結(jié)構(gòu)外,else敘述也可以使用。不過同樣的爲(wèi)了程式的閱讀便利性,在此不鼓勵(lì)使用else巢狀敘述。,5-2 選擇結(jié)構(gòu),範(fàn)例CH05_06.c /* 巢狀if-else條件敘述式 */,5
7、-2 選擇結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 第8行輸入消費(fèi)總金額,變數(shù)採用浮點(diǎn)數(shù)型態(tài),因?yàn)榻Y(jié)果會有小數(shù)點(diǎn)位數(shù)。 第9行if判斷式,如果cost是10萬元以上打85折。 第11行if判斷式,如果cost是5萬元到10萬元之間打9折,第13行eles敘述,判斷如果cost小於5萬元,則打95折。,5-2 選擇結(jié)構(gòu),條件運(yùn)算子 條件運(yùn)算式?程式敘述一:程式敘述二; 例如: (number%2=0) ? printf(輸入數(shù)字為偶數(shù)n) : printf(輸入數(shù)字為奇數(shù)n) ;,5-2 選擇結(jié)構(gòu),範(fàn)例CH05_07.c /* 三元條件運(yùn)算子?:*/,5-2 選擇結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 第7行宣告表示兩科目分
8、數(shù)的整數(shù)變數(shù)。 第8行宣告表示合格的字元變數(shù)。 第12行輸入兩科成績。 第14行使用條件運(yùn)算子來判斷該考生是否合格。,5-2 選擇結(jié)構(gòu),switch選擇敘述,5-2 選擇結(jié)構(gòu),switch敘述的執(zhí)行過程重點(diǎn) 先求出運(yùn)算式的值,再將此值與case的判斷值進(jìn)行比對,而switch判斷值必需是整數(shù)或字元。 若找到相同的值則執(zhí)行case內(nèi)的程式敘述,執(zhí)行完任何case區(qū)塊後,並不會離開switch區(qū)塊。而是往下繼續(xù)執(zhí)行其它的case敘述與default敘述。所以case敘述的最後必須加上break敘述來結(jié)束switch敘述。 如果找不到吻合的判斷值,則會執(zhí)行default敘述,如果沒有default敘
9、述則結(jié)束switch敘述。,5-2 選擇結(jié)構(gòu),範(fàn)例CH05_08.c /* switch選擇敘述 */,5-2 選擇結(jié)構(gòu),5-2 選擇結(jié)構(gòu),執(zhí)行結(jié)果,5-2 選擇結(jié)構(gòu),程式解說 第711行輸出各種便當(dāng)?shù)氖蹆r(jià)與相關(guān)文字。 第15行依據(jù)輸入的select字元決定執(zhí)行哪一行的case,例如當(dāng)輸入字元為1時(shí),會輸出“排骨便當(dāng)一份75元”字串,而break敘述代表的是直接跳出switch條件敘述,不會執(zhí)行下一個(gè)case敘述。 第29行若輸入的字元都不符合所有case條件,即是1、2、3、4以外的字元,則會執(zhí)行default後的程式敘述區(qū)塊。,5-2 選擇結(jié)構(gòu),重複結(jié)構(gòu)主要是迴圈控制的功能,迴圈(loop
10、)會重複執(zhí)行一個(gè)程式區(qū)塊的程式碼,直到符合特定的結(jié)束條件為止。 簡單來說,重複結(jié)構(gòu)可以執(zhí)行相同的程式片斷,也可讓程式更符合結(jié)構(gòu)化設(shè)計(jì)的精神。 在C中,則提供了for、while以及do-while三種重複結(jié)構(gòu)。,5-3 重複式結(jié)構(gòu),for迴圈執(zhí)行步驟說明 設(shè)定控制變數(shù)起始值。 如果條件運(yùn)算式為真則執(zhí)行for迴圈內(nèi)的敘述。 執(zhí)行完成之後,增加或減少控制變數(shù)的值,可視使用者的需求來作控制,再重複步驟2。 如果條件運(yùn)算式為假,則跳離for迴圈。 語法 for( 設(shè)定初始值 ; 條件運(yùn)算式 ; 增減變數(shù)值 ) 敘述式; ,5-3 重複式結(jié)構(gòu),for迴圈 計(jì)算1加到100的程式片斷,5-3 重複式結(jié)構(gòu),
11、範(fàn)例 CH05_09.c,5-3 重複式結(jié)構(gòu),/* for 迴圈之1 */,執(zhí)行結(jié)果 程式解說 第7行宣告sum為長整數(shù)。 第1217行如果所輸入的值在1100間,則執(zhí)行1416行的指令。 第14行使用for迴圈來控制設(shè)定了變數(shù)i的起始值為1,迴圈重複條件為i小於等於n,i的遞增值為1,所以當(dāng)i大於n時(shí),就會離開for迴圈。 第16行輸出計(jì)算後的結(jié)果。,5-3 重複式結(jié)構(gòu),範(fàn)例 CH05_10.c,5-3 重複式結(jié)構(gòu),/* for 迴圈之2 */,執(zhí)行結(jié)果 程式解說 第6行設(shè)定初始的MAX值為0。 第9行準(zhǔn)備輸入數(shù)字的個(gè)數(shù),第1117行利用for迴圈來輸入數(shù)字與尋找最大值。 第1516行如果目
12、前輸入的數(shù)值input大於MAX,那MAX就重新設(shè)定為input。 第18行輸出這些數(shù)字中的最大值MAX。,5-3 重複式結(jié)構(gòu),兩層式的巢狀for迴圈結(jié)構(gòu)格式,5-3 重複式結(jié)構(gòu),範(fàn)例CH05_11.c /* 巢狀for 迴圈之1 */,5-3 重複式結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 第8行外層for迴圈控制i輸出,只要i=9,就繼續(xù)執(zhí)行第916行。 第10行內(nèi)層for迴圈控制j輸出,只要j=9,就繼續(xù)執(zhí)行第1213行。 第1213行i*j的值。,5-3 重複式結(jié)構(gòu),範(fàn)例CH05_12.c /* 巢狀for 迴圈之2 */,5-3 重複式結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 第9行外層for迴圈控制i輸出,而第1
13、1行則利用內(nèi)層for迴圈控制sum輸出,並且利用sim*=j來計(jì)算i!的值,第14行將sum的值重新指定為1。,5-3 重複式結(jié)構(gòu),while 迴圈 while結(jié)構(gòu)與for結(jié)構(gòu)類似,都是屬於前測試型迴圈。兩者之間最大不同處是在於for迴圈需要給它一個(gè)特定的次數(shù);而while迴圈則不需要,它只要在判斷的條件為true的情況下就能一直執(zhí)行。 while敘述的語法大致如下:,5-3 重複式結(jié)構(gòu),while(重複條件式) 程式敘述; ,while 迴圈 迴圈內(nèi)的敘述可以是一個(gè)敘述或是多個(gè)陳述句。同樣地,如果有多個(gè)陳述句在迴圈中執(zhí)行,可以使用大括號括住。下圖為while敘述執(zhí)行的流程示意圖:,5-3 重
14、複式結(jié)構(gòu),範(fàn)例CH05_13.c /* while 迴圈之1 */,5-3 重複式結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 第7行定義while迴圈的成立條件為只要sum=0,第9行中的sum就依次減去x的値。 第10行當(dāng)x每進(jìn)迴圈一次就累加一次,最後迴圈條件不成立(sum0)時(shí),顯示最後的x值。 第12行是因?yàn)橹皒預(yù)先加1,所以要再減1。,5-3 重複式結(jié)構(gòu),範(fàn)例 CH05_14.c,5-3 重複式結(jié)構(gòu),/* while 迴圈之2, 找因數(shù) */,執(zhí)行結(jié)果 程式解說 第6行設(shè)定a=1,且為第一個(gè)正因數(shù)。 第11行定義while迴圈,且設(shè)定條件為a=n,則執(zhí)行第1219行。 第13行當(dāng)n能夠被a整除時(shí),則a
15、就是n的正因數(shù)。 第18行a值遞增1。,5-3 重複式結(jié)構(gòu),範(fàn)例CH05_15.c /* while 迴圈之3 */,5-3 重複式結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 程式第06行,使用while迴圈等待使用者按鍵,直到有按鍵訊息才結(jié)束程式。,5-3 重複式結(jié)構(gòu),do while迴圈 下圖為do-while敘述執(zhí)行的流程示意圖:,5-3 重複式結(jié)構(gòu),do while迴圈 do-while迴圈的最重要特性就是先去執(zhí)行迴圈內(nèi)的程式至少一次,再去判斷條件式,5-3 重複式結(jié)構(gòu),範(fàn)例CH05_16.c /* do-while 迴圈之1 */,5-3 重複式結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 第6行宣告整數(shù)變數(shù)check_
16、key,同時(shí)將初始值設(shè)定成0,而第8行while迴圈與第13行dowhile迴圈的條件判斷式都是(check_key=1)。 第9行並不會執(zhí)行while迴圈敘述。 第13行在條件判斷都不成立的情形下,dowhile迴圈中的輸出最少還是被執(zhí)行一次,才會跳離迴圈。,5-3 重複式結(jié)構(gòu),範(fàn)例 CH05_17.c,5-3 重複式結(jié)構(gòu),/* do-while 迴圈之2 */,執(zhí)行結(jié)果 程式解說 第9行無論如何都會執(zhí)行一次。 第13行利用條件運(yùn)算子來判斷input的值是否為奇數(shù),如果是輸出Y字元,不是輸出N字元。 第17行利用getche()函數(shù)來輸入字元,可以不用另行按下Enter鍵。 第20行利用re
17、play值判斷是否進(jìn)行迴圈。,5-3 重複式結(jié)構(gòu),事實(shí)上,迴圈並非一成不變的重複執(zhí)行??山逵赊捜刂浦噶?,更有效的運(yùn)用迴圈功能,例如必須中斷,讓迴圈提前結(jié)束。C語言中可以使用break或continue敘述,或是使用goto敘述直接將程式流程改變至任何想要的位置。底下就來介紹這三種流程控制的敘述。 break指令 continue指令 goto指令,5-4 迴圈控制指令,break指令 break指令可以用來跳離迴圈的執(zhí)行,在for、while與do while中,主要用於中斷目前的迴圈執(zhí)行,如果break並不是出現(xiàn)內(nèi)含在for、while迴圈中或switch敘述中,則會發(fā)生編譯錯(cuò)誤。 bre
18、ak指令通常會與if條件敘述連用,設(shè)定在某些條件一旦成立時(shí),即跳離迴圈的執(zhí)行。由於break指令只能跳離本身所在的一層迴圈,如果遇到巢狀迴圈包圍時(shí),就要逐層加上break指令。,5-4 迴圈控制指令,範(fàn)例CH05_18.c,5-4 迴圈控制指令,執(zhí)行結(jié)果 程式解說 第812行執(zhí)行for迴圈,當(dāng)i=101時(shí),則執(zhí)行break指令,立刻跳出迴圈。 第13行輸出sum的值。,5-4 迴圈控制指令,範(fàn)例CH05_19.c,5-4 迴圈控制指令,執(zhí)行結(jié)果 程式解說 第8行外層for迴圈,由a控制y軸輸出。 第10行內(nèi)層for迴圈,由b控制x軸輸出。 第12行的if敘述,在b的值大等於6時(shí)就會執(zhí)行break敘述,並跳出最近的for迴圈到第16行來繼續(xù)執(zhí)行。,5-4 迴圈控制指令,continue指令 continue指令則是指繼續(xù)下一次迴圈的運(yùn)作。也就是說,如果是想要終止的不是整個(gè)迴圈,而是想要在某各特定的條件下時(shí),才中止某次的迴圈執(zhí)行就可使用continue指令。 continue指令只會直接略過底下尚未執(zhí)行的程式碼,並跳至迴圈區(qū)塊的開頭繼續(xù)下一個(gè)迴圈,而不會離開迴圈 。,5-4 迴圈控制指令,範(fàn)例CH05_20.c,5-4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 把握考試動(dòng)向2025年信息系統(tǒng)項(xiàng)目管理師試題及答案
- 公共政策評估的關(guān)鍵指標(biāo)試題及答案
- 2024年年4K超高清資金籌措計(jì)劃書代可行性研究報(bào)告
- 軟件設(shè)計(jì)師考試多層面提升方案試題及答案
- 政治輿論對決策的影響軌跡試題及答案
- 影響公共衛(wèi)生政策的政治因素分析試題及答案
- 更有效地學(xué)習(xí)西方政治考試試題及答案
- 軟件設(shè)計(jì)師考試中的時(shí)間分配技巧試題及答案
- 西方國家政策的社會影響分析試題及答案
- 社會心理學(xué)在公共政策分析中的應(yīng)用試題及答案
- 光伏施工安全培訓(xùn)
- 國企崗位筆試題目及答案
- 社工招錄考試試題及答案
- 餐廳廚房5S管理
- 變配電運(yùn)行值班員(220kV及以下)高級技師-機(jī)考題庫(導(dǎo)出版)
- DB11-T 2398-2025 水利工程巡視檢查作業(yè)規(guī)范
- 2025春季學(xué)期國開電大本科《人文英語3》一平臺在線形考綜合測試(形考任務(wù))試題及答案
- 《人工智能安全導(dǎo)論》 課件 第七章 人工智能在聯(lián)邦學(xué)習(xí)領(lǐng)域
- 員工電動(dòng)車管理制度
- 百葉窗施工工藝方案 組織設(shè)計(jì)
- 授權(quán)審批管理制度
評論
0/150
提交評論