ch05.ppt_第1页
ch05.ppt_第2页
ch05.ppt_第3页
ch05.ppt_第4页
ch05.ppt_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、博碩文化出版發行,程式設計,第五章 流程控制,課前指引 所謂結構化程式設計的趨勢慢慢成為程式開發的主流概念,其主要精神與模式就是將整個問題從上而下,由大到小逐步分解成較小的單元,這些單元稱為模組(module)。除了模組化設計,所謂結構化程式設計的特色,還包括三種程式控制基本架構:循序結構、選擇結構以及重複結構。,章節大綱,備註:可依進度點選小節,5-1 循序結構,5-2 選擇結構,5-3 重複式結構,5-4 迴圈控制指令,循序結構就是程式敘述由上而下一個接著一個的執行方式 。,5-1 循序結構,(入口),(出口),程式區塊 在C程式中,可以使用大括號 將多個敘述包圍起來,形式如下所示:,5-

2、1 循序結構, 程式敘述; 程式敘述; 程式敘述; ,範例 CH05_01.c,5-1 循序結構,執行結果 程式解說 第7、8行分別宣告整數與浮點數變數。 第11行輸入Chi、Eng、Math三個整數變數的資料值。 第13行計算兩者成績總和,並儲存在Total變數。 第14行計算兩者平均成績。 第16行將成績平均與總分的結果輸出。,5-1 循序結構,範例:CH05_02.c,5-1 循序結構,執行結果,5-1 循序結構,程式解說 第7行宣告整數變數x、y、h,分別存放梯形的長、寬和高。 第8行宣告浮點數變數。 第11行分別輸入梯形的長、寬、高,當輸入資料時,只要按下tab鍵、Enter鍵或空白

3、鍵為變數區隔,即可將資料放入x、y、h中。 第12行計算梯形面積公式的結果,這裏在(x+y)加上(float),是為了將整數型態的x、y、h計算後的值,強制轉換為浮點數型態,以求得較精確的計算結果。,5-1 循序結構,選擇結構(Selection structure):一種條件控制指令,如果條件為真,則執行某些程式,一旦條件為假,則執行另一些程式。,5-2 選擇結構,(入口),(出口),if 條件指令 當if的判斷條件成立時(傳回1),程式將執行括號內的敘述;否則測試條件不成立(傳回0)時,則不執行括內號敘述,並結束if敘述。 if敘述的語法格式如下所示:,5-2 選擇結構,if (條件運算子

4、) 程式敘述; ,範例CH05_03.c /* if條件敘述式之1 */,5-2 選擇結構,執行結果 程式解說 第9行輸入停車時數。 第10行利用if指令,當輸入的數字大於1時,會執行後方程式碼第1114行。,5-2 選擇結構,範例CH05_04.c /* if條件敘述式之2 */,5-2 選擇結構,執行結果 程式解說 在C中,非0(零)的數都會被視為真(true),而將0(零)視為假(false)。 第11行中,if條件敘述使用運算式Select-Result組成,只要運算的結果不為0,都會被視為真(true),而輸出猜錯了的訊息。,5-2 選擇結構,if-else條件敘述 if-else敘

5、述提供了兩種不同的選擇,當if的判斷條件(Condition)成立時(傳回1),將執行if程式敘述區內的程式;否則執行else程式敘述區內的程式後結束if敘述。 和if敘述一樣,在else 敘述下所要被執行的程式可以是單行或是用大括號 所包含多行程式碼。 if-else敘述提供了兩種不同的選擇,當if的判斷條件(Condition)成立時(傳回1),將執行if程式敘述區內的程式;否則執行else程式敘述區內的程式後結束if敘述。如下圖所示:,5-2 選擇結構,if-else條件敘述,5-2 選擇結構,範例 CH05_05.c,5-2 選擇結構,/* if-else條件敘述式 */,執行結果 程

6、式解說 在C第9行請任意輸入一個整數。 第11行利用if指令判斷是否為2或3的倍數,與第16行的else敘述為一組。 第1214行則是一組if else敘述,用來判斷是否為6的倍數。,5-2 選擇結構,巢狀(nested)if條件敘述 有時會出現if條件敘述所包含的複合敘述中,又有另外一層的if條件敘述。 由於在C中並非每個if都會有對應的else,但是else一定對應最近的一個if。當然除了if敘述可使用巢狀式結構外,else敘述也可以使用。不過同樣的爲了程式的閱讀便利性,在此不鼓勵使用else巢狀敘述。,5-2 選擇結構,範例CH05_06.c /* 巢狀if-else條件敘述式 */,5

