1 / 87

第三章 流程控制

第三章 流程控制. 本章學習目標:. 透過 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 選擇結構.

Download Presentation

第三章 流程控制

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章流程控制

  2. 本章學習目標: • 透過UML活動圖來說明流程控制的意義 • 選擇判斷:從單一條件到多種條件判斷,介紹if敘述、if…else敘述、if…else if…else敘述和switch…case敘述 • 迴圈的處理:介紹for迴圈、while迴圈和do…while迴圈 • break和continue敘述

  3. 3-1-1 UML組成要素 3-1 UML概述 3-1-2 使用UML活動圖 3-2 流程控制的基礎 3-3-1 單一選擇判斷 3-3-2 雙重選擇判斷 3-3 選擇結構 3-3-3 巢狀選擇 3-3-4 適時過濾條件 3-3-5 多重條件選擇 3-4-1 已知重複次數--for 3-4-2 巢狀for迴圈 3-4 重複結構 3-4-3 未知迴圈次數--while 3-4-4 後置處理—do…while迴圈 3-4-5 使用break和continue敘述 章節目錄

  4. 3-1-1 UML組成要素 3-1-2 使用UML活動圖 3-2 流程控制的基礎 3-3-1 單一選擇判斷 3-3-2 雙重選擇判斷 3-3 選擇結構 3-3-3 巢狀選擇 3-3-4 適時過濾條件 3-3-5 多重條件選擇 3-4-1 已知重複次數--for 3-4-2 巢狀for迴圈 3-4 重複結構 3-4-3 未知迴圈次數--while 3-4-4 後置處理—do…while迴圈 3-4-5 使用break和continue敘述 章節目錄 3-1 UML概述

  5. 3-1 UML概說 • 在此章節中我們並沒有打算要探討「統一塑模語言」(UML, Unified Modeling Language)的理論基礎 • 只是讓大家在學習過程中,利用UML的觀點來瞭解物件導向的世界 • UML並不是程式語言,而是一種圖形化的物件導向軟體架構工具語言 • 使用UML的最大好處是可以利用圖形來描述真實世界中各個物件,透過標準化動作來看待程式語言的開發

  6. 3-1-1 UML組成要素 章節目錄 3-1 UML概述

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

  8. 使用案例觀點(Use Case View) 建置系統功能的需求 邏輯觀點(Logical View) 透過物件導向的觀念來設計軟體 4 + 1觀點 實作觀點(Implementation View) 在軟體中實作物件 部署觀點(Deployment View) 瞭解行程或執行緒在網路環境中實際運作的情形 4 + 1 觀點: 這對UML的解釋還是很難懂,所以原設計公司Rational Software(目前已被IBM併購)針對UML提出一個全新的「4+1」觀點,這種架構已成為開發軟體不可缺少的觀念。

  9. 3-1-1 UML組成要素 3-1-2 使用UML活動圖 章節目錄 3-1 UML概述

  10. 3-1-2 使用UML活動圖 UML共有九種標準圖形: 類別圖(Class Diagram) 佈署圖(Deployment Diagram) 物件圖(Object Diagram) 合作圖(Collaboration Diagram) 順序圖(Sequence Diagram) 使用案例圖(Use Case Diagram) 狀態圖(State Diagram) 元件圖(Component Diagram) 活動圖(Activity Diagram)

  11. 使用UML活動圖 • 我們就其中的活動圖來做概略性介紹。活動圖就是UML的流程圖,主要用途: • 工作流程 • 作業活動 • 用來控制活動和活動之間的流程 章節中會以活動圖來表示流程控制的各種結構

  12. 活動圖標示用法: 動作狀態(Activity state): 以橢圓來表示,裡面可以文字來標示各種情形 初始狀態(Initial state): 以實心圓來表示開始狀態 最終狀態(Final State): 以實心圓外加圓框來表示最終狀態 轉變(Transition): 當動作狀態完成時就會發生轉換,以線條加箭號來表示 分歧/合併(Branch/Join): 所謂的「分併」是指流程控制需要以布林值來表示,以空心菱形表示

  13. 3-1-1 UML組成要素 3-1-2 使用UML活動圖 章節目錄 3-1 UML概述 3-2 流程控制的基礎

  14. 3-2 流程控制的基礎 C++語言在執行時,流程控制可分為以下三種架構,分別為 循序(sequence) 選擇(selection) 重覆(repetition) 指的就是一行一行的敘述。這也是前面章節撰寫程式碼的基本結構,無論是變數的宣告或是將結果顯示於螢幕上。 選擇結構是以條件判斷為基礎,讓執行的程式依據選擇條件來產生執行結果。 設定的條件成立時,重複執行某些敘述,如此週而復始直到條件不成立才會結束。不過在進行重複結構時,需要避免陷入「無窮迴圈」的窘境。

  15. 3-1-1 UML組成要素 3-1-2 使用UML活動圖 章節目錄 3-1 UML概述 3-2 流程控制的基礎 3-3 選擇結構

  16. 3-3 選擇結構 • C++語言提供的選擇控制指令,分別為 • 「if...」 • 「if...else」 • 「? :」 • 選擇控制指令主要是處理程式中,當某個條件成立時就執行某段程式敘述。

  17. 3-1-1 UML組成要素 3-1-2 使用UML活動圖 3-3-1 單一選擇判斷 章節目錄 3-1 UML概述 3-2 流程控制的基礎 3-3 選擇結構

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

  19. if敘述的語法如下: • 符合條件判斷(true)時,則執行區塊(大括號{})中的敘述 • 語法中,假如條件成立所執行的敘述只有一行,則大括號{}可以省略

  20. 範例:grade.cpp

  21. 執行程式(grade.cpp) • 利用if條件判斷來判斷成績是否有及格,所以分別在程式碼第10、15及20行來判斷國文、數學和英文分數,如果有大於或等於60分,輸出「及格」字串。 • 國文成績沒有及格,所以輸出時就只能顯示分數,而沒有及格的文字出現。

  22. 3-1-1 UML組成要素 3-1-2 使用UML活動圖 3-3-1 單一選擇判斷 3-3-2 雙重選擇判斷 章節目錄 3-1 UML概述 3-2 流程控制的基礎 3-3 選擇結構

  23. 3-3-2 雙重選擇判斷 • 雙重選擇判斷就如同口語中「假如...就...否則就...」的情形 • 「if…else」敘述流程如下圖所示:

  24. 「if…else」敘述的語法如下: • 當選擇條件為真(true)時,則執行敘述一 • 當選擇條件結果為假(false)時,則執行程式敘述二 • 「if…else」敘述與「if...」敘述相似,差異點在於「if…else」敘述多了條件不成立的處理程序 • 同樣地,當if…else敘述只有一行的處理敘述時,可將形成區塊的大括號{}省略。

  25. 範例:InputNumber.cpp

  26. 執行程式(InputNumber.cpp) • 利用if…else…敘述來判斷使用者輸入的是否是0~9的數字,如果「是」顯示輸入正確;如果不是,就顯示輸入不正確。 • 第10行讀取使用者輸入的字元,然後透過第12~15行進行雙重選擇判斷。

  27. wmain()主函式 • 範例InputNumber使用了wmain()主函式,為Visual C++ 2005所定義,其用法和main()主函式相同 • 如果應用程式中的字元是以Unicode方式來處理,必須藉助wmain()主函式傳遞引數 • 語法如下:

  28. 使用條件運算式? : • 「?:」條件運算式是一個三元運算子,用來簡化if…else…的敘述,語法如下: • 當條件值符合(true)時,就執行敘述一 • 當條件值不符合(false)時,則執行敘述二

  29. 部份範例:InputNumber2.cpp • 將InputNumber.cpp範例修改,以條件運算子來表示:

  30. 程式執行(InputNumber2.cpp) • 們將原有範例修改後 • 第7行是條件運算子的「條件值」 • 第8行是符合條件的「敘述一」 • 第9行則是不符合條件的「敘述二」

  31. 3-1-1 UML組成要素 3-1-2 使用UML活動圖 3-3-1 單一選擇判斷 3-3-2 雙重選擇判斷 3-3-3 巢狀選擇 章節目錄 3-1 UML概述 3-2 流程控制的基礎 3-3 選擇結構

  32. 3-3-3 巢狀選擇 • 巢狀選擇基本上是「if…else…」敘述的變形, • 換句話說就是「if…else…」敘述中還含有「if…else…」 • 好像洋蔥一般,一層一層由外向內裹成條件。 • 執行時,符合了第一個條件,才會進入第二個條件 • 一層層進入到最後一個條件 • 所以利用巢狀選擇可以製作出多演算結果的程式流程

  33. 巢狀if語法如下:

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

  35. 範例:movie.cpp

  36. 執行程式(movie.cpp)

  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歲就無法觀賞限制級的電影。

  38. 3-1-1 UML組成要素 3-1-2 使用UML活動圖 3-3-1 單一選擇判斷 3-3-2 雙重選擇判斷 3-3-3 巢狀選擇 3-3-4 適時過濾條件 章節目錄 3-1 UML概述 3-2 流程控制的基礎 3-3 選擇結構

  39. 3-3-4 適時過濾條件 • 前面所談的選擇條件都是在單一條件下。如果面臨的狀況是多個條件來進行選擇,「if…else if…else…」敘述是最佳處理方式之一。 • 在多重條件下,逐一過濾來選擇最適合的條件(true)來執行某段敘述 • 「if…else if…else…」敘述就如同生活中「假如…就…,要不然…就…,否則…」

  40. If…else if…else…語法如下: • 程式執行時會由上而下逐一過濾條件,假如某個條件成立時,即執行區塊內的敘述,完成後即跳離此流程結構 • 假如所有條件皆未符合(false)時,最後則執行else之後區塊內的敘述

  41. If…else if…else…流程圖

  42. 範例:mulselect.cpp

  43. 執行程式

  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分者。

  45. 3-1-1 UML組成要素 3-1-2 使用UML活動圖 3-3-1 單一選擇判斷 3-3-2 雙重選擇判斷 3-3-3 巢狀選擇 3-3-4 適時過濾條件 3-3-5 多重條件選擇 章節目錄 3-1 UML概述 3-2 流程控制的基礎 3-3 選擇結構

  46. 3-3-5 多重條件選擇 • 要處理多重條件選擇,另一個好方法就是「switch…case…」敘述。 • 它的處理結構與「if…else if…else…」敘述有異曲同工之妙,語法如下:

  47. 使用switch…case • 程式由上而下執行,switch後的運算式必須是整數值。 • 當運算式的值符合某一個case關鍵字之後的條件值時,會執行冒號(:)後所有敘述 • 因此必須在條件敘述後加上break指令來中斷或是跳離此流程控制 • 當所有條件都不符合時,則會執行default後的程式區段敘述,它的作用就如同「if…else if…else…」敘述中的else • 這裡為什麼要在條件敘述之後加上break? • 如果沒有加上break敘述,表示程式就會繼續執行下一個條件敘述,有可能形成條件都符合而輸出錯誤結果!

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

  49. 範例:swtich.cpp

  50. 執行程式 • 此範例是利用輸入月份來判斷天數。因此第12~31行是一個「if…else…」敘述,判斷輸入的數值是否在1~12之間 • 第13~27行則是多重條件選擇,第14行是2月的天數,第18~23行用來判斷天數有30天的月份;第25行的default則是天數有31天的月份

More Related