第三章 流程控制

87
第第第 第第第 第第第第 第第第第

description

第三章 流程控制. 本章學習目標:. 透過 UML 活動圖來說明流程控制的意義 選擇判斷:從單一條件到多種條件判斷,介紹 if 敘述、 if…else 敘述、 if…else if…else 敘述和 switch…case 敘述 迴圈的處理:介紹 for 迴圈、 while 迴圈和 do…while 迴圈 break 和 continue 敘述. 3-1-1 UML 組成要素. 3-1 UML 概述. 3-1-2 使用 UML 活動圖. 3-2 流程控制的基礎. 3-3-1 單一選擇判斷. 3-3-2 雙重選擇判斷. 3-3 選擇結構. - PowerPoint PPT Presentation

Transcript of 第三章 流程控制

Page 1: 第三章 流程控制

第三章第三章流程控制流程控制

Page 2: 第三章 流程控制

本章學習目標:本章學習目標:

透過 UML活動圖來說明流程控制的意義 選擇判斷:從單一條件到多種條件判斷,介紹 if敘述、 if

…else敘述、 if…else if…else敘述和 switch…case敘述

迴圈的處理:介紹 for迴圈、 while迴圈和 do…while迴圈

break和 continue敘述

Page 3: 第三章 流程控制

章節目錄章節目錄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 已知重複次數 --for3-4-1 已知重複次數 --for3-4-2 巢狀 for迴圈3-4-2 巢狀 for迴圈3-4-3 未知迴圈次數 --while3-4-3 未知迴圈次數 --while3-4-4 後置處理— do…while迴圈3-4-4 後置處理— do…while迴圈3-4-5 使用 break和 continue敘述3-4-5 使用 break和 continue敘述

Page 4: 第三章 流程控制

章節目錄章節目錄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 已知重複次數 --for3-4-1 已知重複次數 --for3-4-2 巢狀 for迴圈3-4-2 巢狀 for迴圈3-4-3 未知迴圈次數 --while3-4-3 未知迴圈次數 --while3-4-4 後置處理— do…while迴圈3-4-4 後置處理— do…while迴圈3-4-5 使用 break和 continue敘述3-4-5 使用 break和 continue敘述

Page 5: 第三章 流程控制

3-1 UML3-1 UML 概說概說 在此章節中我們並沒有打算要探討「統一塑模語言」 (UML, Unified Modeling Language)的理論基礎

只是讓大家在學習過程中,利用 UML的觀點來瞭解物件導向的世界UML並不是程式語言,而是一種圖形化的物件導向軟體架構工具語言

使用 UML的最大好處是可以利用圖形來描述真實世界中各個物件,透過標準化動作來看待程式語言的開發

Page 6: 第三章 流程控制

章節目錄章節目錄3-1 UML概述3-1 UML概述

3-1-1 UML組成要素3-1-1 UML組成要素

Page 7: 第三章 流程控制

3-1-1 UML3-1-1 UML 組成要素組成要素 UML由事物 (Things)、關係 (Relations)及圖表 (Diagrams)三大基本要素組成

事物實體抽象化最終結果

關係將事物連結在一起

圖形事物集合的分類

Page 8: 第三章 流程控制

4 + 1 4 + 1 觀點:觀點:這對 UML的解釋還是很難懂,所以原設計公司 Rational Software(目前已被 IBM併購 )針對 UML提出一個全新的「 4+1」觀點,這種架構已成為開發軟體不可缺少的觀念。

4 + 1觀點4 + 1觀點

使用案例觀點 (Use Case View)建置系統功能的需求

邏輯觀點 (Logical View)透過物件導向的觀念來設計軟體

實作觀點 (Implementation View)在軟體中實作物件

部署觀點 (Deployment View)瞭解行程或執行緒在網路環境中實

際運作的情形

Page 9: 第三章 流程控制

章節目錄章節目錄3-1 UML概述3-1 UML概述

3-1-1 UML組成要素3-1-1 UML組成要素3-1-2 使用 UML活動圖3-1-2 使用 UML活動圖

Page 10: 第三章 流程控制