7、-2 選擇結構,執行結果 程式解說 第8行輸入消費總金額,變數採用浮點數型態,因為結果會有小數點位數。 第9行if判斷式,如果cost是10萬元以上打85折。 第11行if判斷式,如果cost是5萬元到10萬元之間打9折,第13行eles敘述,判斷如果cost小於5萬元,則打95折。,5-2 選擇結構,條件運算子 條件運算式?程式敘述一:程式敘述二; 例如: (number%2=0) ? printf(輸入數字為偶數n) : printf(輸入數字為奇數n) ;,5-2 選擇結構,範例CH05_07.c /* 三元條件運算子?:*/,5-2 選擇結構,執行結果 程式解說 第7行宣告表示兩科目分

8、數的整數變數。 第8行宣告表示合格的字元變數。 第12行輸入兩科成績。 第14行使用條件運算子來判斷該考生是否合格。,5-2 選擇結構,switch選擇敘述,5-2 選擇結構,switch敘述的執行過程重點 先求出運算式的值,再將此值與case的判斷值進行比對,而switch判斷值必需是整數或字元。 若找到相同的值則執行case內的程式敘述,執行完任何case區塊後,並不會離開switch區塊。而是往下繼續執行其它的case敘述與default敘述。所以case敘述的最後必須加上break敘述來結束switch敘述。 如果找不到吻合的判斷值,則會執行default敘述,如果沒有default敘

9、述則結束switch敘述。,5-2 選擇結構,範例CH05_08.c /* switch選擇敘述 */,5-2 選擇結構,5-2 選擇結構,執行結果,5-2 選擇結構,程式解說 第711行輸出各種便當的售價與相關文字。 第15行依據輸入的select字元決定執行哪一行的case,例如當輸入字元為1時,會輸出“排骨便當一份75元”字串,而break敘述代表的是直接跳出switch條件敘述,不會執行下一個case敘述。 第29行若輸入的字元都不符合所有case條件,即是1、2、3、4以外的字元,則會執行default後的程式敘述區塊。,5-2 選擇結構,重複結構主要是迴圈控制的功能,迴圈(loop

10、)會重複執行一個程式區塊的程式碼,直到符合特定的結束條件為止。 簡單來說,重複結構可以執行相同的程式片斷,也可讓程式更符合結構化設計的精神。 在C中,則提供了for、while以及do-while三種重複結構。,5-3 重複式結構,for迴圈執行步驟說明 設定控制變數起始值。 如果條件運算式為真則執行for迴圈內的敘述。 執行完成之後,增加或減少控制變數的值,可視使用者的需求來作控制,再重複步驟2。 如果條件運算式為假,則跳離for迴圈。 語法 for( 設定初始值 ; 條件運算式 ; 增減變數值 ) 敘述式; ,5-3 重複式結構,for迴圈 計算1加到100的程式片斷,5-3 重複式結構,

11、範例 CH05_09.c,5-3 重複式結構,/* for 迴圈之1 */,執行結果 程式解說 第7行宣告sum為長整數。 第1217行如果所輸入的值在1100間,則執行1416行的指令。 第14行使用for迴圈來控制設定了變數i的起始值為1,迴圈重複條件為i小於等於n,i的遞增值為1,所以當i大於n時,就會離開for迴圈。 第16行輸出計算後的結果。,5-3 重複式結構,範例 CH05_10.c,5-3 重複式結構,/* for 迴圈之2 */,執行結果 程式解說 第6行設定初始的MAX值為0。 第9行準備輸入數字的個數,第1117行利用for迴圈來輸入數字與尋找最大值。 第1516行如果目

12、前輸入的數值input大於MAX,那MAX就重新設定為input。 第18行輸出這些數字中的最大值MAX。,5-3 重複式結構,兩層式的巢狀for迴圈結構格式,5-3 重複式結構,範例CH05_11.c /* 巢狀for 迴圈之1 */,5-3 重複式結構,執行結果 程式解說 第8行外層for迴圈控制i輸出,只要i=9,就繼續執行第916行。 第10行內層for迴圈控制j輸出,只要j=9,就繼續執行第1213行。 第1213行i*j的值。,5-3 重複式結構,範例CH05_12.c /* 巢狀for 迴圈之2 */,5-3 重複式結構,執行結果 程式解說 第9行外層for迴圈控制i輸出,而第1

