Presentation is loading. Please wait.

Presentation is loading. Please wait.

4-1 循序結構 4-2 選擇結構 4-3 重複結構 4-4 其他迴圈相關敘述 4-5 本章綜合練習

Similar presentations


Presentation on theme: "4-1 循序結構 4-2 選擇結構 4-3 重複結構 4-4 其他迴圈相關敘述 4-5 本章綜合練習"— Presentation transcript:

1 4-1 循序結構 4-2 選擇結構 4-3 重複結構 4-4 其他迴圈相關敘述 4-5 本章綜合練習
第4章 流程控制 4-1 循序結構 4-2 選擇結構 4-3 重複結構 4-4 其他迴圈相關敘述 4-5 本章綜合練習

2 4-1循序結構 循序結構的程式,是以程式第一行敘述為進入點,依序由上往下執行到程式的最後一行敘述。以下是流程示意圖:

3 循序式結構的流程示範:CH04_01 程式範例是很簡單的輸出輸入功能,不過是用來說明循序結構由上往下的執行順序。

4 選擇結構 選擇結構的條件敘述是讓程式能夠選擇應該執行的程式碼,就好比各位開車到十字路口,可根據不同的狀況來選擇需要的路徑。
C中提供了五種相實用的條件控制敘述,分別為if、if-else、條件運算子、if else if 以及switch控制敘述等五種。

5 選擇結構流程示意圖

6 if條件敘述 if敘述式是最簡單的一種條件判斷式,可先行判斷條件敘述是否成立,再依照結果來決定所要執行的程式敘述。
在C中,經過比較運算子的運算,其中非0(零)的數都會被視為真(true),而將0視為假(false)。

7 if條件敘述的流程圖

8 if條件敘述的應用與示範:CH04_02 程式範例是讓各位輸入停車時數,以一小時50元收費,當大於一小時才開始收費,並列印出停車費用。

9 if- else條件敘述 if-else敘述提供了兩種不同的選擇,可以比單純只使用if條件敘述,節省更多判斷的時間。

10 if else 條件敘述的流程圖

11 if else條件敘述的應用與示範:CH04_03

12 條件運算子 條件運算子(conditional operator)是C中唯一的一個三元運算子(ternary operator),它和if else條件敘述功能一樣,可以用來替代簡單的if else條件敘述,讓程式碼看起來更為簡潔。語法格式如下: 條件運算式?程式敘述一:程式敘述二 ;

13 條件運算子的應用與示範:CH04_04 程式範例是利用條件運算子來判斷所輸入的數字為偶數與奇數,並列印其判斷結果。

14 if else if條件敘述 if else if條件敘述是一種多選一的條件敘述,讓使用者在if敘述和else if中選擇符合條件運算式的程式敘述區塊,如果以上條件運算式都不符合,就執行最後的else敘述,或者這也可看成是一種巢狀if else結構。 並非每個if都會有對應的else,但是else一定對應到最接近的一個if,如果對應錯誤,往往會造成不同的結果,這也是日後各位除錯時容易犯的小bug。

15 if else if 條件敘述的流程圖

16 if else if 條件敘述與閏年的判斷應用與示範:CH04_05

17 switch條件敘述 在進行多重選擇的時候,過多的else-if條件敘述經常會造成程式維護上的困擾。
C提供了switch條件敘述,讓程式更加簡潔清楚。 switch敘述必須依據同一個運算式的不同結果來選擇所要執行的case敘述。

18 「失敗經過」(falling through)現象
switch條件敘述,如果找到相同的結果值則執行該case內的程式敘述,當執行完任何case區塊後,並不會直接離開switch區塊。 通常每道case敘述最後,必須加上break敘述來結束switch敘述,才可以避免「失敗經過」的情況。 switch(條件運算式)敘述中的括號絕不可省略,這也是除錯的熱門景點之一喔!

19 switch 條件敘述的流程圖