3-1-2 3-1-2 使用使用 UMLUML 活動圖活動圖UMLUML共有九種標準圖形:共有九種標準圖形:UMLUML共有九種標準圖形:共有九種標準圖形:

合作圖 (Collaboration Diagram)合作圖 (Collaboration Diagram)

佈署圖 (Deployment Diagram)佈署圖 (Deployment Diagram)

元件圖 (Component Diagram)元件圖 (Component Diagram)

使用案例圖 (Use Case Diagram)使用案例圖 (Use Case Diagram)

物件圖 (Object Diagram)物件圖 (Object Diagram)

順序圖 (Sequence Diagram)順序圖 (Sequence Diagram)

狀態圖 (State Diagram)狀態圖 (State Diagram)

活動圖 (Activity Diagram)活動圖 (Activity Diagram)

類別圖 (Class Diagram)類別圖 (Class Diagram)

Page 11: 第三章 流程控制

使用使用 UMLUML 活動圖活動圖 我們就其中的活動圖來做概略性介紹。活動圖就是 UML的流程圖,主要用途:工作流程作業活動

用來控制活動和活動之間的流程

章節中會以活動圖來表示流程控制的各種結構章節中會以活動圖來表示流程控制的各種結構

Page 12: 第三章 流程控制

活動圖標示用法:活動圖標示用法:動作狀態 (Activity state):以橢圓來表示,裡面可以文字來標示各種情形

活動圖

初始狀態 (Initial state):以實心圓來表示開始狀態

最終狀態 (Final State):以實心圓外加圓框來表示最終狀態

轉變 (Transition):當動作狀態完成時就會發生轉換,以線條加箭號來表示

分歧 /合併 (Branch/Join):所謂的「分併」是指流程控制需要以布林值來表示,以空心菱形表示

Page 13: 第三章 流程控制

章節目錄章節目錄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 流程控制的基礎

Page 14: 第三章 流程控制

3-2 3-2 流程控制的基礎流程控制的基礎

C++C++語言在執行時,流程控制語言在執行時,流程控制可分為以下三種架構,分別為可分為以下三種架構,分別為

指的就是一行一行的敘述。這也是前面章節撰寫程式碼的基本結構,無論是變數的宣告或是將結果顯示於螢幕

上。

循序 (sequence)

選擇結構是以條件判斷為基礎,讓執行的程式依據選擇條件來產生執行結果。

選擇 (selection)

設定的條件成立時,重複執行某些敘述,如此週而復始直到條件不成立才會結束。不過在進行重複結構時,需要避免陷入「無窮迴圈」的窘境。

重覆 (repetition)

Page 15: 第三章 流程控制

章節目錄章節目錄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 選擇結構

Page 16: 第三章 流程控制

3-3 3-3 選擇結構選擇結構 C++語言提供的選擇控制指令,分別為

「 if...」「 if...else」「 ? :」

選擇控制指令主要是處理程式中,當某個條件成立時就執行某段程式敘述。

Page 17: 第三章 流程控制

章節目錄章節目錄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 單一選擇判斷

Page 18: 第三章 流程控制

3-3-1 3-3-1 單一選擇判斷單一選擇判斷 如同我們口語中的「假如 ...就 ...」的情形 流程如下圖所示:

Page 19: 第三章 流程控制

ifif 敘述的語法如下:敘述的語法如下:

符合條件判斷 (true)時,則執行區塊 (大括號 {})中的敘述

語法中,假如條件成立所執行的敘述只有一行,則大括號 {}可以省略

Page 20: 第三章 流程控制

範例:範例: grade.cppgrade.cpp

Page 21: 第三章 流程控制

執行程式執行程式 (grade.cpp) (grade.cpp)

利用 if條件判斷來判斷成績是否有及格,所以分別在程式碼第 10、 15及 20行來判斷國文、數學和英文分數,如果有大於或等於 60分,輸出「及格」字串。

國文成績沒有及格,所以輸出時就只能顯示分數,而沒有及格的文字出現。

Page 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 雙重選擇判斷

Page 23: 第三章 流程控制

3-3-2 3-3-2 雙重選擇判斷雙重選擇判斷 雙重選擇判斷就如同口語中「假如 ...就 ...否則就 ...」的情形

