Download presentation
Presentation is loading. Please wait.
1
第5章 決策敘述 if if…else switch…case 綜合範例
第5章 決策敘述 人類的生活必須不斷面對決策問題,連我家一個不到三歲的小孩,也常要思考他手裡的十元是要坐電動車還是買棒棒糖。程式語言是協助解決人類問題的工具,當然也有決策敘述,Java依決策點的多寡,分為以下三種決策敘述,第一是單一分歧決策的If - Then,例如肚子餓了就吃飯;第二是雙向分歧決策If – Then - Else,例如肚子 餓了就吃飯,否則繼續前進;第三是多向分歧決策的Select Case,例如你身上5000元,走進一家五星級的大飯店用餐,你的分歧點就很多,有自助餐、中式套餐、日本料理、泰國餐點等等分歧點。本章的重點即是探討Java的決策敘述。 if if…else switch…case 綜合範例
2
5-1 if if通常用於單一分歧的決策,它的使用時機為“假如~則~”,也就是條件成立時,則執行某項工作,但若條件不成立時,則不予理會。其語法如下: if (運算式) { 敘述區塊; }
3
1. 若運算式的值為true則執行敘述區塊,運算式的值若為false,則不會被執行,其流程圖如下:
以上語法說明如下: 1. 若運算式的值為true則執行敘述區塊,運算式的值若為false,則不會被執行,其流程圖如下: 敘述區塊內的敘述若只有一個,則敘述區塊上下兩個大括號可予省略。例如,以下敘述可以判斷變數a是否等於0,若條件成立則輸出"Game Over"。 If(a==0) System.out.println(“Game Over “);
4
3、若敘述區塊上下的大括號遺漏,則條件成立時,Java僅執行敘述區塊的第一個敘述,但更嚴重的問題,敘述區塊第二個以後的敘述,不論條件成立與否,均含自動執行。例如,以下敘述執行之後,b=0,c=3。
if(a= =0) b=3; c=3; 4、敘述區塊內可以放置任何合法的敘述,當然也可以放置if,if中有if 稱為巢狀if。例如,以下敘述除可判斷a是否及格,更可判斷其是否優等。 If(a>=60) { b=”及格”; if (a>=90) c=”優等”; }
5
範例5-1a 請輸入一個成績,若此成績大於等於60分,則輸出“及格”。
6
範例 5_1B 請寫一程式,滿足以下條件。 1、 輸入兩個數。 2、 求輸入兩數最大值。 3、 輸出最大值。
7
5-2 if...else 上一節的if僅適合單一分歧的決策,當條件成立時,執行某一敘述;當條件未成立時,則未有任何處置。但在日常生活領域中,當出現“假如~則~,否則~”時,此種決策模式有兩種解決問題的方案,故稱為雙向分歧決策,此時可使用if...else敘述,if...else敘述的語法如下: if(運算式) { 敘述區塊1; } else 敘述區塊2;
8
以上語法說明如下: 1. 運算式的值若為true,則執行敘述區塊1;運算式的值若為false,則執行敘述區塊2,其流程圖如下: 2. 敘述區塊內可以放置任何合法敘述,當然也可以再放置if;if中有if,稱為巢狀if,請看範例5-2c。
9
3. 以下敘述可依a的大小評量其及格與否 if (a>=60) System.out.println(“及格”); else System.out.println(“不及格”); 4. Java為了強調語法的簡潔性,若決策的結果,只為求得簡單的運算式,則可用下式的三元運算子(?:),其中運算式2與運算式3的括號只是增加程式的可讀性,此兩括號的有無並不影響程式的執行結果。以下式子,當運算式1的值為true時,Z=運算式2,當運算式1的值為false時,則Z=運算式3。 Z=(運算式1)?(運算式2):(運算式3)
10
範例5-2a 同上範例,但使用if else。
11
5-2b 請使用三元運算子,重寫以上範例。
12
範例 5-2c 請寫一個程式,可以判斷所輸入座標的所在象限。
13
範例 5-2d 請寫一個程式,完成以下要求: 1. 輸入一個0~100的分數。 2. 當分數大於90分時,輸出A。
1. 輸入一個0~100的分數。 2. 當分數大於90分時,輸出A。 3. 當分數介於80~89時,輸出B。 4. 當分數介於70~79時,輸出C。 5. 當分數介於0~69時,輸出D。
14
5-3 switch...case 一個決策點若同時擁有三個或三個以上的解決方案,則稱此為多向分歧決策。多向分歧決策雖也可使用5-2c的巢狀if else解決,但卻增加程式的複雜度及降低程式可讀性,若此一決策點能找到適當的運算式,能使問題同時找到分歧點,則可使用switch case敘述。switch case語法如下: switch(運算式) { case常數1: 敘述區塊1; break; case常數2; 敘述區塊2; case常數3; 〔default:〕 敘述區塊n; }
15
以上語法說明如下: 1. switch的運算式值僅能為整數或字元。 2. case的常數僅能整數或字元,且其型別應與上面的switch運算式相同。 3. 電腦將會依switch的運算式值,逐一至常數1、常數2尋找合乎條件的case,並執行相對應的敘述區塊,直到遇到break敘述,才能離開switch。 4. default可放置特殊情況,其兩旁加中括號表示此敘述可省略;若省略default,且若沒有任何case滿足switch運算式,則程式會默默離開switch敘述。 5. 敘述區塊可放置任何合法的敘述,當然也可放置switch或if。
16
6. 以下敘述,可將1、2、3、4轉為對應的季節。 a=1; String b; //季節 switch(a); { case 1:
6. 以下敘述,可將1、2、3、4轉為對應的季節。 a=1; String b; //季節 switch(a); { case 1: b=”春”: break; case 2: b=”夏”; case 3: b=”秋”; case 4: b=”冬”; }
17
範例5-3a 試以switch case重作範例5-2d。
18
5-4綜合範例
19
範例 5-4A 請設計一個程式,可以解一元二次方程式ax2 + bx + c = 0。
20
範例 5-4b 請設計一個程式,可以解二元一次方程式。
21
範例 5-4C 請輸入三角形三邊長,首先判斷是否構成三角形、其次判別三角形的種類,最後計算其面積。
22
範例5-4D 請寫一個程式,可以將使用者所輸入的西元年份,判斷其為平年或閏年。
Similar presentations