20 switch條件敘述的應用與示範:CH04_06
其中大小寫字母都代表同一地點,並利用break的特性,設定多重的case條件。

21 重複結構 重複結構是一種迴圈控制,根據所設立的條件,重複執行某一段程式敘述,直到條件判斷不成立,才會跳出迴圈。 迴圈種類 功能說明
        功能說明 for敘述 適用於計數式的條件控制,使用者已事先知道迴圈的 次數。 while敘述 迴圈次數為未知,必須滿足特定條件,才能進入迴 圈,同樣的,只有不滿足條件測試後,迴圈才會結 束。 do-while敘述 會先執行一次迴圈內的敘述,再進行條件測試。

22 for迴圈敘述 1.設定控制變數起始值。 2.如果條件運算式為真則執行for迴圈內的敘述。
3.執行完成之後,增加或減少控制變數的值,可視使用者的需求來作控制,再重複步驟2。 4. 如果條件運算式為假,則跳離for迴圈。

23 for迴圈敘述的流程圖

24 for迴圈敘述的應用與示範:CH04_07 程式範例是利用for 迴圈來計算1加到10的累加值,是相當經典的for迴圈教學範例。

25 巢狀for迴圈 所謂巢狀for迴圈,就是多層式的for迴圈架構。

26 九九乘法表的列印實作:CH04_08 程式範例是利用巢狀for 迴圈來設計的九九乘法表列印實作。
其中兩個for迴圈的執行次數都是9次,所以內圈的「printf("%d x %d=%d\t", b, a, a*b);」敘述共執行了81次。而外圈的「printf("\n");」只執行9次。

27 while迴圈敘述 while迴圈敘述與for迴圈敘述類似,都是屬於前測試型迴圈。
運作方式則是在程式敘述區塊中的開頭必須先行檢查條件運算式,當運算式結果為true時,才會執行區塊內的程式。 while迴圈還必須自行加入起始值與設定一個變數作為計數器,當每執行一次迴圈,在程式區塊敘述中計數器的值必須要改變,否則如果條件式永遠成立時,也將造成所謂無窮迴圈。

28 while迴圈敘述的流程圖

29 while迴圈敘述來計算n!的值:CH04_09 程式範例是利用利用while迴圈讓使用者輸入n值,並分別計算1!到n!的值。
程式中的i就是while迴圈中控制迴圈的計數器。

30 一個整數的所有正因數:CH04_10 程式範例也是利用while迴圈來求出使用者所輸入整數的所有正因數。
while迴圈中,藉由「a<=n」的條件式以及「a++;」敘述來控制程式重複的次數。

31 do while迴圈敘述 do-while迴圈敘述無論如何一定會先執行迴圈內的程式敘述,再測試條件式是否成立,如果成立的話再返回迴圈起點重複執行敘述。 do-while迴圈內的程式敘述,無論如何至少會被執行一次。

32 do while迴圈敘述的流程圖

33 do while迴圈的應用實作:CH04_11 程式範例是利用 do while迴圈敘述來由使用者輸入n值,當n小於10時才進行1到n的累加計算。 過當n大於10時,do while敘述還是會執行一次迴圈內的敘述,這點可是和使用while迴圈敘述不同之處。

34 蝸牛爬樹問題:CH04_12 這個程式範例也是利用do while迴圈敘述來解決蝸牛爬樹問題。
假如有一隻蝸牛爬一棵10公尺的大樹,白天往上爬 2 公尺,但晚上會掉下 1 公尺,請問要幾天才可爬到樹頂?

35 其他迴圈相關敘述 一個由C的基本流程控制寫出的應用程式,有時候會出現一些特別的需求。
要跳出程式敘述區塊或者返回迴圈起點時,就可以使用break或continue敘述,又或是想要將程式流程直接改變至任何位置執行,也可以使用goto敘述來達成。