13、1行則利用內層for迴圈控制sum輸出,並且利用sim*=j來計算i!的值,第14行將sum的值重新指定為1。,5-3 重複式結構,while 迴圈 while結構與for結構類似,都是屬於前測試型迴圈。兩者之間最大不同處是在於for迴圈需要給它一個特定的次數;而while迴圈則不需要,它只要在判斷的條件為true的情況下就能一直執行。 while敘述的語法大致如下:,5-3 重複式結構,while(重複條件式) 程式敘述; ,while 迴圈 迴圈內的敘述可以是一個敘述或是多個陳述句。同樣地,如果有多個陳述句在迴圈中執行,可以使用大括號括住。下圖為while敘述執行的流程示意圖:,5-3 重

14、複式結構,範例CH05_13.c /* while 迴圈之1 */,5-3 重複式結構,執行結果 程式解說 第7行定義while迴圈的成立條件為只要sum=0,第9行中的sum就依次減去x的値。 第10行當x每進迴圈一次就累加一次,最後迴圈條件不成立(sum0)時,顯示最後的x值。 第12行是因為之前x預先加1,所以要再減1。,5-3 重複式結構,範例 CH05_14.c,5-3 重複式結構,/* while 迴圈之2, 找因數 */,執行結果 程式解說 第6行設定a=1,且為第一個正因數。 第11行定義while迴圈,且設定條件為a=n,則執行第1219行。 第13行當n能夠被a整除時,則a

15、就是n的正因數。 第18行a值遞增1。,5-3 重複式結構,範例CH05_15.c /* while 迴圈之3 */,5-3 重複式結構,執行結果 程式解說 程式第06行,使用while迴圈等待使用者按鍵,直到有按鍵訊息才結束程式。,5-3 重複式結構,do while迴圈 下圖為do-while敘述執行的流程示意圖:,5-3 重複式結構,do while迴圈 do-while迴圈的最重要特性就是先去執行迴圈內的程式至少一次,再去判斷條件式,5-3 重複式結構,範例CH05_16.c /* do-while 迴圈之1 */,5-3 重複式結構,執行結果 程式解說 第6行宣告整數變數check_

16、key,同時將初始值設定成0,而第8行while迴圈與第13行dowhile迴圈的條件判斷式都是(check_key=1)。 第9行並不會執行while迴圈敘述。 第13行在條件判斷都不成立的情形下,dowhile迴圈中的輸出最少還是被執行一次,才會跳離迴圈。,5-3 重複式結構,範例 CH05_17.c,5-3 重複式結構,/* do-while 迴圈之2 */,執行結果 程式解說 第9行無論如何都會執行一次。 第13行利用條件運算子來判斷input的值是否為奇數,如果是輸出Y字元,不是輸出N字元。 第17行利用getche()函數來輸入字元,可以不用另行按下Enter鍵。 第20行利用re

17、play值判斷是否進行迴圈。,5-3 重複式結構,事實上,迴圈並非一成不變的重複執行。可藉由迴圈控制指令,更有效的運用迴圈功能,例如必須中斷,讓迴圈提前結束。C語言中可以使用break或continue敘述,或是使用goto敘述直接將程式流程改變至任何想要的位置。底下就來介紹這三種流程控制的敘述。 break指令 continue指令 goto指令,5-4 迴圈控制指令,break指令 break指令可以用來跳離迴圈的執行,在for、while與do while中,主要用於中斷目前的迴圈執行,如果break並不是出現內含在for、while迴圈中或switch敘述中,則會發生編譯錯誤。 bre

18、ak指令通常會與if條件敘述連用,設定在某些條件一旦成立時,即跳離迴圈的執行。由於break指令只能跳離本身所在的一層迴圈,如果遇到巢狀迴圈包圍時,就要逐層加上break指令。,5-4 迴圈控制指令,範例CH05_18.c,5-4 迴圈控制指令,執行結果 程式解說 第812行執行for迴圈,當i=101時,則執行break指令,立刻跳出迴圈。 第13行輸出sum的值。,5-4 迴圈控制指令,範例CH05_19.c,5-4 迴圈控制指令,執行結果 程式解說 第8行外層for迴圈,由a控制y軸輸出。 第10行內層for迴圈,由b控制x軸輸出。 第12行的if敘述,在b的值大等於6時就會執行break敘述,並跳出最近的for迴圈到第16行來繼續執行。,5-4 迴圈控制指令,continue指令 continue指令則是指繼續下一次迴圈的運作。也就是說,如果是想要終止的不是整個迴圈,而是想要在某各特定的條件下時,才中止某次的迴圈執行就可使用continue指令。 continue指令只會直接略過底下尚未執行的程式碼,並跳至迴圈區塊的開頭繼續下一個迴圈,而不會離開迴圈 。,5-4 迴圈控制指令,範例CH05_20.c,5-4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论