程式中的選擇 (selection) 就是依條件 (condition) 使程式有不同的執行方向,若條件為真,也就是 true ,程式就會跳過 false 的部份執行 true 的部份,反之亦然
選擇結構有單一選擇跟多重選擇,兩者都可使用 if 陳述 (if statement) , if 為關鍵字 (keyword) 之一,若是多重選擇 if 須與 else 連用。單一選擇,也就是單獨使用 if 陳述如下
if (3 > 5) { | |
cout << "喔,3大於5發生了!" << endl; | |
} |
以上條件為 3 大於 5 ,如果 3 大於 5 為真,程式就會執行條件後的大括弧的程式區塊 (block) ,如果 3 大於 5 為假,程式自然跳過條件後的程式區塊,去找區塊後的第一個陳述 (statement) 執行。
if 與 else 連用,條件為真,執行 if 後的程式區塊,條件為假,就執行 else 後的程式區塊
if (3 > 5) { | |
cout << "喔,3大於5發生了!" << endl; | |
} | |
else { | |
cout << "還好,3沒有大於5!" << endl; | |
} |
if-else 也可以多個連用,形成 if-else if-else 的多重選擇,最後的 else 表示以上皆非
if (3 > 5) { | |
cout << "喔,3大於5發生了!" << endl; | |
} | |
else if (4 > 5) { | |
cout << "喔,4大於5發生了!" << endl; | |
} | |
else if (5 > 5) { | |
cout << "喔,5大於5發生了!" << endl; | |
} | |
else if (6 > 5) { | |
cout << "6當然大於5哩!" << endl; | |
} | |
else { | |
cout << "以上沒有符合的條件 :(" << endl; | |
} |
我們將以上寫成完整的範例程式,如下
001 | #include <iostream> |
002 | |
003 | using namespace std; |
004 | |
005 | int main(void) { |
006 | if (3 > 5) { |
007 | cout << "喔,3大於5發生了!" << endl; |
008 | } |
009 | else if (4 > 5) { |
010 | cout << "喔,4大於5發生了!" << endl; |
011 | } |
012 | else if (5 > 5) { |
013 | cout << "喔,5大於5發生了!" << endl; |
014 | } |
015 | else if (6 > 5) { |
016 | cout << "6當然大於5哩!" << endl; |
017 | } |
018 | else { |
019 | cout << "以上沒有符合的條件 :(" << endl; |
020 | } |
021 | |
022 | /* 檔名: select_demo.cpp |
023 | 作者: Kaiching Chang |
024 | 時間: 2014-5 */ |
編譯 (compile) 後執行,如下
if-else if-else 多重選擇的缺點是需要很多個條件,程式需要做很多個條件判斷,因此另外有個 switch 陳述 (switch statement) ,條件為一個常數 (constant) 值,然後程式自動尋找符合的 case 。同樣的 switch 、 case 也都是關鍵字
switch (6) { | |
case 3: | |
cout << "選擇是3..." << endl; | |
break; | |
case 4: | |
cout << "選擇是4..." << endl; | |
break; | |
case 5: | |
cout << "選擇是5..." << endl; | |
break; | |
case 6: | |
cout << "選擇是6..." << endl; | |
break; | |
default: | |
cout << "以上沒有符合的條件 :(" << endl; | |
} |
這裡, switch 後面的小括弧必須是常數值,此例中直接使用字面常數 (literal) ,也可以使用有常數值的變數 (variable) 。 case 後空一格,然後也是接常數值,通常就是直接填入符合情況的字面常數,注意,每個 case 的常數後都要接冒號。
case 底下的陳述,習慣上沒有用大括弧,而是用縮排 (indentation) 的方式表示屬於哪個 case 的工作。每個 case 最後,我們都有加上 break 陳述 (break statement) ,這是中斷跳出執行的意思,就是說,這個 case 符合並且執行了 case 所屬的工作,到此跳出 switch-case 的範圍,程式繼續執行 switch 大括弧後的陳述。
switch-case 最下面有個 default , default 就是預設情況,如果以上皆非就會執行 default 的工作,這跟 if-else if-else 最後的 else 的用法相同。但是,如果 case 後沒有 break ,每一次執行 default 都會被執行。同樣的, break 與 default 也都是關鍵字之一。
我們將此例寫成完整的範例程式,如下
001 | #include <iostream> |
002 | |
003 | using namespace std; |
004 | |
005 | int main(void) { |
006 | cout << endl; |
007 | switch (6) { |
008 | case 3: |
009 | cout << "選擇是3..." << endl; |
010 | break; |
011 | |
012 | case 4: |
013 | cout << "選擇是4..." << endl; |
014 | break; |
015 | |
016 | case 5: |
017 | cout << "選擇是5..." << endl; |
018 | break; |
019 | |
020 | case 6: |
021 | cout << "選擇是6..." << endl; |
022 | break; |
023 | |
024 | default: |
025 | cout << "以上沒有符合的條件 :(" << endl; |
026 | } |
027 | cout << endl; |
028 | |
029 | return 0; |
030 | } |
031 | |
032 | /* 檔名: switch_demo.cpp |
033 | 作者: Kaiching Chang |
034 | 時間: 204-5 */ |
編譯後執行,如下
複合陳述 (compound statement) 除了選擇結構 (selection structure) 還有重複結構 (repetition structure) ,重複結構也被稱為迴圈 (loop) ,接下來我們就來看看如何使用迴圈吧!
中英文術語對照
選擇 | selection |
條件 | condition |
if 陳述 | if statement |
關鍵字 | keyword |
區塊 | block |
陳述 | statement |
編譯 | compile |
switch 陳述 | switch statement |
常數 | constant |
字面常數 | literal |
變數 | variable |
縮排 | indentation |
break 陳述 | break statement |
複合陳述 | compound statement |
選擇結構 | selection structure |
重複結構 | repetition structure |
迴圈 | loop |
重點整理
- 單一的 if 陳述判斷條件是否為真,若為真則執行 if 後的程式區塊。
- if-else 陳述,條件為真時執行 if 後的程式區塊,否則執行 else 後的程式區塊, if-else if-else 可以形成多重選擇。
- switch 陳述利用判斷常數值選擇執行的 case ,最後的 default 則是預設的選項。
- break 陳述用來中斷 switch 的流程。
問題與討論
- 我們在大括弧的程式區塊都有縮排,縮排的空格數有差異嗎?如果不縮排可以通過編譯嗎?
- else if 的個數有限制嗎?
- 為什麼要有 switch 陳述,多個 if-else if-else 不也一樣?
- switch 陳述可以用物件當條件嗎?
練習
- 寫一個程式 exercise0701.cpp ,宣告兩個整數變數 a 及 b , a 設定為 3 , b 設定為 5 ,利用 if 陳述判斷兩者是否相等,不管是否相等都印出對應的訊息。
- 承上題,另寫一個程式 exercise0702.cpp ,改成接受使用者輸入。
- 寫一個程式 exercise0703.cpp ,宣告整數變數 a 並將 a 設定為 6 ,然後寫一個 switch 判斷 a 屬於 0 到 9 哪一個整數,每個 case 不加上 break ,最後也不加上 default 。
- 承上題,另寫一個程式 exercise0704.cpp ,改成接受使用者輸入。
- 承上題,另寫一個程式 exercise0705.cpp ,加入 break 及 default 。
- 承上題,另寫一個程式 exercise0706.cpp ,改成用 if-else 來寫。
- 承上題,另寫一個程式 exercise0707.cpp ,改成判斷小於 60 , 60 到 70 , 70 到 80 , 80 到 90 , 90 到 100 ,以及 100 等幾種情況。
the end
沒有留言:
張貼留言