「 if…else」敘述流程如下圖所示:

Page 24: 第三章 流程控制

「「 if…elseif…else 」敘述的語法如下:」敘述的語法如下:

當選擇條件為真 (true)時,則執行敘述一 當選擇條件結果為假 (false)時,則執行程式敘述二 「 if…else」敘述與「 if...」敘述相似,差異點在於「 if

…else」敘述多了條件不成立的處理程序 同樣地,當 if…else敘述只有一行的處理敘述時,可將形成區塊的大括號 {}省略。

Page 25: 第三章 流程控制

範例:範例: InputNumber.cppInputNumber.cpp

Page 26: 第三章 流程控制

執行程式執行程式 (InputNumber.cpp)(InputNumber.cpp)

利用 if…else…敘述來判斷使用者輸入的是否是 0~9的數字,如果「是」顯示輸入正確;如果不是,就顯示輸入不正確。

第 10行讀取使用者輸入的字元,然後透過第 12~15行進行雙重選擇判斷。

Page 27: 第三章 流程控制

wmain()wmain() 主函式主函式 範例 InputNumber使用了 wmain()主函式,為

Visual C++ 2005所定義,其用法和main()主函式相同

如果應用程式中的字元是以 Unicode方式來處理,必須藉助 wmain()主函式傳遞引數

語法如下:

Page 28: 第三章 流程控制

使用條件運算式使用條件運算式 ? :? :「 ?:」條件運算式是一個三元運算子,用來簡化 if…else…的敘述,語法如下:

當條件值符合 (true)時,就執行敘述一當條件值不符合 (false)時,則執行敘述二

Page 29: 第三章 流程控制

部份範例:部份範例: InputNumber2.cppInputNumber2.cpp

將 InputNumber.cpp範例修改,以條件運算子來表示:

Page 30: 第三章 流程控制

程式執行程式執行 (InputNumber2.cpp)(InputNumber2.cpp)

們將原有範例修改後第 7行是條件運算子的「條件值」第 8行是符合條件的「敘述一」第 9行則是不符合條件的「敘述二」

Page 31: 第三章 流程控制

章節目錄章節目錄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 巢狀選擇

Page 32: 第三章 流程控制

3-3-3 3-3-3 巢狀選擇巢狀選擇 巢狀選擇基本上是「 if…else…」敘述的變形,

換句話說就是「 if…else…」敘述中還含有「 if…else…」

好像洋蔥一般,一層一層由外向內裹成條件。執行時,符合了第一個條件,才會進入第二個條件一層層進入到最後一個條件所以利用巢狀選擇可以製作出多演算結果的程式流程

Page 33: 第三章 流程控制

巢狀巢狀 ifif 語法如下:語法如下:

Page 34: 第三章 流程控制

使用巢狀使用巢狀 ifif 敘述時敘述時 必須是條件一的區塊涵蓋了條件二的區塊 條件二的區塊也會涵蓋條件三的區塊 區塊之間若產生交錯情形,會造成程式撰寫的紊亂,這是初學者必須要注意的地方。

Page 35: 第三章 流程控制

範例:範例: movie.cppmovie.cpp

Page 36: 第三章 流程控制

執行程式執行程式 (movie.cpp)(movie.cpp)

Page 37: 第三章 流程控制

程式解說程式解說 輸入年齡來判斷可以觀賞的電腦等級,從第 9行至 27行為巢狀 if敘述。

第 9~27行為條件一處理區塊,判斷輸入的年齡是否有大於 0,如果有才會進入第 11行的條件 2。

第 11~24行為條件二的處理區塊,進一步判斷年齡是否大於或等於 6歲。如果有,表示會進行條件三的判斷;如果沒有,第 23行 else敘述表示年齡在 6歲以下,就只能看普通級的電影。

第 13~21行為條件三處理區塊,判斷年齡是否大於或等於 12歲。如果有,會進行條件四判斷;如果沒有,第 21行 else敘述表示 12歲以下只能觀看普通和保護級的電影。

第 15~18行則是最後一個條件的處理區塊,用來判斷是否大於或等於 18歲,如果符合條件就能欣賞所有等級的電影,而小於 18歲就無法觀賞限制級的電影。

