C++ 入門指南 4.01

單元 7 - 選擇

-unit7-

程式中的選擇 (selection) 就是依條件 (condition) 使程式有不同的執行方向,若條件為真,也就是 true ,程式就會跳過 false 的部份執行 true 的部份,反之亦然

條件 → True
    ↘
      False

選擇結構有單一選擇跟多重選擇,兩者都可使用 if 陳述 (if statement) if關鍵字 (keyword) 之一,若是多重選擇 if 須與 else 連用。單一選擇,也就是單獨使用 if 陳述如下

if (3 > 5) {
    cout << "喔,3大於5發生了!" << endl;
}

以上條件為 3 大於 5 ,如果 3 大於 5 為真,程式就會執行條件後的大括弧的程式區塊 (block) ,如果 3 大於 5 為假,程式自然跳過條件後的程式區塊,去找區塊後的第一個陳述 (statement) 執行。

ifelse 連用,條件為真,執行 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;
}

我們將以上寫成完整的範例程式,如下

#include <iostream>

using namespace std;

int main(void) {
    cout << endl;

    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;
    }
    cout << endl;

    return 0;
}

/* 《程式語言教學誌》的範例程式
   http://kaiching.org/
   檔名:select_demo.cxx
   功能:示範 if-else 陳述
   作者:張凱慶 */

編譯 (compile) 後執行,如下

-selectdemo.png-

Windows 的命令列可能會出現中文亂碼問題,如何解決請參考 A.7 解決 Windows 11 命令列的亂碼問題

if-else if-else 多重選擇的缺點是需要很多個條件,程式需要做很多個條件判斷,因此另外有個 switch 陳述 (switch statement) ,條件為一個常數 (constant) 值,然後程式自動尋找符合的 case 。同樣的 switchcase 也都是關鍵字

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 最下面有個 defaultdefault 就是預設情況,如果以上皆非就會執行 default 的工作,這跟 if-else if-else 最後的 else 的用法相同。但是,如果 case 後沒有 break ,每一次執行 default 都會被執行。同樣的, breakdefault 也都是關鍵字之一。

我們將此例寫成完整的範例程式,如下

#include <iostream>

using namespace std;

int main(void) {
    cout << endl;

    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;
    }

    cout << endl;

    return 0;
}

/* 《程式語言教學誌》的範例程式
   http://kaiching.org/
   檔名:switch_demo.cxx
   功能:示範 switch-case-default 陳述
   作者:張凱慶 */

編譯後執行,如下

-switchdemo-

複合陳述 (compound statement) 除了選擇結構 (selection structure) 還有重複結構 (repetition structure) ,重複結構也被稱為迴圈 (loop) ,接下來我們就來看看如何使用迴圈吧!

中英文術語對照
區塊block
break 陳述break statement
編譯compile
複合陳述compound statement
條件condition
常數constant
if 陳述if statement
縮排indentation
關鍵字keyword
字面常數literal
迴圈loop
重複結構repetition structure
選擇selection
選擇結構selection structure
陳述statement
switch 陳述switch statement
變數variable
重點整理
1. 單一的 if 陳述判斷條件是否為真,若為真則執行 if 後的程式區塊。
2. if-else 陳述,條件為真時執行 if 後的程式區塊,否則執行 else 後的程式區塊, if-else if-else 可以形成多重選擇。
3. switch 陳述利用判斷常數值選擇執行的 case ,最後的 default 則是預設的選項。
4. break 陳述用來中斷 switch 的流程。
問題與討論
1. 我們在大括弧的程式區塊都有縮排,縮排的空格數有差異嗎?如果不縮排可以通過編譯嗎?
2. else if 的個數有限制嗎?
3. 為什麼要有 switch 陳述,多個 if-else if-else 不也一樣?
4. switch 陳述可以用物件當條件嗎?
練習
1. 寫一個程式 exercise0701.cxx ,宣告兩個整數變數 aba 設定為 3b 設定為 5 ,利用 if 陳述判斷兩者是否相等,不管是否相等都印出對應的訊息。 參考程式碼
2. 承上題,另寫一個程式 exercise0702.cxx ,改成接受使用者輸入。 參考程式碼
3. 承上題,另寫一個程式 exercise0703.cxx ,加入巢狀 if-else 陳述,在不相等的情況下繼續判斷兩個使用者輸入數字的大小關係。 參考程式碼
4. 承上題,另寫一個程式 exercise0704.cxx ,將巢狀的 if-else 簡化成 else if參考程式碼
5. 寫一個程式 exercise0705.cxx ,宣告整數變數 a 並將 a 設定為 6 ,然後寫一個 switch 判斷 a 屬於 0 到 9 哪一個整數,每個 case 不加上 break ,最後也不加上 default參考程式碼
6. 承上題,另寫一個程式 exercise0706.cxx ,改成接受使用者輸入。 參考程式碼
7. 承上題,另寫一個程式 exercise0707.cxx ,加入 breakdefault參考程式碼
8. 承上題,另寫一個程式 exercise0708.cxx ,改成用 if-else 來寫。 參考程式碼
9. 承上題,另寫一個程式 exercise0709.cxx ,改成判斷小於 6060707080809090100 ,以及 100 等幾種情況。 參考程式碼
10. 承上題,另寫一個程式 exercise0710.cxx ,將判斷數字範圍改成用 ... 來寫。 參考程式碼

相關教學影片

上一頁 單元 6 - 運算式與陳述
回 C++ 入門指南 4.01 目錄
下一頁 單元 8 - 迴圈
回 C++ 教材
回程式語言教材首頁