3 3 - - 4 4 重複結構 重複結構
重複結構的流程處理 重複結構的流程處理, 重複結構的流程處理 重複結構的流程處理 , ,其邏輯性就如同生活中的 , 其邏輯性就如同生活中的 其邏輯性就如同生活中的 其邏輯性就如同生活中的
「
「 「
「如果 如果 如果 如果…就持續 就持續 就持續…」 就持續 」 」的情形相同 」 的情形相同 的情形相同。 的情形相同 。 。 。
C++語言中提供重複結構的流程控制共有三種 語言中提供重複結構的流程控制共有三種 語言中提供重複結構的流程控制共有三種 語言中提供重複結構的流程控制共有三種, , , , 分別為 分別為 分別為
分別為
「「「「for…」」」」
「「「「while…」」」」
「「「「do…while」」」」
當程式中某一條件成立時會重複執行某一段敘 當程式中某一條件成立時會重複執行某一段敘 當程式中某一條件成立時會重複執行某一段敘 當程式中某一條件成立時會重複執行某一段敘 述
述 述
述, , , ,因此我們也把這種流程結構為 因此我們也把這種流程結構為 因此我們也把這種流程結構為 因此我們也把這種流程結構為「 「 「迴圈 「 迴圈 迴圈」。 迴圈 」。 」。 」。
因為重複處理的流程會依附著設定的條件式 因為重複處理的流程會依附著設定的條件式, 因為重複處理的流程會依附著設定的條件式 因為重複處理的流程會依附著設定的條件式 , ,假 , 假 假 假 如條件式的設計不當
如條件式的設計不當 如條件式的設計不當
如條件式的設計不當, , ,會造成 , 會造成 會造成「 會造成 「 「無窮迴圈 「 無窮迴圈 無窮迴圈」 無窮迴圈 」 」現 」 現 現 現 象
象 象
象, , , ,設計時必須小心注意 設計時必須小心注意 設計時必須小心注意 設計時必須小心注意! ! ! !
章節目錄 章節目錄
3-1 UML概述概述概述概述 3-1 UML概述概述概述概述
3-1-1 UML組成要素組成要素組成要素組成要素 3-1-1 UML組成要素組成要素組成要素組成要素
3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-3 選擇結構選擇結構選擇結構選擇結構 3-3 選擇結構選擇結構選擇結構選擇結構
3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷 3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷
3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷 3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷
3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇 3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇
3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件 3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件
3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇 3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇
3-4 重複結構重複結構重複結構重複結構 3-4 重複結構重複結構重複結構重複結構
3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數 3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數
3 3 - - 4 4 - - 1 1 已知迴圈次數 已知迴圈次數 — — for for
使用 使用for迴圈時必須有計數器 使用 使用 迴圈時必須有計數器 迴圈時必須有計數器、 迴圈時必須有計數器 、 、條件運算和控制運 、 條件運算和控制運 條件運算和控制運 條件運算和控制運 算式來完成重複計次的工作
算式來完成重複計次的工作 算式來完成重複計次的工作
算式來完成重複計次的工作, , ,語法如下 , 語法如下 語法如下: 語法如下 : : :
計數器計數器計數器計數器::::用來控制用來控制用來控制用來控制「「「「for…」」」」迴圈中有計次作用的數迴圈中有計次作用的數迴圈中有計次作用的數迴圈中有計次作用的數 變
變 變
變,,,,須做初始化設定須做初始化設定須做初始化設定須做初始化設定;;;;通常在第一次進入迴圈才執行通常在第一次進入迴圈才執行通常在第一次進入迴圈才執行通常在第一次進入迴圈才執行
條件運算式條件運算式條件運算式條件運算式::::當條件值為當條件值為當條件值為當條件值為true(是是是是)時時時時,,,,會進入區塊內之會進入區塊內之會進入區塊內之會進入區塊內之 執行程式敘述
執行程式敘述 執行程式敘述
執行程式敘述,,,,不斷重複執行不斷重複執行不斷重複執行不斷重複執行,,,,直到條件值為直到條件值為直到條件值為直到條件值為false 時
時 時
時,,,,才會停止重複的動作才會停止重複的動作才會停止重複的動作才會停止重複的動作,,,,離開迴圈離開迴圈離開迴圈離開迴圈
控制運算式控制運算式控制運算式控制運算式::::當條件運算式為當條件運算式為當條件運算式為當條件運算式為true時才會執行此運算時才會執行此運算時才會執行此運算時才會執行此運算 式式
式式,,,,作為作為作為作為「「「「for…」」」」迴圈計數器的改變之用迴圈計數器的改變之用迴圈計數器的改變之用迴圈計數器的改變之用,,,,只在迴圈只在迴圈只在迴圈只在迴圈 內的敘述執行後才會被運算
內的敘述執行後才會被運算 內的敘述執行後才會被運算 內的敘述執行後才會被運算
for迴圈的運算參數必須利用分號迴圈的運算參數必須利用分號迴圈的運算參數必須利用分號迴圈的運算參數必須利用分號「「「「;」」」」加以區隔加以區隔加以區隔加以區隔
for for 迴圈流程圖 迴圈流程圖
範例: 範例: calu.cpp calu.cpp
我們先以一個數字加總範例來說明 我們先以一個數字加總範例來說明 我們先以一個數字加總範例來說明
我們先以一個數字加總範例來說明for迴圈運作方式迴圈運作方式迴圈運作方式迴圈運作方式
程式執行 程式執行
第第第第11~15行行行行::::for迴圈處理迴圈處理迴圈處理迴圈處理,,,,將將將將1~5數字進行加總數字進行加總數字進行加總數字進行加總
第第第第11行行行行,,,,設定計數器起始值為設定計數器起始值為設定計數器起始值為設定計數器起始值為「「「「1」,」,」,」,條件運算式為條件運算式為條件運算式為條件運算式為
「
「
「「counter <= 5」,」,」,」,控制運算式為控制運算式為控制運算式為控制運算式為「「「「counter++」。」。」。」。
第第第第12~14行行行行::::第第第第12行將加總後的數值儲存於行將加總後的數值儲存於行將加總後的數值儲存於sum變數行將加總後的數值儲存於 變數變數,變數,,, 第
第
第第14行輸出行輸出行輸出行輸出sum變數變數變數變數,,,,放在放在放在放在for迴圈內是為了瞭解迴圈內是為了瞭解迴圈內是為了瞭解迴圈內是為了瞭解sum數數數數 值的變化
值的變化 值的變化 值的變化。。。。
修改 修改 calc.cpp calc.cpp 程式碼為「 程式碼為「 calc2.cpp calc2.cpp 」 」
如果我們將第 如果我們將第11、 如果我們將第 如果我們將第 、 、 、12的敘述更改在 的敘述更改在 的敘述更改在 的敘述更改在for迴圈之 迴圈之 迴圈之 迴圈之 外 外 外
外, , ,修改如下 , 修改如下 修改如下: 修改如下 : : :
注意排列和符 號
範例 範例 calc2.cpp calc2.cpp 程式解說 程式解說
我們發現計數器的值為 我們發現計數器的值為 我們發現計數器的值為
我們發現計數器的值為「「「「6」,」,」,」,為什麼為什麼為什麼為什麼????因為控制運算式因為控制運算式因為控制運算式因為控制運算式
「「
「「counter++」」」」是迴圈敘述執行後是迴圈敘述執行後是迴圈敘述執行後是迴圈敘述執行後,,,,它才會更新計數器的它才會更新計數器的它才會更新計數器的它才會更新計數器的 值
值 值
值,,,,我們以下表我們以下表我們以下表我們以下表3-1來說明來說明來說明來說明::::
離開迴圈 離開迴圈 離開迴圈 離開迴圈 6 <= 5(不成立不成立不成立不成立)
6
6 sum = 10 + 5
5 <= 5(成立成立成立成立) 5
5
5 sum = 6 + 4
4 <= 5(成立成立成立成立) 4
4
4 sum = 3 + 3
3 <= 5(成立成立成立成立) 3
3
3 sum = 1 + 2
2 <= 5(成立成立成立成立) 2
2
2 sum = 0 + 1
1 <= 5(成立成立成立成立) 1
1
控制運算式 控制運算式 控制運算式 控制運算式
counter++
1+2+3+4+5 sum
條件運算式 條件運算式 條件運算式 條件運算式 counter <= 5 計數器計數器計數器
計數器 counter 迴圈
迴圈 迴圈 迴圈
無窮盡 無窮盡 for for 迴圈 迴圈
雖然我們強調雖然我們強調for迴圈是一個可計次的迴圈雖然我們強調雖然我們強調 迴圈是一個可計次的迴圈迴圈是一個可計次的迴圈。迴圈是一個可計次的迴圈。。但是在很多。但是在很多但是在很多但是在很多 情形之下情形之下情形之下
情形之下,,,也可以讓,也可以讓也可以讓for迴圈形成無窮盡迴圈也可以讓 迴圈形成無窮盡迴圈迴圈形成無窮盡迴圈迴圈形成無窮盡迴圈
做法很簡單做法很簡單,做法很簡單做法很簡單,,就是將,就是將就是將for迴圈不使用計數器和條件運算就是將 迴圈不使用計數器和條件運算迴圈不使用計數器和條件運算迴圈不使用計數器和條件運算 式
式式
式,,,做法為,做法為做法為:做法為:::
範例: 範例: infinite.cpp infinite.cpp
程式執行 程式執行
程式解說 程式解說
從程式碼第從程式碼第10~21行從程式碼第從程式碼第 行行,行,,為,為為for迴圈無窮盡迴圈為 迴圈無窮盡迴圈迴圈無窮盡迴圈。迴圈無窮盡迴圈。。然後讓讓。然後讓讓然後讓讓然後讓讓 使用者輸入數值來加總
使用者輸入數值來加總使用者輸入數值來加總
使用者輸入數值來加總,,,最後統計使用者輸入數值幾,最後統計使用者輸入數值幾最後統計使用者輸入數值幾最後統計使用者輸入數值幾 次
次次
次,,,顯示加總結果,顯示加總結果顯示加總結果。顯示加總結果。。。
第第13行第第 行行count進行計次動作行 進行計次動作進行計次動作,進行計次動作,,第,第第14行第 行行sum變數儲存加總行 變數儲存加總變數儲存加總變數儲存加總 數值
數值數值 數值。。。。
第第17~20行是用來判斷使用者要繼續輸入數值就按第第 行是用來判斷使用者要繼續輸入數值就按行是用來判斷使用者要繼續輸入數值就按Y鍵行是用來判斷使用者要繼續輸入數值就按 鍵鍵,鍵,,, 要離開時按下
要離開時按下要離開時按下
要離開時按下N鍵鍵鍵,鍵,,利用第,利用第利用第18行利用第 行行continue敘述讓程式繼行 敘述讓程式繼敘述讓程式繼敘述讓程式繼 續執行續執行續執行
續執行,,,第,第第20行的第 行的行的行的break敘述來中斷程式的執行敘述來中斷程式的執行敘述來中斷程式的執行。敘述來中斷程式的執行。。。
第第22行將計次第第 行將計次行將計次、行將計次、、加總的結果輸出、加總的結果輸出加總的結果輸出。加總的結果輸出。。。
章節目錄 章節目錄
3-1 UML概述概述概述概述 3-1 UML概述概述概述概述
3-1-1 UML組成要素組成要素組成要素組成要素 3-1-1 UML組成要素組成要素組成要素組成要素
3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-3 選擇結構選擇結構選擇結構選擇結構 3-3 選擇結構選擇結構選擇結構選擇結構
3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷 3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷
3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷 3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷
3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇 3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇
3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件 3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件
3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇 3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇
3-4 重複結構重複結構重複結構重複結構 3-4 重複結構重複結構重複結構重複結構
3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數 3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數
3-4-2 巢狀巢狀for迴圈巢狀巢狀 迴圈迴圈迴圈 3-4-2 巢狀巢狀for迴圈巢狀巢狀 迴圈迴圈迴圈
3 3 - - 4 4 - - 2 2 巢狀 巢狀 for for
巢狀 巢狀for迴圈就是 巢狀 巢狀 迴圈就是 迴圈就是for迴圈敘述中 迴圈就是 迴圈敘述中 迴圈敘述中 迴圈敘述中, , ,還有另一個 , 還有另一個 還有另一個 還有另一個for 迴圈敘述 迴圈敘述 迴圈敘述
迴圈敘述。 。 。 。
因此每一層迴圈都必須加入獨立的迴圈控制 因此每一層迴圈都必須加入獨立的迴圈控制, 因此每一層迴圈都必須加入獨立的迴圈控制 因此每一層迴圈都必須加入獨立的迴圈控制 , , ,這 這 這 這 種作法和前面的巢狀
種作法和前面的巢狀 種作法和前面的巢狀
種作法和前面的巢狀if相同 相同 相同 相同, , , ,也就是迴圈之間不 也就是迴圈之間不 也就是迴圈之間不 也就是迴圈之間不 可以將區塊重疊
可以將區塊重疊 可以將區塊重疊 可以將區塊重疊。 。 。 。
我們利用巢狀 我們利用巢狀for迴圈來處理等比級數的問題 我們利用巢狀 我們利用巢狀 迴圈來處理等比級數的問題 迴圈來處理等比級數的問題, 迴圈來處理等比級數的問題 , , ,等 等 等 等 比級數就是
比級數就是 比級數就是
比級數就是1+2+4+8+16…, , , ,原有的公式為 原有的公式為 原有的公式為 原有的公式為
其中的其中的其中的其中的a1表示首項表示首項表示首項表示首項,,,,r是公比是公比是公比是公比。。。。
重點!切記
範例: 範例: geometric.cpp geometric.cpp
執行程式 執行程式
利用巢狀利用巢狀for來計算等比級數利用巢狀利用巢狀 來計算等比級數來計算等比級數。來計算等比級數。。等比級數共有三個參數來。等比級數共有三個參數來等比級數共有三個參數來等比級數共有三個參數來 組成組成組成
組成:::首項:首項首項、首項、、公比和、公比和公比和N項值公比和 項值項值項值;;;;並加入公比並加入公比並加入公比並加入公比r的的的N次方值的 次方值次方值次方值。。。。因因因因 此先在程式碼第
此先在程式碼第此先在程式碼第
此先在程式碼第8、、、9行宣告這些變數、 行宣告這些變數行宣告這些變數,行宣告這些變數,,然後讓使用者輸,然後讓使用者輸然後讓使用者輸然後讓使用者輸 入這些變數值並進行讀取的動作
入這些變數值並進行讀取的動作入這些變數值並進行讀取的動作 入這些變數值並進行讀取的動作
第第14~23行為巢狀第第 行為巢狀行為巢狀for迴圈處理的區塊行為巢狀 迴圈處理的區塊迴圈處理的區塊:迴圈處理的區塊::第一層:第一層第一層for迴圈為第一層 迴圈為迴圈為迴圈為 第第第
第14~23行行行,行,,用來取得級數值並計算等比級數的總和,用來取得級數值並計算等比級數的總和用來取得級數值並計算等比級數的總和用來取得級數值並計算等比級數的總和
第第18~20行為第二層第第 行為第二層行為第二層for迴圈行為第二層 迴圈迴圈,迴圈,,主要目的是用來取得,主要目的是用來取得主要目的是用來取得N項值主要目的是用來取得 項值項值項值
巢狀 巢狀 for for 迴圈的運作情形 迴圈的運作情形
我們透過下表 我們透過下表 我們透過下表
我們透過下表3-2來說明巢狀來說明巢狀來說明巢狀for迴圈的運作情形來說明巢狀 迴圈的運作情形迴圈的運作情形。迴圈的運作情形。。。
離開迴圈 4 <= 3,假
4 4
離開迴圈 3 < 3,假
3 3
sum = 18 + 3*15 75
10 2 < 3,真
2 2
sum= 18 5
1 < 3,真 1
1 3 <= 3,真
3 3
離開迴圈 2 < 2,假
2 2
sum = 3 + 3*5 15
5 1 < 2,真
1 2 <= 3,真 1
2 2
sum = 0 + 3*1 不會計算 3
1 < 1,假 1
1 1 <= 3,真
1 1
sum += a1 * Nr N項
a1*Nr Nr=Nr*ratio
條件運算式 value < ctr 計數器
value 迴
圈 條件運算式
ctr <= item 計數器
ctr 迴
圈
第一層for 第二層for
第二層for迴圈 第一層for迴圈
迴圈內的運算式 迴圈內的運算式 迴圈內的運算式 迴圈內的運算式 進入迴圈進入迴圈進入迴圈
進入迴圈
章節目錄 章節目錄
3-1 UML概述概述概述概述 3-1 UML概述概述概述概述
3-1-1 UML組成要素組成要素組成要素組成要素 3-1-1 UML組成要素組成要素組成要素組成要素
3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-3 選擇結構選擇結構選擇結構選擇結構 3-3 選擇結構選擇結構選擇結構選擇結構
3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷 3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷
3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷 3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷
3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇 3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇
3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件 3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件
3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇 3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇
3-4 重複結構重複結構重複結構重複結構 3-4 重複結構重複結構重複結構重複結構
3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數 3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數
3-4-2 巢狀巢狀for迴圈巢狀巢狀 迴圈迴圈迴圈 3-4-2 巢狀巢狀for迴圈巢狀巢狀 迴圈迴圈迴圈
3-4-3 未知迴圈次數未知迴圈次數--while未知迴圈次數未知迴圈次數 3-4-3 未知迴圈次數未知迴圈次數--while未知迴圈次數未知迴圈次數
3 3 - - 4 4 - - 3 3 未知迴圈次數 未知迴圈次數 — — while while
如果並不知道迴圈要執行幾次 如果並不知道迴圈要執行幾次, 如果並不知道迴圈要執行幾次 如果並不知道迴圈要執行幾次 , , ,那麼 那麼 那麼 那麼while迴圈 迴圈 迴圈 迴圈 或
或 或
或do-while迴圈就是較好的處理方式 迴圈就是較好的處理方式 迴圈就是較好的處理方式, 迴圈就是較好的處理方式 , ,語法如 , 語法如 語法如 語法如 下
下 下 下: : : :
進入進入進入進入while迴圈時迴圈時迴圈時,迴圈時,,必須先檢查條件運算式,必須先檢查條件運算式必須先檢查條件運算式,必須先檢查條件運算式,,如果為真,如果為真如果為真如果為真 才會執行迴圈內的敘述
才會執行迴圈內的敘述 才會執行迴圈內的敘述
才會執行迴圈內的敘述;;;;如果為假如果為假如果為假如果為假,,,,就會跳離就會跳離就會跳離就會跳離。。。。
因此迴圈內的某一段敘述必須能改變條件運算式的值因此迴圈內的某一段敘述必須能改變條件運算式的值因此迴圈內的某一段敘述必須能改變條件運算式的值因此迴圈內的某一段敘述必須能改變條件運算式的值 來結束迴圈的執行
來結束迴圈的執行 來結束迴圈的執行
來結束迴圈的執行,,,,否則就會形成無窮盡迴圈否則就會形成無窮盡迴圈否則就會形成無窮盡迴圈否則就會形成無窮盡迴圈。。。。
While
While 迴圈的流程表示: 迴圈的流程表示:
範例: 範例: \ \ CH03 CH03 \ \ calc calc \ \ calcwhile.cpp calcwhile.cpp
範例儲存於範例儲存於calc資料夾範例儲存於範例儲存於 資料夾資料夾資料夾
那麼那麼while迴圈與那麼那麼 迴圈與迴圈與for迴圈有何不同迴圈與 迴圈有何不同迴圈有何不同?迴圈有何不同??如果我們用?如果我們用如果我們用while迴如果我們用 迴迴迴 圈來處理
圈來處理圈來處理
圈來處理1+2+3+4+5的總和的總和的總和的總和,,,,以底下範例說明以底下範例說明以底下範例說明以底下範例說明::::
重點
程式執行 程式執行
利用 利用 利用 利用while迴圈來處理時 迴圈來處理時 迴圈來處理時 迴圈來處理時
第第8行的第第 行的行的counter變數相當於行的 變數相當於變數相當於for迴圈的計數器變數相當於 迴圈的計數器迴圈的計數器迴圈的計數器
第第9行條件運算式相等於第第 行條件運算式相等於行條件運算式相等於for迴圈的條件運算式行條件運算式相等於 迴圈的條件運算式迴圈的條件運算式迴圈的條件運算式
第第10行則是將加總後的結果儲存於第第 行則是將加總後的結果儲存於行則是將加總後的結果儲存於sum變數行則是將加總後的結果儲存於 變數變數變數
為了要讓迴圈計次 為了要讓迴圈計次 為了要讓迴圈計次 為了要讓迴圈計次, , , ,所以在第 所以在第 所以在第 所以在第11行以 行以 行以 行以counter變 變 變 變 數進行遞增動作控制
數進行遞增動作控制 數進行遞增動作控制
數進行遞增動作控制, , , ,與 與 與 與for迴圈的控制運算式是 迴圈的控制運算式是 迴圈的控制運算式是 迴圈的控制運算式是 一樣的
一樣的
一樣的
一樣的
for for 迴圈與 迴圈與 while while 迴圈的比較 迴圈的比較
我們將 我們將我們將
我們將for迴圈和迴圈和迴圈和while迴圈撰寫的程式透過下圖來說明迴圈和 迴圈撰寫的程式透過下圖來說明迴圈撰寫的程式透過下圖來說明迴圈撰寫的程式透過下圖來說明
計數器 條件運算式 控制運算式
範例: 範例: gcd.cpp gcd.cpp
執行程式 執行程式
此範例是利用此範例是利用此範例是利用此範例是利用while迴圈來求取兩個整數的最大公因數迴圈來求取兩個整數的最大公因數迴圈來求取兩個整數的最大公因數迴圈來求取兩個整數的最大公因數,,,, 利用數學輾轉相除法的原理
利用數學輾轉相除法的原理 利用數學輾轉相除法的原理
利用數學輾轉相除法的原理,,,,讓兩數相除來取得結果讓兩數相除來取得結果讓兩數相除來取得結果讓兩數相除來取得結果。。。。
第第第第17~21行行行行::::while迴圈迴圈迴圈迴圈,,,,第第第第17行的行的行的行的while迴圈條件運算式迴圈條件運算式迴圈條件運算式迴圈條件運算式 中
中 中
中,,,,先判斷被除數先判斷被除數先判斷被除數先判斷被除數(dvend)是否為是否為是否為是否為0,,,,不為不為不為不為0的條件成立的條件成立的條件成立的條件成立 後
後 後
後,,,,才會進入迴圈的敘述才會進入迴圈的敘述才會進入迴圈的敘述才會進入迴圈的敘述。。。。
第第第第18行就是將兩數相除來取得餘數行就是將兩數相除來取得餘數行就是將兩數相除來取得餘數行就是將兩數相除來取得餘數,,,,如果餘數為如果餘數為如果餘數為如果餘數為0,,,,則除則除則除則除 數
數
數數(divisor)就是這兩個整數的最大公因數就是這兩個整數的最大公因數就是這兩個整數的最大公因數就是這兩個整數的最大公因數。。。。
第第第第19行的作用是用來處理餘數不是行的作用是用來處理餘數不是行的作用是用來處理餘數不是行的作用是用來處理餘數不是0的狀況的狀況的狀況的狀況,,,,必須將除數必須將除數必須將除數必須將除數 (divisor)更換成被除數更換成被除數更換成被除數更換成被除數(dvend)。。。。
第第第第20行將行將行將行將18行所得餘數變更為除數行所得餘數變更為除數行所得餘數變更為除數行所得餘數變更為除數,,,,繼續執行繼續執行繼續執行繼續執行,,,,直到餘直到餘直到餘直到餘 數為
數為
數為數為0為止為止為止為止。。。。
章節目錄 章節目錄
3-1 UML概述概述概述概述 3-1 UML概述概述概述概述
3-1-1 UML組成要素組成要素組成要素組成要素 3-1-1 UML組成要素組成要素組成要素組成要素
3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-3 選擇結構選擇結構選擇結構選擇結構 3-3 選擇結構選擇結構選擇結構選擇結構
3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷 3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷
3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷 3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷
3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇 3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇
3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件 3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件
3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇 3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇
3-4 重複結構重複結構重複結構重複結構 3-4 重複結構重複結構重複結構重複結構
3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數 3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數
3-4-2 巢狀巢狀for迴圈巢狀巢狀 迴圈迴圈迴圈 3-4-2 巢狀巢狀for迴圈巢狀巢狀 迴圈迴圈迴圈
3-4-3 未知迴圈次數未知迴圈次數--while未知迴圈次數未知迴圈次數 3-4-3 未知迴圈次數未知迴圈次數--while未知迴圈次數未知迴圈次數
3-4-4 後置處理後置處理—do…while迴圈後置處理後置處理 迴圈迴圈迴圈 3-4-4 後置處理後置處理—do…while迴圈後置處理後置處理 迴圈迴圈迴圈
3 3 - - 4 4 - - 4 4 後置處理的 後置處理的 do do … … while while 迴圈 迴圈
無論是 無論是while迴圈或是 無論是 無論是 迴圈或是 迴圈或是 迴圈或是do…while迴圈都是用來處 迴圈都是用來處 迴圈都是用來處 迴圈都是用來處 理未知迴圈執行次數的程式
理未知迴圈執行次數的程式 理未知迴圈執行次數的程式 理未知迴圈執行次數的程式
while迴圈先做條件運算 迴圈先做條件運算 迴圈先做條件運算 迴圈先做條件運算, , ,再進入迴圈執行敘述 , 再進入迴圈執行敘述 再進入迴圈執行敘述 再進入迴圈執行敘述
而 而do…while迴圈恰好相反 而 而 迴圈恰好相反 迴圈恰好相反, 迴圈恰好相反 , ,先執行敘述 , 先執行敘述 先執行敘述 先執行敘述, , ,再做 , 再做 再做 再做 條件運算
條件運算 條件運算
條件運算。 。 。 。對於 對於 對於do…while迴圈來說 對於 迴圈來說 迴圈來說, 迴圈來說 , ,敘述至少 , 敘述至少 敘述至少 敘述至少 會被執行一次
會被執行一次 會被執行一次
會被執行一次, , ,而 , 而 而 而while迴圈在條件運算不符合 迴圈在條件運算不符合 迴圈在條件運算不符合 迴圈在條件運算不符合 的情形下就不會進入迴圈來執行敘述
的情形下就不會進入迴圈來執行敘述 的情形下就不會進入迴圈來執行敘述 的情形下就不會進入迴圈來執行敘述。 。 。 。 do…while迴圈語法如下 迴圈語法如下 迴圈語法如下 迴圈語法如下: : : :
在什麼情形下使用在什麼情形下使用在什麼情形下使用在什麼情形下使用do…while迴圈才適當迴圈才適當迴圈才適當?迴圈才適當??通常是要?通常是要通常是要通常是要 詢問使用者是否要讓程式繼續執行時
詢問使用者是否要讓程式繼續執行時 詢問使用者是否要讓程式繼續執行時
詢問使用者是否要讓程式繼續執行時,,,,透過透過透過透過 do…while迴圈的處理是一個不錯的方法迴圈的處理是一個不錯的方法迴圈的處理是一個不錯的方法!迴圈的處理是一個不錯的方法!!!
do do … … while while 迴圈的流程表示 迴圈的流程表示
範例: 範例: guess.cpp guess.cpp
執行程式 執行程式
範例是一個簡易的猜數字遊戲範例是一個簡易的猜數字遊戲範例是一個簡易的猜數字遊戲範例是一個簡易的猜數字遊戲,,,,在程式碼在程式碼在程式碼在程式碼12~23行利用行利用行利用行利用 do…while迴圈來處理迴圈來處理迴圈來處理,迴圈來處理,,並利用,並利用並利用guess為條件運算並利用 為條件運算為條件運算。為條件運算。。。
在第在第在第在第9行先將行先將行先將行先將guess設為設為設為設為false,,,,然後在第然後在第然後在第然後在第14行讓使用者輸行讓使用者輸行讓使用者輸行讓使用者輸 入數字
入數字 入數字
入數字,,,,在在在在15~22行以行以行以行以if…else if…敘述來判斷是否有猜敘述來判斷是否有猜敘述來判斷是否有猜敘述來判斷是否有猜 對數字對數字
對數字對數字。。。。
章節目錄 章節目錄
3-1 UML概述概述概述概述 3-1 UML概述概述概述概述
3-1-1 UML組成要素組成要素組成要素組成要素 3-1-1 UML組成要素組成要素組成要素組成要素
3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-1-2 使用使用使用使用UML活動圖活動圖活動圖活動圖 3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-2 流程控制的基礎流程控制的基礎流程控制的基礎流程控制的基礎
3-3 選擇結構選擇結構選擇結構選擇結構 3-3 選擇結構選擇結構選擇結構選擇結構
3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷 3-3-1 單一選擇判斷單一選擇判斷單一選擇判斷單一選擇判斷
3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷 3-3-2 雙重選擇判斷雙重選擇判斷雙重選擇判斷雙重選擇判斷
3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇 3-3-3 巢狀選擇巢狀選擇巢狀選擇巢狀選擇
3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件 3-3-4 適時過濾條件適時過濾條件適時過濾條件適時過濾條件
3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇 3-3-5 多重條件選擇多重條件選擇多重條件選擇多重條件選擇
3-4 重複結構重複結構重複結構重複結構 3-4 重複結構重複結構重複結構重複結構
3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數 3-4-1 已知重複次數已知重複次數--for已知重複次數已知重複次數
3-4-2 巢狀巢狀for迴圈巢狀巢狀 迴圈迴圈迴圈 3-4-2 巢狀巢狀for迴圈巢狀巢狀 迴圈迴圈迴圈
3-4-3 未知迴圈次數未知迴圈次數--while未知迴圈次數未知迴圈次數 3-4-3 未知迴圈次數未知迴圈次數--while未知迴圈次數未知迴圈次數
3-4-4 後置處理後置處理—do…while迴圈後置處理後置處理 迴圈迴圈迴圈 3-4-4 後置處理後置處理—do…while迴圈後置處理後置處理 迴圈迴圈迴圈
3-4-5 使用使用break和使用使用 和和和continue敘述敘述敘述敘述 3-4-5 使用使用break和使用使用 和和和continue敘述敘述敘述敘述
3 3 - - 4 4 - - 5 5 使用 使用 break break 和 和 continue continue 敘述 敘述
一般來說 一般來說 一般來說 一般來說
break敘述是用來中斷迴圈的執行敘述是用來中斷迴圈的執行敘述是用來中斷迴圈的執行敘述是用來中斷迴圈的執行
continue敘述則是回到迴圈的開始敘述則是回到迴圈的開始敘述則是回到迴圈的開始,敘述則是回到迴圈的開始,,讓程式繼續執行,讓程式繼續執行讓程式繼續執行讓程式繼續執行 下去
下去 下去 下去
因此 因此, 因此 因此 , ,我們可以在 , 我們可以在 我們可以在for、 我們可以在 、 、 、while、 、 、 、do…while迴圈 迴圈 迴圈 迴圈 中的程式敘述中加入
中的程式敘述中加入 中的程式敘述中加入
中的程式敘述中加入break或是 或是 或是continue敘述 或是 敘述 敘述, 敘述 , , , 我們利用一個簡單的範例來說明這二者間的差 我們利用一個簡單的範例來說明這二者間的差 我們利用一個簡單的範例來說明這二者間的差 我們利用一個簡單的範例來說明這二者間的差 異 異 異
異。 。 。 。
範例: 範例: breakst.cpp breakst.cpp
執行程式 執行程式
範例很簡單範例很簡單範例很簡單範例很簡單,,,,就是利用就是利用就是利用就是利用for迴圈來輸出計數器的值迴圈來輸出計數器的值迴圈來輸出計數器的值迴圈來輸出計數器的值
第第第第9行加入一個條件選擇行加入一個條件選擇行加入一個條件選擇行加入一個條件選擇,,,,當計數器當計數器當計數器當計數器i的值等於的值等於的值等於5時的值等於 時時,時,,利用,利用利用利用 第
第
第第10行加入行加入行加入行加入break敘述來中斷程式的執行敘述來中斷程式的執行敘述來中斷程式的執行敘述來中斷程式的執行,,,,所以計數器輸所以計數器輸所以計數器輸所以計數器輸 出
出
出出4的值之後的值之後的值之後的值之後,,,,就停止執行就停止執行就停止執行就停止執行。。。。
部份範例:
部份範例: continuest.cpp continuest.cpp
如果我們把範例的第 如果我們把範例的第10行更改為 如果我們把範例的第 如果我們把範例的第 行更改為 行更改為continue敘述 行更改為 敘述 敘述 敘述, , , , 其結果會如何
其結果會如何 其結果會如何 其結果會如何? ? ? ?
注意其結果如 何?
執行程式 執行程式
將第將第將第將第10行的敘述更改為行的敘述更改為行的敘述更改為行的敘述更改為continue敘述敘述敘述敘述,,,,在第在第在第在第11行輸出結行輸出結行輸出結行輸出結 果時
果時 果時
果時,,,,利用利用利用利用「「「「\t」」」」讓游標跳到下一個定位點讓游標跳到下一個定位點讓游標跳到下一個定位點讓游標跳到下一個定位點。。。。我們可以從我們可以從我們可以從我們可以從 輸出的結果看到除了
輸出的結果看到除了 輸出的結果看到除了
輸出的結果看到除了「「「「i=5」」」」的計次沒有輸出之外的計次沒有輸出之外的計次沒有輸出之外的計次沒有輸出之外,,,,其他其他其他其他 都
都 都
都正正正正常輸出常輸出常輸出常輸出。。。。
因此因此因此因此,,,,使用使用使用使用break敘述會強敘述會強敘述會強敘述會強迫迫迫迫中斷程式的執行中斷程式的執行中斷程式的執行中斷程式的執行;;;;而而而而
continue只會讓某一次的迴圈停止後只會讓某一次的迴圈停止後只會讓某一次的迴圈停止後,只會讓某一次的迴圈停止後,,回到,回到回到上回到上上上一層一層for迴一層一層 迴迴迴 圈的開始
圈的開始 圈的開始
圈的開始,,,,繼續執行程式繼續執行程式繼續執行程式繼續執行程式。。。。