Page 38: 第三章 流程控制

章節目錄章節目錄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 適時過濾條件

Page 39: 第三章 流程控制

3-3-4 3-3-4 適時過濾條件適時過濾條件 前面所談的選擇條件都是在單一條件下。如果面臨的狀況是多個條件來進行選擇,「 if…else if…else…」敘述是最佳處理方式之一。

在多重條件下,逐一過濾來選擇最適合的條件 (true)來執行某段敘述

「 if…else if…else…」敘述就如同生活中「假如…就…,要不然…就…,否則…」

Page 40: 第三章 流程控制

If…else if…else…If…else if…else… 語法如下:語法如下:

程式執行時會由上而下逐一過濾條件,假如某個條件成立時,即執行區塊內的敘述,完成後即跳離此流程結構

假如所有條件皆未符合 (false)時,最後則執行 else之後區塊內的敘述

Page 41: 第三章 流程控制

If…else if…else…If…else if…else… 流程圖流程圖

Page 42: 第三章 流程控制

範例:範例: mulselect.cppmulselect.cpp

Page 43: 第三章 流程控制

執行程式執行程式

Page 44: 第三章 流程控制

程式解說程式解說 輸入三科成績計算其平均分數後,再利用「 if…else if…

else」敘述判斷分數等級。 第 10行:利用變數來讀取各科成績。第 11行計算平均分數並儲存於 avg變數。

第 12行以 cout.setf(ios::fixed, ios::floatfield)來設定欲輸出的小數位數,預設值是 6位小數。然後透過第 13行的 precision()函數來設定實際輸出小數位數。

第 16~26行:以「 if…else if…else…」敘述來進行多種條件選擇。如果分數高於 90分,則顯示「成績優良」的字串。第 18行則是分數在 80~89之間,表示「成績不錯」。分數介於 70~79分者,以第 20行來處理。第 22行用來處理 60~69分的成績,最後一個條件就是分數低於 60分者。

Page 45: 第三章 流程控制

章節目錄章節目錄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 多重條件選擇

Page 46: 第三章 流程控制

3-3-5 3-3-5 多重條件選擇多重條件選擇 要處理多重條件選擇,另一個好方法就是「 switch…ca

se…」敘述。 它的處理結構與「 if…else if…else…」敘述有異曲同工之妙,語法如下:

Page 47: 第三章 流程控制

使用使用 switch…caseswitch…case程式由上而下執行, switch後的運算式必須是整數值。當運算式的值符合某一個 case關鍵字之後的條件值時,會執行冒號 (: )後所有敘述

因此必須在條件敘述後加上 break指令來中斷或是跳離此流程控制

當所有條件都不符合時,則會執行 default後的程式區段敘述,它的作用就如同「 if…else if…else…」敘述中的 else

這裡為什麼要在條件敘述之後加上 break?如果沒有加上 break敘述,表示程式就會繼續執行下一個條件敘述,有可能形成條件都符合而輸出錯誤結果!

Page 48: 第三章 流程控制

switch…case…switch…case… 敘述的流程表示敘述的流程表示

Page 49: 第三章 流程控制

範例:範例: swtich.cppswtich.cpp

Page 50: 第三章 流程控制

執行程式執行程式

此範例是利用輸入月份來判斷天數。因此第 12~31行是一個「 if…else…」敘述,判斷輸入的數值是否在 1~12之間

第 13~27行則是多重條件選擇,第 14行是 2月的天數,第 18~23行用來判斷天數有 30天的月份;第 25行的 default則是天數有 31天的月份

Page 51: 第三章 流程控制

章節目錄章節目錄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 重複結構

Page 52: 第三章 流程控制

3-4 3-4 重複結構重複結構 重複結構的流程處理,其邏輯性就如同生活中的「如果…就持續…」的情形相同。

C++語言中提供重複結構的流程控制共有三種,分別為「 for…」「 while…」「 do…while」

當程式中某一條件成立時會重複執行某一段敘述,因此我們也把這種流程結構為「迴圈」。

因為重複處理的流程會依附著設定的條件式,假如條件式的設計不當,會造成「無窮迴圈」現象,設計時必須小心注意!