36 break敘述 break敘述在之前多重選擇switch敘述中已經使用過,相信各位應該有點眼熟不過break並不只限於和switch搭配使用,任何一種迴圈類型,都能使用break敘述來強制跳出所在的迴圈敘述區塊。 break敘述在巢狀迴圈中的內層迴圈,一旦執行break敘述時,break就會立刻跳出最近的一層迴圈區塊,並將控制權交給區塊外的下一行程式。

37 break敘述的應用與示範:CH04_13 程式範例是利用break敘述來控制九九乘法表的列印程式,由使用者輸入數字,並列印此數字之前的九九乘法表項目。

38 continue敘述 continue 敘述的功能是強迫 for、while、do while等迴圈敘述,結束正在迴圈本體區塊內進行的程序,而將控制權轉移到迴圈開始處。 continue 與 break 敘述的最大差別在於continue 只是忽略之後未執行的敘述,但並未跳離迴圈。語法格式如下: continue;

39 continue敘述的應用與示範:CH04_14

40 簡單密碼驗證程式:CH04_15 程式範例是同時結合break以及continue敘述特性來設計一程式讓使用者輸入密碼後,進行簡單密碼驗證工作,不過輸入次數以三次為限喔!

41 goto敘述 goto 敘述是一種允許強制跳脫的流程控制敘述,只要在goto 敘述所要前往的程式敘述所在設立標記,就可以直接從goto所在位置跳到標記處。 goto敘述必須搭配設定的標籤來使用,而標籤名稱則是一個識別字加上冒號(:)所組成。 程式執行到goto敘述時,便會跳躍至標籤名稱所在敘述,而繼續往下執行。

42 goto敘述的應用與示範:CH04_16 程式範例用來說明goto敘述的使用方式,其中分別設定了三個標籤,透過if敘述判斷,只要程式執行到所搭配的goto敘述,則會跳至該標籤敘述,繼續往下執行。

43 kbhit()函數應用 kbhit()函數含括在<conio.h>標頭檔內,主要功用是在不會中斷程式來等待使用者輸入的情況下,會去檢查緩衝區是否有資料。 適合在某些需要程式持續執行,直到使用者碰觸任一按鍵,才產生其它執行請求的狀況,例如螢幕保護程式。

44 體重計算程式實作:CH04_17.c while迴圈重複在畫面顯示字串"輸入任一鍵結束程式",直到使用者碰觸任一鍵後才會結束執行。

45 求取最大值程式:CH04_18.c 設計一程式,讓使用者輸入任意數目之數字,並利用for迴圈來輸入與尋找這些數字中的最大值。

46 π近似值的求解程式:CH04_19.c 設計一程式可輸入k值,求π的近似值: ,其中k的值越大,π的近似 值越精確。

47 n!的計算程式:CH04_20.c 利用 while迴圈讓使用者輸入n值,並計算n!的值。

48 商品金額與折扣計算 榮欽百貨公司準備促銷三種商品,再依照顧客消費金額進行折扣優惠。促銷的商品資料如下:
根據上表,可計算出顧客的總消費金額。至於折扣如下表所示: 商品代碼 商品名稱 價格 X或x 電冰箱 10000 Y或y 冷氣機 15000 Z或z 個人電腦 25000 消費金額 折扣 15萬元 15% 10萬元 10% 5萬元以下 5%

49 商品金額與折扣計算程式:CH04_21.c 利用switch敘述來撰寫一程式,依據商品金額以及購買數量,計算出總消費金額、折扣金額以及應付金額。

50 判斷使用者所輸入的數為整數或奇數:CH04_22.c
各位可經由數值與1進行&運算的結果來判斷其為奇數或偶數。請設計一程式,使用&運算子來判斷使用者所輸入的數為整數或奇數。


Download ppt "4-1 循序結構 4-2 選擇結構 4-3 重複結構 4-4 其他迴圈相關敘述 4-5 本章綜合練習"

Similar presentations


Ads by Google