if 條件(選擇結構)
2012/10/27 謝碧景(c)編製更新
學習目標
一、單向選擇
當條件式為 true(真)時,就執行大括號內的成立敘述區塊,當條件式為 false(假)時,則跳開大括號成立敘述區塊,往下繼續執行。
敘述區塊可為一列或多列,若僅一列敘述,則{}符號可省略;亦即{}內之敘述若為兩個(含)敘述以上,則{}符號不可省略。
【格式一】【if...】
if (條件式)
{
成立敘述;
…
}
單向選擇流程圖:
◆範例1:會員密碼輸入判斷。(檔名:if-ex1.cpp)
執行2次結果:
*註:列9→密碼為12345,若輸入的密碼正確,就執行10-13列敘述,若密碼錯誤則直接跳至列14結束程式。
二、雙向選擇
當條件式為 true(真)時,就執行成立敘述區塊,當條件式為 false(假)時,則執行不成立敘述區塊。
敘述區塊可為一列或多列,若僅一列敘述,則{}符號可省略;亦即{}內之敘述若為兩個(含)敘述以上,則{}符號不可省略。
【格式二】【if...else...】
【格式二】【if...else...】
if (條件式)
{
成立敘述;
}
else
{
不成立敘述;
}
雙向選擇流程圖:
◆範例2:成績判斷,成績若在60分(含)以上,輸出“及格",低於60分,則輸出“不及格"。(檔名:if-ex2.cpp)
執行2次結果:
*註1:列9→輸入的成績若大於或等於60分以上,成立時執行列10-12敘述,輸出“及格";不成立時執行列14-16,輸出“不及格,請加油!"。
*註2:同例以【三元運算子】設計,程式如下:列9→sc成績變數若大於或等於60分以上,則輸出“及格",否則輸出“不及格,請加油!"。(檔名:if-ex2-2.cpp)
三、多向選擇
(一)格式:【if...else if...else】 (以三個條件式為例)
if (條件式1)
{程式區1;}
else if (條件式2)
{程式區2;}
else if (條件式3)
{程式區3;}
else
{程式區else;}
多向選擇流程圖:
◆範例3:若成績大於60(含)分印出「及格」,否則印出「不及格」;但成績需在0~100分,否則印出「輸入錯誤」。(檔名:if-ex3.cpp)
執行2次結果:
*註:敘述區塊內可為一列或多列敘述,若僅一列敘述,則 {} 符號可省略。
(二)格式:【switch...case】
switch...case 跟 if...else if...else 一樣,都是多向選擇的指令,但 運算式 及 case 值必須為整數或字元,不能為浮點數。
switch (運算式 或 變數)
{
case 值1:
敘述1;
break;
case 值2:
敘述2;
break;
...........
default:
敘述;
}
多向選擇流程圖:
*註:
1.運算式 或 變數,當值等於 case 的值就執行相對應之敘述,每個 case 最後一行若加上 break,可讓程式跳離switch。若省略break程式不會跳離switch,而會繼續往下執行其他的case。當所有 case 值都不相等時,就執行 default後的敘述,亦可省略 default: 整個敘述區塊。case區塊若包含多個敘述,不需用大括號框住。
2.每一個case值必須不同,多個case值可連續在一起。如下【範例4】case 2: case 3: case 4:相同於 case 2 ... 4:用三個點 ...表示範圍,※注意_第一個值之後一定要空一格,不能直接打三個點,否則錯誤。
◆ 範例4:輸入月份(月份為一個正整數),判斷此月份在四季(春、夏、秋或冬)中的哪一季 ?(檔名:switch_if-ex4.cpp)【提示:春2~4月,夏5~7月,秋8~10月,冬11~12月以及1月】
*註:列11-13變數m值為 2或 3或 4,都會顯示春季。相同於case 2 ... 4:
執行多次結果:
§實作練習
題4:輸入一整數分數,判斷成績的分佈(80~100列為甲、60~79列為乙、0~59為丙、否則成績非0~100)。【流程圖】(檔名:if-4.cpp)
【進階題】學校上課時間為 7:30 到 17:00 (24小時制)。輸入某時間,請判斷是上學時間(請輸出「At School」)或放學時間(請輸出「Off School」)。【摘自:d066:上學去吧!。ZeroJudge】
【進階題】百貨周年折扣戰,購物金額折扣如下:
10,000(含)以上→打 9.5 折
20,000(含)以上→打 9 折
30,000(含)以上→打 8.5 折
40,000(含)以上→打 8 折
題7:輸入一個整數,請判斷此數是否為5或7的倍數,所有情況均需輸出。【流程圖】( 檔名:if-7.cpp)
題9:判斷平年及閏年。【提示:閏年的規則wiki→西元年份除以400 餘數為0,或者除以4 餘數 為0 且除以100 餘數不為0,則為閏年。】【流程圖→延伸:高中生程式解題系統 Online Judge→a004:文文的求婚】( 檔名:if-9.cpp)
題11:[找錢問題]小明用1000元買東西,求剩餘最多可找多少張500元、100元的鈔票及50、10、5、1元硬幣各幾個(以幣值最大者兌換)。 ( 檔名:if-11.cpp)