Page 53: 第三章 流程控制

章節目錄章節目錄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 已知重複次數 --for3-4-1 已知重複次數 --for

Page 54: 第三章 流程控制

3-4-1 3-4-1 已知迴圈次數—已知迴圈次數— forfor 使用 for迴圈時必須有計數器、條件運算和控制運算式來完成重複計次的工作,語法如下:

計數器:用來控制「 for…」迴圈中有計次作用的數變,須做初始化設定;通常在第一次進入迴圈才執行

條件運算式:當條件值為 true(是 )時,會進入區塊內之執行程式敘述,不斷重複執行,直到條件值為 false時,才會停止重複的動作,離開迴圈

控制運算式:當條件運算式為 true時才會執行此運算式,作為「 for…」迴圈計數器的改變之用,只在迴圈內的敘述執行後才會被運算

for迴圈的運算參數必須利用分號「 ;」加以區隔

Page 55: 第三章 流程控制

forfor 迴圈流程圖迴圈流程圖

Page 56: 第三章 流程控制

範例:範例: calu.cppcalu.cpp我們先以一個數字加總範例來說明 for迴圈運作方式

Page 57: 第三章 流程控制

程式執行 程式執行

第 11~15行: for迴圈處理,將 1~5數字進行加總 第 11行,設定計數器起始值為「 1」,條件運算式為「 counter <= 5」,控制運算式為「 counter++」。

第 12~14行:第 12行將加總後的數值儲存於 sum變數,第 14行輸出 sum變數,放在 for迴圈內是為了瞭解 sum數值的變化。

Page 58: 第三章 流程控制

修改修改 calc.cppcalc.cpp 程式碼為「程式碼為「 calc2.cpcalc2.cppp 」」 如果我們將第 11、 12的敘述更改在 for迴圈之外,修改如下:

Page 59: 第三章 流程控制

範例範例 calc2.cppcalc2.cpp 程式解說程式解說我們發現計數器的值為「 6」,為什麼?因為控制運算式「 counter++」是迴圈敘述執行後,它才會更新計數器的值,我們以下表 3-1來說明:

迴圈 計數器counter

條件運算式counter <= 5

1+2+3+4+5

sum

控制運算式counter++

1 1 1 <= 5(成立 ) sum = 0 + 1

2

2 2 2 <= 5(成立 ) sum = 1 + 2

3

3 3 3 <= 5(成立 ) sum = 3 + 3

4

4 4 4 <= 5(成立 ) sum = 6 + 4

5

5 5 5 <= 5(成立 ) sum = 10 + 5

6

6 6 <= 5(不成立 ) 離開迴圈

Page 60: 第三章 流程控制

無窮盡無窮盡 forfor 迴圈迴圈 雖然我們強調 for迴圈是一個可計次的迴圈。但是在很多情形之下,也可以讓 for迴圈形成無窮盡迴圈

做法很簡單,就是將 for迴圈不使用計數器和條件運算式,做法為:

Page 61: 第三章 流程控制

範例:範例: infinite.cppinfinite.cpp

Page 62: 第三章 流程控制

程式執行程式執行

Page 63: 第三章 流程控制

程式解說程式解說 從程式碼第 10~21行,為 for迴圈無窮盡迴圈。然後讓讓使用者輸入數值來加總,最後統計使用者輸入數值幾次,顯示加總結果。

第 13行 count進行計次動作,第 14行 sum變數儲存加總數值。

第 17~20行是用來判斷使用者要繼續輸入數值就按 Y鍵,要離開時按下 N鍵,利用第 18行 continue敘述讓程式繼續執行,第 20行的 break敘述來中斷程式的執行。

第 22行將計次、加總的結果輸出。

Page 64: 第三章 流程控制

章節目錄章節目錄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 已知重複次數 --for3-4-1 已知重複次數 --for3-4-2 巢狀 for迴圈3-4-2 巢狀 for迴圈

Page 65: 第三章 流程控制

3-4-2 3-4-2 巢狀巢狀 forfor 巢狀 for迴圈就是 for迴圈敘述中,還有另一個 f

