Presentation is loading. Please wait.

Presentation is loading. Please wait.

Instructor:Po-Yu Kuo 教師:郭柏佑

Similar presentations


Presentation on theme: "Instructor:Po-Yu Kuo 教師:郭柏佑"— Presentation transcript:

1 Instructor:Po-Yu Kuo 教師:郭柏佑
EL 計算機概論 (電子一B) Introduction to Computer Science Ch. 7 迴圈控制 Instructor:Po-Yu Kuo 教師:郭柏佑

2 本章簡介 電腦程式的方便之處, 在於我們可以把各種繁雜、重複、枯燥的計算, 寫成程式, 讓電腦代替人工處理。
程式執行後, 我們只需要輸入數值和 按下 “Enter”建, 就可以得到結果。 程式之所以能完成這類的計算, 主要原因是在於它的兩種特性 - 選擇性與重複性。

3 本章簡介 選擇性就是根據使用者的選擇, 作出判斷並執行出正確的結果。
重複性就是程式依照設計者所設計的邏輯, 不斷的重複執行相同的程式碼, 以完成繁雜、重複的計算。 在C語言中, 這種特性可以利用迴圈來完成。

4 本章簡介 假設我們要寫一個計算 1+2+3+…100 的程式, 以目前所學, 我們所寫出來的程式可能如下: int main(void) {
int sum=0; sum = sum+1; printf (“sum的值 %d”, sum); sum = sum+2; sum = sum+3; ………. }

5 本章簡介 如範例所示, 不斷寫著相同的程式碼。 如此一來, 不但沒有解決重複計算的問題, 反而浪費更多時間在撰寫程式碼上。
使用迴圈, 便可解決這類程式碼重複編寫的麻煩。 迴圈的原理也是利用條件算式判斷真假, 來決定程式碼重複的次數。

6 流程圖

7 螢幕輸出 1 加到 100 的和

8 螢幕輸出 1 加到 100 的和

9 預先條件算式迴圈:while

10 預先條件算式迴圈:while 先檢查條件算式結果是否為真 (即不等於 0)。 若為真, 則執行一次迴圈內的動作, 然後跳回條件算式上再檢查。
如此,一直執行到條件算式不成立為止 (等於 0) 才離開迴圈。 使用 while 語法的格式如下:

11 預先條件算式迴圈:while while:根據條件算式的真假, 來決定是否執行迴圈的動作。 若為真, 則執行以大括號括住的動作;
若為假則跳過動作不執行, 也就是跳出迴圈。 條件算式:可以為任何算式、變數或數值。 如果結果為非 0 的數值, 則表示為真; 否則為假。

12 預先條件算式迴圈:while 動作:可以為任何合法的程式語法。 while 的執行流程如下:

13 累加指定範圍內整數 start為起始值, end為結束值

14 累加指定範圍內整數

15 流程圖

16 預先條件算式迴圈:while 利用 while 進行輾轉相除法

17 預先條件算式迴圈:while

18 後設條件算式迴圈:do-while

19 後設條件算式迴圈:do-while do-while 是後設判斷式的迴圈, 是先執行一次動作後, 再判斷迴圈控制的條件,
若條件成立時, 再回到前面執行 { } 內的動作, 如此重複直到條件算式的結果為假為止。 此種迴圈不管怎樣, 都會先執行迴圈內容一次後, 再判斷是否要繼續執行。格式如下:

20 流程圖 迴圈動作會先執行一次 判斷條件設在此處

21 後設條件算式迴圈:do-while

22 後設條件算式迴圈:do-while

23 後設條件算式迴圈:do-while

24 範圍設定式迴圈:for

25 範圍設定式迴圈:for for 迴圈是利用一個變數值的累加或累減來控制迴圈, 等到該變數值達到設定的標準時, 就會跳出迴圈。

26 範圍設定式迴圈:for 初始算式:通常用來設定條件算式中會用到的變數之初始值。
條件算式:用來判斷是否執行迴圈中的程式。這個條件算式, 會在每次迴圈開始時檢查一次。 控制算式:通常用於調整條件算式中會用到的變數值, 例如 i++ 。

27 例 for (i=0; i<3; i++) 以 for (i=0; i<3; i++) 為例, 執行步驟如下:

28 流程圖

29 簡單的 for 迴圈累加 每次執行迴圈後, 便將 i 加2

30 for 迴圈中可有兩組算式

31 for 迴圈中可有兩組算式

32 for 迴圈中可有兩組算式

33 for迴圈也可用浮點數來控制

34 for迴圈也可用浮點數來控制

35 for迴圈也可用浮點數來控制

36 使用巢狀迴圈 所謂巢狀迴圈就是說在迴圈的條件算式為真時, 所執行的動作內還有其他的迴圈, 也就是說迴圈裡面還有迴圈, 如以下格式:

37 使用巢狀迴圈

38 從螢幕輸出九九乘法表 第一層迴圈, 條件式由 i 控制 第二層迴圈, 條件式由 j 控制

39 從螢幕輸出九九乘法表 j=1 j=2 j=3 j=4 j=5 j =6 j=7 j=8 j =9 i=1 i=2 i=3 i=4 i=5

40 強制跳出迴圈的方式

41 無限迴圈 當迴圈的條件算式設定有誤, 使迴圈的條件算式結果恆真, 迴圈的動作就會不斷的執行。
只有當程式被強迫中止 (按下組合鍵 Ctrl + C) 或硬體停止回應 (電腦當機) 程式才會被終止。 無限迴圈通常被使用在電腦病毒或惡意程式中, 一般的程式並不會用到。 例如: 電腦中毒後, 一直開啟小視窗, 直到當機。

