




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、博碩文化出版發(fā)行,程式設(shè)計(jì),第五章 流程控制,課前指引 所謂結(jié)構(gòu)化程式設(shè)計(jì)的趨勢(shì)慢慢成為程式開發(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程式中,可以使用大括號(hào) 將多個(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ì)算兩者成績(jī)總和,並儲(chǔ)存在Total變數(shù)。 第14行計(jì)算兩者平均成績(jī)。 第16行將成績(jī)平均與總分的結(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,分別存放梯形的長(zhǎng)、寬和高。 第8行宣告浮點(diǎn)數(shù)變數(shù)。 第11行分別輸入梯形的長(zhǎng)、寬、高,當(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í)行括號(hào)內(nèi)的敘述;否則測(cè)試條件不成立(傳回0)時(shí),則不執(zhí)行括內(nèi)號(hào)敘述,並結(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í),會(huì)執(zhí)行後方程式碼第1114行。,5-2 選擇結(jié)構(gòu),範(fàn)例CH05_04.c /* if條件敘述式之2 */,5-2 選擇結(jié)構(gòu),執(zhí)行結(jié)果 程式解說 在C中,非0(零)的數(shù)都會(huì)被視為真(true),而將0(零)視為假(false)。 第11行中,if條件敘述使用運(yùn)算式Select-Result組成,只要運(yùn)算的結(jié)果不為0,都會(huì)被視為真(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í)行的程式可以是單行或是用大括號(hào) 所包含多行程式碼。 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行請(qǐng)任意輸入一個(gè)整數(shù)。 第11行利用if指令判斷是否為2或3的倍數(shù),與第16行的else敘述為一組。 第1214行則是一組if else敘述,用來判斷是否為6的倍數(shù)。,5-2 選擇結(jié)構(gòu),巢狀(nested)if條件敘述 有時(shí)會(huì)出現(xiàn)if條件敘述所包含的複合敘述中,又有另外一層的if條件敘述。 由於在C中並非每個(gè)if都會(huì)有對(duì)應(yīng)的else,但是else一定對(duì)應(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ù)採(cǎi)用浮點(diǎn)數(shù)型態(tài),因?yàn)榻Y(jié)果會(huì)有小數(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行輸入兩科成績(jī)。 第14行使用條件運(yùn)算子來判斷該考生是否合格。,5-2 選擇結(jié)構(gòu),switch選擇敘述,5-2 選擇結(jié)構(gòu),switch敘述的執(zhí)行過程重點(diǎn) 先求出運(yùn)算式的值,再將此值與case的判斷值進(jìn)行比對(duì),而switch判斷值必需是整數(shù)或字元。 若找到相同的值則執(zhí)行case內(nèi)的程式敘述,執(zhí)行完任何case區(qū)塊後,並不會(huì)離開switch區(qū)塊。而是往下繼續(xù)執(zhí)行其它的case敘述與default敘述。所以case敘述的最後必須加上break敘述來結(jié)束switch敘述。 如果找不到吻合的判斷值,則會(huì)執(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í),會(huì)輸出“排骨便當(dāng)一份75元”字串,而break敘述代表的是直接跳出switch條件敘述,不會(huì)執(zhí)行下一個(gè)case敘述。 第29行若輸入的字元都不符合所有case條件,即是1、2、3、4以外的字元,則會(huì)執(zhí)行default後的程式敘述區(qū)塊。,5-2 選擇結(jié)構(gòu),重複結(jié)構(gòu)主要是迴圈控制的功能,迴圈(loop
10、)會(huì)重複執(zhí)行一個(gè)程式區(qū)塊的程式碼,直到符合特定的結(jié)束條件為止。 簡(jiǎn)單來說,重複結(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為長(zhǎng)整數(shù)。 第1217行如果所輸入的值在1100間,則執(zhí)行1416行的指令。 第14行使用for迴圈來控制設(shè)定了變數(shù)i的起始值為1,迴圈重複條件為i小於等於n,i的遞增值為1,所以當(dāng)i大於n時(shí),就會(huì)離開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)類似,都是屬於前測(cè)試型迴圈。兩者之間最大不同處是在於for迴圈需要給它一個(gè)特定的次數(shù);而while迴圈則不需要,它只要在判斷的條件為true的情況下就能一直執(zhí)行。 while敘述的語法大致如下:,5-3 重複式結(jié)構(gòu),while(重複條件式) 程式敘述; ,while 迴圈 迴圈內(nèi)的敘述可以是一個(gè)敘述或是多個(gè)陳述句。同樣地,如果有多個(gè)陳述句在迴圈中執(zhí)行,可以使用大括號(hào)括住。下圖為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行並不會(huì)執(zhí)行while迴圈敘述。 第13行在條件判斷都不成立的情形下,dowhile迴圈中的輸出最少還是被執(zhí)行一次,才會(huì)跳離迴圈。,5-3 重複式結(jié)構(gòu),範(fàn)例 CH05_17.c,5-3 重複式結(jié)構(gòu),/* do-while 迴圈之2 */,執(zhí)行結(jié)果 程式解說 第9行無論如何都會(huì)執(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敘述中,則會(huì)發(fā)生編譯錯(cuò)誤。 bre
18、ak指令通常會(huì)與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í)就會(huì)執(zhí)行break敘述,並跳出最近的for迴圈到第16行來繼續(xù)執(zhí)行。,5-4 迴圈控制指令,continue指令 continue指令則是指繼續(xù)下一次迴圈的運(yùn)作。也就是說,如果是想要終止的不是整個(gè)迴圈,而是想要在某各特定的條件下時(shí),才中止某次的迴圈執(zhí)行就可使用continue指令。 continue指令只會(huì)直接略過底下尚未執(zhí)行的程式碼,並跳至迴圈區(qū)塊的開頭繼續(xù)下一個(gè)迴圈,而不會(huì)離開迴圈 。,5-4 迴圈控制指令,範(fàn)例CH05_20.c,5-4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度財(cái)務(wù)報(bào)表及審計(jì)結(jié)果
- 河南省駐馬店市部分學(xué)校2024-2025學(xué)年高三下學(xué)期3月月考地理試題(含答案)
- 基于區(qū)塊鏈技術(shù)的農(nóng)業(yè)溯源體系構(gòu)建方案
- 服裝設(shè)計(jì)與制造業(yè)務(wù)外包合作協(xié)議
- 個(gè)性化培訓(xùn)計(jì)劃實(shí)施效果分析表
- 網(wǎng)絡(luò)優(yōu)化服務(wù)升級(jí)合作協(xié)議
- 汽車采購銷售合同書及保修條款
- 智能醫(yī)療項(xiàng)目合作協(xié)議
- 企業(yè)危機(jī)管理機(jī)制構(gòu)建與運(yùn)行
- 交通行業(yè)交通事故處理保障預(yù)案
- 駕駛員的責(zé)任和義務(wù)
- 預(yù)防艾梅乙母嬰傳播課件
- 寶寶雙排牙介紹演示培訓(xùn)課件
- DB3402-T 59-2023 露天礦山無人駕駛礦車作業(yè)通用要求
- 2022中國(guó)腦性癱瘓康復(fù)指南(第一章)
- 糧油倉儲(chǔ)企業(yè)一規(guī)定兩守則試題(新改版附答案)
- 肛腸外科運(yùn)用PDCA循環(huán)降低住院腸造口并發(fā)癥發(fā)生率品管圈QCC持續(xù)質(zhì)量改進(jìn)成果匯報(bào)
- GB/T 15558.5-2023燃?xì)庥寐竦鼐垡蚁?PE)管道系統(tǒng)第5部分:系統(tǒng)適用性
- 區(qū)塊鏈技術(shù)在政府?dāng)?shù)字化轉(zhuǎn)型中審計(jì)項(xiàng)目的應(yīng)用研究
- 拼多多民事起訴狀模板
- 廠房租賃合同糾紛起訴狀
評(píng)論
0/150
提交評(píng)論