or迴圈敘述。 因此每一層迴圈都必須加入獨立的迴圈控制,這種作法和前面的巢狀 if相同,也就是迴圈之間不可以將區塊重疊。

我們利用巢狀 for迴圈來處理等比級數的問題,等比級數就是 1+2+4+8+16…,原有的公式為

其中的 a1表示首項, r是公比。

Page 66: 第三章 流程控制

範例:範例: geometric.cppgeometric.cpp

Page 67: 第三章 流程控制

執行程式執行程式

利用巢狀 for來計算等比級數。等比級數共有三個參數來組成:首項、公比和 N項值;並加入公比 r的 N次方值。因此先在程式碼第 8、 9行宣告這些變數,然後讓使用者輸入這些變數值並進行讀取的動作

第 14~23行為巢狀 for迴圈處理的區塊:第一層 for迴圈為第 14~23行,用來取得級數值並計算等比級數的總和

第 18~20行為第二層 for迴圈,主要目的是用來取得 N項值

Page 68: 第三章 流程控制

巢狀巢狀 forfor 迴圈的運作情形迴圈的運作情形我們透過下表 3-2來說明巢狀 for迴圈的運作情形。

進入迴圈 迴圈內的運算式第一層 for迴圈 第二層 for迴圈 第二層 for 第一層 for

迴圈計數器

ctr條件運算式ctr <= item

迴圈計數器value

條件運算式value < ctr

Nr=Nr*ratio

N項a1*Nr

sum += a1 * Nr

1 1 1 <= 3,真 1 1 1 < 1,假 不會計算 3sum = 0 +

3*1

2 2 2 <= 3,真1 1 1 < 2,真 5 15

sum = 3 + 3*5

2 2 2 < 2,假 離開迴圈

3 3 3 <= 3,真

1 1 1 < 3,真 5 sum= 18

2 2 2 < 3,真 10 75sum = 18 +

3*15

3 3 3 < 3,假 離開迴圈4 4 4 <= 3,假 離開迴圈

Page 69: 第三章 流程控制

章節目錄章節目錄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 已知重複次數 --for3-4-1 已知重複次數 --for3-4-2 巢狀 for迴圈3-4-2 巢狀 for迴圈3-4-3 未知迴圈次數 --while3-4-3 未知迴圈次數 --while

Page 70: 第三章 流程控制

3-4-3 3-4-3 未知迴圈次數—未知迴圈次數— whilewhile 如果並不知道迴圈要執行幾次,那麼 while迴圈或 do-while迴圈就是較好的處理方式,語法如下:

進入 while迴圈時,必須先檢查條件運算式,如果為真才會執行迴圈內的敘述;如果為假,就會跳離。

因此迴圈內的某一段敘述必須能改變條件運算式的值來結束迴圈的執行,否則就會形成無窮盡迴圈。

Page 71: 第三章 流程控制

WhileWhile 迴圈的流程表示:迴圈的流程表示:

Page 72: 第三章 流程控制

範例:範例: \CH03\calc\calcwhile.cpp\CH03\calc\calcwhile.cpp 範例儲存於 calc資料夾 那麼 while迴圈與 for迴圈有何不同?如果我們用 while迴圈來處理 1+2+3+4+5的總和,以底下範例說明:

Page 73: 第三章 流程控制

程式執行程式執行

利用 while迴圈來處理時第 8行的 counter變數相當於 for迴圈的計數器第 9行條件運算式相等於 for迴圈的條件運算式第 10行則是將加總後的結果儲存於 sum變數

為了要讓迴圈計次,所以在第 11行以 counter變數進行遞增動作控制,與 for迴圈的控制運算式是一樣的

Page 74: 第三章 流程控制

forfor 迴圈與迴圈與 whilewhile 迴圈的比較迴圈的比較我們將 for迴圈和 while迴圈撰寫的程式透過下圖來說明

計數器 條件運算式 控制運算式

Page 75: 第三章 流程控制

範例:範例: gcd.cppgcd.cpp

Page 76: 第三章 流程控制

執行程式執行程式

此範例是利用 while迴圈來求取兩個整數的最大公因數,利用數學輾轉相除法的原理,讓兩數相除來取得結果。