42 跳出一層迴圈 while 條件永遠為真

43 跳出一層迴圈

44 跳出一輪迴圈

45 強迫程式執行指定敘述 使用 goto 可以一次跳過數個迴圈, 將程式流程移轉到其他的地方

46 強迫程式執行指定敘述

47 強迫程式執行指定敘述

48 goto 的優點 & 缺點 goto 並不只限用於迴圈中, 在任何位置使用 goto, 都可以使程式的執行轉移到指定的位置。
如果因為其方便性而濫用, 將會造成程式閱讀的困難, 甚至破壞整個程式的結構。 建議讀者, 如果不是很熟悉 goto 的應用, 請盡量少用。

49 用無窮迴圈讓系統持續運作

50 當迴圈的條件算式結果恆為真, 迴圈的動作就會不斷的執行, 就稱之為無窮迴圈。
在嵌入式、單晶片的程式設計中, 無窮迴圈是讓系統持續運作的主要機制。

51 也可用沒有算式的 for 迴圈來建立無窮迴圈:

52 嵌入式系統是『執行特定功能』的電腦系統, 因此只要打開開關、通電後, 就會一直執行設計好的工作。

53 用迴圈來延遲程式時序

54 在嵌入式、單晶片的程式設計中, 還有一項比較特別的迴圈應用, 就是利用沒做事的迴圈來延遲程式, 或者說讓程式故意停頓一下。

55 有些廠商會在其廠商自訂的函式庫中, 提供像是 delay() 之類的函式, 直接呼叫函式讓系統暫。

56

57 使用迴圈的注意事項

58 兩迴圈之間的範圍不可以交錯 兩迴圈之間的範圍不可以交錯。 條件算式的設定要合理。 依照程式需求, 選擇使用特性適合的迴圈。

59 7-7-1 兩迴圈之間的範圍不可以交錯 如果迴圈的動作敘述超過了一行, 就需要以大括號 { } 括住敘述的程式碼。
兩迴圈之間的範圍不可以交錯 如果迴圈的動作敘述超過了一行, 就需要以大括號 { } 括住敘述的程式碼。 當在同一程式中存在兩個以上的迴圈時, 兩迴圈以大括號 { } 括住敘述的程式碼不可以交錯。 以下迴圈 2 的大括號內容是空的, 而『動作 2』則變成是在迴圈 1 的大括號範圍之內。如以一來, 所得到的結果絕對不是我們想要的答案。

60 兩迴圈之間的範圍不可以交錯 兩個迴圈{ }的範圍交錯了

61 兩迴圈之間的範圍不可以交錯 當兩迴圈範圍交錯時, 編譯器會將動作 2 錯認為迴圈 1 的範圍, 而迴圈 2 的效力無法影響到動作 2。 若出現此種程式, 編譯時有時候會出現 "Compound statement missing }" 訊息, 也就是缺少標示右大括號的錯誤。

62 7-7-2 條件算式的設定要合理 不正確的條件算式設定會產生無限迴圈, 或者根本未執行到迴圈的內容。
因此在設定迴圈的條件式時, 請仔細檢查條件算式的推演結果, 以下是一些條件算式不合理的例子:

63 7-7-3 注意各種迴圈的使用時機 先判斷再決定是否執行時, 使用 while 迴圈。
先執行一次再決定是否繼續時, 使用 do-while 迴圈 準確控制迴圈內容的執行次數, 使用 for 迴圈。

64 綜合演練

65 求出 1~100 間的質數

66 求出 1~100 間的質數 內迴圈

67 求出 1~100 間的質數 每印出 5 個數, 就做換行的動作

68 求出 1~100 間的質數

69 求出 1~100 間的質數 第 9~24 行是外迴圈, 功能為設定被除數。
第 12~14 行是內迴圈, 功能是設定除數。這個迴圈會以小於被除數的數值來除被除數。 例如 : 被除數=7; 將 7 除以比他自己小的數。 7/2 7/5 7/3 7/6 7/4

70 求出 1~100 間的質數 如果無法除盡 (餘數不為 0), 則將旗標保持為 0, 表示為質數。
如果可以除盡 (餘數為 0), 則將旗標的數值改為 1, 表示非質數。

71 求出 輸入數值的位數 設計一程式可讓使用者輸入任何正整數, 計算出數 值的位數後, 將此數值的位數由螢幕輸出, 如果輸入
數值小於1, 會在螢幕印出 ” The number is smaller than 1, please input again!!!”, 讓使用者再輸入一次 數值. 說明: 執行結果 Please input any positive number: -5 The number is smaller than 1, please input again!!! Please input any positive number: 125 Number of the Digits: 3 125 有3個位數

72 Homework#6 1. 設計一程式可讓使用者輸入 兩個正整數, 並將所有介於此區間的 質數 列印出來. (Hints: 利用 scanf 讀進兩正整數) 2.設計一程式可讓使用者輸入任何正整數, 計算出數值的位數後, 將此數值的位數由螢幕輸出, 如果輸入數值小於1, 會在螢幕印出 ” The number is smaller than 1, please input again!!!”, 讓使用者再輸入一次數值. 繳交期限: 2017/1/5


Download ppt "Instructor:Po-Yu Kuo 教師:郭柏佑"

Similar presentations


Ads by Google