第四章 選擇結構
本章學習目標 讓讀者瞭解循序結構與選擇結構之不同。 讓讀者瞭解選擇結構之種類、語法及適用時機。
本章內容 4-1 單一選擇結構(if) 4-2 雙重選擇結構 4-3 條件運算子結構 4-4 多重選擇結構 4-5. 巢狀選擇結構
前言 在學會「循序結構」之後,是否發現程式都是由上而下,逐一執行,但是當在撰寫程式時,如果希望在某種條件成立時才執行某些敘述,而某種條件不成立才執行另一種敘述,來過濾一些條件。那就必須要使用「選擇結構」的方式了 。
本章重點提示
4-1 單一選擇結構(if) (1/9) if的中文意思就是「如果…就…」。在單一選擇結構中,只會執行條件成立時的敘述。一般而言,又可以依照敘述行數區分為兩種: (一) 單行敘述 (二) 多行敘述
4-1 單一選擇結構(if) (2/9) (一)單行敘述: 指當條件式成立之後,所要執行的敘述式只有一行稱之。 其中 (條件式) 是一關係運算式 或 邏輯運算式
4-1 單一選擇結構(if) (3/9) 【注意】單行敘述可省略上下兩個大括號。 【說明】 如果「條件式」成立(True),就執行後面的「敘述」。 如果「條件式」不成立(False),就跳過不執行。若if條件成立時,希望執行的敘述不只有一行時,請用{ }括起來。若只有一行,則可以省略。 【使用時機】當條件式成立之後,所要執行的敘述式只有一行。
4-1 單一選擇結構(if) (4/9)
4-1 單一選擇結構(if) (5/9)
4-1 單一選擇結構(if) (6/9) (二)多行敘述: 指當條件式成立之後,所要執行的敘述式超過一行以上則稱之。 其中 (條件式) 是一關係運算式或邏輯運算式
4-1 單一選擇結構(if) (7/9) 【注意】多行敘述不可以省略上下兩個大括號。 【說明】 如果「條件式」成立,就執行後面的「多行敘述」。 若if條件式成立時,希望執行的敘述不只有一行時,請用{ }括起來。 【使用時機】當條件式成立之後,所要執行的敘述式是多行。
4-1 單一選擇結構(if) (8/9)
4-1 單一選擇結構(if) (9/9)
4-2 雙重選擇結構 (1/10) 此種結構是最常被使用的方式,因為大部份選擇結構的情況可能兩種。例如:判斷及格與不及格、判斷奇數與偶數、判斷男生與女生…等情況,都可以利用此種結構來完成。 其中(條件式) 是一關係運算式 或 邏輯運算式
4-2 雙重選擇結構(2/10) 【說明】如果「條件式」成立(真),就執行後面的「敘述區塊1」,否則就執行「敘述區塊2」。 4-2 雙重選擇結構(2/10) 【說明】如果「條件式」成立(真),就執行後面的「敘述區塊1」,否則就執行「敘述區塊2」。 【注意】當「敘述區塊」內的敘述只有一行時,則可以省略左右大括號。 【使用時機】當條件只有二種情況。
4-2 雙重選擇結構(3/10)
4-2 雙重選擇結構(4/10)
4-2 雙重選擇結構(5/10) 牛刀小試1:參考第三章的循序結構例子。請再增加一個功能,即利用「平均成績」來判斷「是否及格」。如圖4-4所示:
4-2 雙重選擇結構(6/10)
4-2 雙重選擇結構(7/10) 牛刀小試2:利用InputBox輸入身高,如果身高為大於180公分,則顯示「哇!好高丫」,否則顯示「這才比較正常」。
4-2 雙重選擇結構(8/10) 牛刀小試3: 如果A為偶數,則顯示「A為偶數」,否則顯示「A為奇數」。
4-2 雙重選擇結構(9/10) 牛刀小試4:請將下列求絕對值的流程圖,撰寫成程式碼。
4-2 雙重選擇結構(10/10)
4-3 條件運算子結構(1/4) 條件運算子結構就是由三個運算子(=?:)組合而成的選擇結構。其功能與雙重選擇結構相同,都是使用在選擇結構的情況只有兩種。因此條件運算子結構也可以取代if/else的功能。
4-3 條件運算子結構(2/4)
4-3 條件運算子結構(3/4)
4-3 條件運算子結構(4/4)
4-4 多重選擇結構 在日常生活中,所面臨決策可能不只一種情況,也有可能兩種情況,甚至兩種以上不同情況。在前面已經介紹過兩種情況的結構,但如果所面對的情況有兩種以上時,則必須要使用多重選擇結構。常見的有兩種結構: 逐一比對結構if/else if/else 逐一比對結構switch/case
4-4.1 逐一比對結構if/else if/else (1/5) 此種結構是雙重結構的改良版,它可以使用於多種選擇情況。
4-4.1 逐一比對結構if/else if/else (2/5) 【說明】 如果「條件式1」不成立,就繼續往下判斷「條件式2」,依樣畫葫蘆的判斷下去,直到所有條件式判斷完為止,否則就執行「敘述區塊n+1」。 【使用時機】當條件式有兩種以上時。
4-4.1 逐一比對結構if/else if/else (3/5)
4-4.1 逐一比對結構if/else if/else (4/5)
4-4.1 逐一比對結構if/else if/else (5/5)
4-4.2 逐一比對結構switch/case (1/6) if/else if/else與switch/case結構具有相同功能,但如果條件很多時,使用if/else if/else結構就很容易混亂了。 因此當程式中的條件式(Condition)超過兩個以上時,最好使用switch/case結構,它可以使程式較為精簡且可讀性較高。
4-4.2 逐一比對結構switch/case (2/6)
4-4.2 逐一比對結構switch/case (3/6) 【說明1】 當(運算式)的值,符合常數1時,則執行敘述區塊1,符合常數2時,則執行敘述區塊2,直到遇到break敘述,才會離開switch,如果所有的條件式都不能符合時,則會執行敘述區塊N+1。 【說明2】 switch後面的運算式可以是整數或字串資料。並且case後面的常數可以是整數或字串資料。
4-4.2 逐一比對結構switch/case (4/6)
4-4.2 逐一比對結構switch/case (5/6) 計算兩科成績平均,並且依平均成績來分等第條件: 60分以下為:E等 60~69分為:D等 70~79分為:C等 80~89分為:B等 90(含)分以上為:A等
4-4.2 逐一比對結構switch/case (6/6) 牛刀小試1:製作一個電影分級制的程式條件: 0~5歲為:普通級 6~11歲為:保護級 12~17歲為:輔導級 18歲以上為:限制級 請利用if/else if/else與switch/case結構來比較不同的撰寫方式
4-5 巢狀選擇結構(1/5) 指在if外層結構中,又有一個或多個if的內層結構,則形成了巢狀判斷式結構稱之。
4-5 巢狀選擇結構(2/5) 【說明】當外層的條件式1成立時,才能執行內層的條件式2,也因為由外層至內層的多種判斷結構,形成一種巢狀現象,故稱為巢狀結構。 但由於使用巢狀結構撰寫程式時,看起來程式變得比較複雜,不易除錯,所以在寫程式時一定要養成「外層結構與內層結構的開頭(if (條件式),必須要有層次的排列」。
4-5 巢狀選擇結構(3/5)
4-5 巢狀選擇結構(4/5)
4-5 巢狀選擇結構(5/5) 牛刀小試:利用巢狀if來完成下面的條件: 0~59分為:不及格 60~89分為:及格 4-5 巢狀選擇結構(5/5) 牛刀小試:利用巢狀if來完成下面的條件: 0~59分為:不及格 60~89分為:及格 90(含)以上為:優等生