1 第 4 章 流程控制 4-1 循序結構 4-2 選擇結構 4-3 重複結構 4-4...

50
1 第4第 第第第第 4-1 循循循循 4-2 循循循循 4-3 循循循循 4-4 循循循循循循循循 4-5 循循循循循循

Post on 19-Dec-2015

246 views

Category:

Documents


0 download

TRANSCRIPT

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

1

第 4章 流程控制

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

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

2

4-1 循序結構

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

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

3

循序式結構的流程示範: CH04_01

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

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

4

選擇結構

選擇結構的條件敘述是讓程式能夠選擇應該執行的程式碼,就好比各位開車到十字路口,可根據不同的狀況來選擇需要的路徑。

C 中提供了五種相實用的條件控制敘述,分別為 if 、 if-else 、條件運算子、 if else if 以及 switch 控制敘述等五種。

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

5

選擇結構流程示意圖

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

6

if 條件敘述

if 敘述式是最簡單的一種條件判斷式,可先行判斷條件敘述是否成立,再依照結果來決定所要執行的程式敘述。

在 C 中,經過比較運算子的運算,其中非 0( 零 ) 的數都會被視為真 (true) ,而將 0 視為假 (false) 。

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

7

if 條件敘述的流程圖

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

8

if 條件敘述的應用與示範: CH04_02

程式範例是讓各位輸入停車時數,以一小時 50 元收費,當大於一小時才開始收費,並列印出停車費用。

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

9

if- else 條件敘述

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

if-else 敘述的作用是當 if 的判斷條件成立時,就執行程式區塊內的敘述,如果不成立,就會執行 else 後的敘述區塊。

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

10

if else 條件敘述的流程圖

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

11

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

程式範例是利用 if else 條件敘述來判斷所輸入的國文成績是否及格,如果大於或等於 60 則列印 " 本科成績及格 ." ,否則列印 " 本科成績不及格 ." 。

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

12

條件運算子

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

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

13

條件運算子的應用與示範: CH04_04

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

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

14

if else if 條件敘述

if else if 條件敘述是一種多選一的條件敘述,讓使用者在 if 敘述和 else if 中選擇符合條件運算式的程式敘述區塊,如果以上條件運算式都不符合,就執行最後的 else 敘述,或者這也可看成是一種巢狀 if else 結構。

並非每個 if 都會有對應的 else ,但是 else 一定對應到最接近的一個 if ,如果對應錯誤,往往會造成不同的結果,這也是日後各位除錯時容易犯的小 bug 。

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

15

if else if 條件敘述的流程圖

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

16

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

程式範例是利用 if else if 條件敘述來執行潤年計算規則,以讓使用者輸入西元年來判斷是否為潤年。

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

17

switch 條件敘述

在進行多重選擇的時候,過多的 else-if 條件敘述經常會造成程式維護上的困擾。

C 提供了 switch 條件敘述,讓程式更加簡潔清楚。

switch 敘述必須依據同一個運算式的不同結果來選擇所要執行的 case 敘述。

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

18

「失敗經過」 (falling through) 現象

switch 條件敘述,如果找到相同的結果值則執行該 case 內的程式敘述,當執行完任何 case 區塊後,並不會直接離開 switch 區塊。

通常每道 case 敘述最後,必須加上 break敘述來結束 switch 敘述,才可以避免「失敗經過」的情況。

switch( 條件運算式 ) 敘述中的括號絕不可省略,這也是除錯的熱門景點之一喔!

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

19

switch 條件敘述的流程圖

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

20

switch 條件敘述的應用與示範: CH04_06

程式範例是利用 switch 條件敘述來輸入所要旅遊的地點,並分別顯示其價格。

其中大小寫字母都代表同一地點,並利用 break 的特性,設定多重的 case 條件。

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

21

重複結構

重複結構是一種迴圈控制,根據所設立的條件,重複執行某一段程式敘述,直到條件判斷不成立,才會跳出迴圈。迴圈種類 功能說明

for敘述 適用於計數式的條件控制,使用者已事先知道迴圈的次數。

while敘述 迴圈次數為未知,必須滿足特定條件,才能進入迴圈,同樣的,只有不滿足條件測試後,迴圈才會結束。

do-while敘述 會先執行一次迴圈內的敘述,再進行條件測試。

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

22

for 迴圈敘述

1.設定控制變數起始值。2. 如果條件運算式為真則執行 for 迴圈內的

敘述。3. 執行完成之後,增加或減少控制變數的

值,可視使用者的需求來作控制,再重複步驟 2 。

4. 如果條件運算式為假,則跳離 for 迴圈。

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

23

for 迴圈敘述的流程圖

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

24

for 迴圈敘述的應用與示範: CH04_07

程式範例是利用 for 迴圈來計算 1 加到 10 的累加值,是相當經典的 for 迴圈教學範例。

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

25

巢狀 for 迴圈

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

巢狀 for 迴圈結構中,執行流程必須先將內層迴圈執行完畢,才會繼續執行外層迴圈,容易犯錯的地方是迴圈間不可交錯。

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

26

九九乘法表的列印實作: CH04_08

程式範例是利用巢狀 for 迴圈來設計的九九乘法表列印實作。

其中兩個 for 迴圈的執行次數都是 9次,所以內圈的「 printf("%d x %d=%d\t", b, a, a*b); 」敘述共執行了 81次。而外圈的「 printf("\n"); 」只執行 9次。

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

27

while 迴圈敘述