第 17~21行: while迴圈,第 17行的 while迴圈條件運算式中,先判斷被除數 (dvend)是否為 0,不為 0的條件成立後,才會進入迴圈的敘述。

第 18行就是將兩數相除來取得餘數,如果餘數為 0,則除數 (divisor)就是這兩個整數的最大公因數。

第 19行的作用是用來處理餘數不是 0的狀況,必須將除數 (divisor)更換成被除數 (dvend)。

第 20行將 18行所得餘數變更為除數,繼續執行,直到餘數為 0為止。

Page 77: 第三章 流程控制

章節目錄章節目錄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 已知重複次數 --for3-4-1 已知重複次數 --for3-4-2 巢狀 for迴圈3-4-2 巢狀 for迴圈3-4-3 未知迴圈次數 --while3-4-3 未知迴圈次數 --while3-4-4 後置處理— do…while迴圈3-4-4 後置處理— do…while迴圈

Page 78: 第三章 流程控制

3-4-4 3-4-4 後置處理的後置處理的 do…whiledo…while 迴圈迴圈 無論是 while迴圈或是 do…while迴圈都是用來處理未知迴圈執行次數的程式

while迴圈先做條件運算,再進入迴圈執行敘述 而 do…while迴圈恰好相反,先執行敘述,再做條件運算。對於 do…while迴圈來說,敘述至少會被執行一次,而 while迴圈在條件運算不符合的情形下就不會進入迴圈來執行敘述。 do…while迴圈語法如下:

在什麼情形下使用 do…while迴圈才適當?通常是要詢問使用者是否要讓程式繼續執行時,透過 do…while迴圈的處理是一個不錯的方法!

Page 79: 第三章 流程控制

do…whiledo…while 迴圈的流程表示迴圈的流程表示

Page 80: 第三章 流程控制

範例:範例: guess.cppguess.cpp

Page 81: 第三章 流程控制

執行程式執行程式

範例是一個簡易的猜數字遊戲,在程式碼 12~23行利用do…while迴圈來處理,並利用 guess為條件運算。

在第 9行先將 guess設為 false,然後在第 14行讓使用者輸入數字,在 15~22行以 if…else if…敘述來判斷是否有猜對數字。

Page 82: 第三章 流程控制

章節目錄章節目錄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 已知重複次數 --for3-4-1 已知重複次數 --for3-4-2 巢狀 for迴圈3-4-2 巢狀 for迴圈3-4-3 未知迴圈次數 --while3-4-3 未知迴圈次數 --while3-4-4 後置處理— do…while迴圈3-4-4 後置處理— do…while迴圈3-4-5 使用 break和 continue敘述3-4-5 使用 break和 continue敘述

Page 83: 第三章 流程控制

3-4-5 3-4-5 使用使用 breakbreak 和和 continuecontinue 敘述敘述 一般來說

break敘述是用來中斷迴圈的執行continue敘述則是回到迴圈的開始,讓程式繼續執行下去

因此,我們可以在 for、 while、 do…while迴圈中的程式敘述中加入 break或是 continue敘述,我們利用一個簡單的範例來說明這二者間的差異。

Page 84: 第三章 流程控制

範例:範例: breakst.cppbreakst.cpp

Page 85: 第三章 流程控制

執行程式執行程式

範例很簡單,就是利用 for迴圈來輸出計數器的值 第 9行加入一個條件選擇,當計數器 i的值等於 5時,利用第 10行加入 break敘述來中斷程式的執行,所以計數器輸出 4的值之後,就停止執行。

Page 86: 第三章 流程控制

部份範例:部份範例: continuest.cppcontinuest.cpp 如果我們把範例的第 10行更改為 continue敘述,其結果會如何?

Page 87: 第三章 流程控制

執行程式執行程式

將第 10行的敘述更改為 continue敘述,在第 11行輸出結果時,利用「 \t」讓游標跳到下一個定位點。我們可以從輸出的結果看到除了「 i=5」的計次沒有輸出之外,其他都正常輸出。

因此,使用 break敘述會強迫中斷程式的執行;而 continue只會讓某一次的迴圈停止後,回到上一層 for迴圈的開始,繼續執行程式。