while 迴圈敘述與 for 迴圈敘述類似,都是屬於前測試型迴圈。

運作方式則是在程式敘述區塊中的開頭必須先行檢查條件運算式,當運算式結果為 true 時,才會執行區塊內的程式。

while 迴圈還必須自行加入起始值與設定一個變數作為計數器,當每執行一次迴圈,在程式區塊敘述中計數器的值必須要改變,否則如果條件式永遠成立時,也將造成所謂無窮迴圈。

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

28

while 迴圈敘述的流程圖

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

29

while 迴圈敘述來計算 n! 的值: CH04_09

程式範例是利用利用 while 迴圈讓使用者輸入 n 值,並分別計算 1! 到 n! 的值。

程式中的 i 就是 while 迴圈中控制迴圈的計數器。

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

30

一個整數的所有正因數: CH04_10

程式範例也是利用 while 迴圈來求出使用者所輸入整數的所有正因數。

while 迴圈中,藉由「 a<=n 」的條件式以及「 a++; 」敘述來控制程式重複的次數。

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

31

do while 迴圈敘述

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

do-while 迴圈內的程式敘述,無論如何至少會被執行一次。

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

32

do while 迴圈敘述的流程圖

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

33

do while 迴圈的應用實作: CH04_11

程式範例是利用 do while 迴圈敘述來由使用者輸入 n 值,當 n 小於 10 時才進行 1 到 n 的累加計算。

過當 n 大於 10 時, do while 敘述還是會執行一次迴圈內的敘述,這點可是和使用 while 迴圈敘述不同之處。

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

34

蝸牛爬樹問題: CH04_12

這個程式範例也是利用 do while 迴圈敘述來解決蝸牛爬樹問題。

假如有一隻蝸牛爬一棵 10公尺的大樹,白天往上爬 2 公尺,但晚上會掉下 1 公尺,請問要幾天才可爬到樹頂?

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

35

其他迴圈相關敘述

一個由 C 的基本流程控制寫出的應用程式,有時候會出現一些特別的需求。

要跳出程式敘述區塊或者返回迴圈起點時,就可以使用 break 或 continue 敘述,又或是想要將程式流程直接改變至任何位置執行,也可以使用 goto 敘述來達成。

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

36

break 敘述

break 敘述在之前多重選擇 switch 敘述中已經使用過,相信各位應該有點眼熟不過 break 並不只限於和 switch搭配使用,任何一種迴圈類型,都能使用 break 敘述來強制跳出所在的迴圈敘述區塊。

break 敘述在巢狀迴圈中的內層迴圈,一旦執行 break 敘述時, break 就會立刻跳出最近的一層迴圈區塊,並將控制權交給區塊外的下一行程式。

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

37

break 敘述的應用與示範: CH04_13

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

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

38

continue 敘述

continue 敘述的功能是強迫 for 、 while 、do while 等迴圈敘述,結束正在迴圈本體區塊內進行的程序,而將控制權轉移到迴圈開始處。

continue 與 break 敘述的最大差別在於 continue 只是忽略之後未執行的敘述,但並未跳離迴圈。語法格式如下: continue;

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

39

continue 敘述的應用與示範: CH04_14

程式範例是利用 continue 敘述來控制九九乘法表的列印程式,由使用者輸入數字,並列印所指定數字之外的所有九九乘法表項目。

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

40

簡單密碼驗證程式: CH04_15

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

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

41

goto 敘述

goto 敘述是一種允許強制跳脫的流程控制敘述,只要在 goto 敘述所要前往的程式敘述所在設立標記,就可以直接從 goto 所在位置跳到標記處。

goto 敘述必須搭配設定的標籤來使用,而標籤名稱則是一個識別字加上冒號 ( : ) 所組成。

程式執行到 goto 敘述時,便會跳躍至標籤名稱所在敘述,而繼續往下執行。

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

42

goto 敘述的應用與示範: CH04_16

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

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

43

kbhit()函數應用

kbhit()函數含括在 <conio.h>標頭檔內,主要功用是在不會中斷程式來等待使用者輸入的情況下,會去檢查緩衝區是否有資料。

適合在某些需要程式持續執行,直到使用者碰觸任一按鍵,才產生其它執行請求的狀況,例如螢幕保護程式。

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

44

體重計算程式實作: CH04_17.c

while 迴圈重複在畫面顯示字串 " 輸入任一鍵結束程式 " ,直到使用者碰觸任一鍵後才會結束執行。

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

45

求取最大值程式: CH04_18.c

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

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

46

π 近似值的求解程式: CH04_19.c

設計一程式可輸入 k 值,求 π 的近似值: ,其中 k 的值越大, π 的近似

值越精確。

k

n

n

n0 12

)1(

4

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

47

n! 的計算程式: CH04_20.c

利用 while 迴圈讓使用者輸入 n 值,並計算 n! 的值。

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

48

商品金額與折扣計算 榮欽百貨公司準備促銷三種商品,再依照顧客消

費金額進行折扣優惠。促銷的商品資料如下:

根據上表,可計算出顧客的總消費金額。至於折扣如下表所示:

商品代碼 商品名稱 價格X或 x 電冰箱 10000

Y或 y 冷氣機 15000

Z或 z 個人電腦 25000

消費金額 折扣15萬元 15%

10萬元 10%

5萬元以下 5%

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

49

商品金額與折扣計算程式: CH04_21.c

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

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

50

判斷使用者所輸入的數為整數或奇數: CH04_22.c

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