選擇結構

在前一章節,我們說明了運算子與條件式,這節我們要實際應用所學到的內容在我們的程式中,在我們的判斷式中,時常伴隨著 關係運算子邏輯運算子


if的使用

如果條件式成立,才會執行內部程式敘述,否則會跳過當下if內部的敘述,我們稱為 雙向選擇結構if的語法如下:

if (條件式) 敘述;


if (條件式) {
    敘述1;
    敘述2;
    /* ... */
}

if-else

你覺得單單只有if可能會不夠嗎?或許該學學如何可以增加否則的敘述,我們稱為 雙向選擇結構,語法如下:

if (條件式) 敘述1;
else 敘述2;

if (條件式) {
    敘述1;
    /* ... */
}
else {
    敘述2;
    /* ... */
}

我們學道雙向選擇結構後,是否有回想起 條件運算子 ? :呢?再撰寫程式中,我們有時可以利用 條件運算子 來簡化if-else的語法的敘述歐。

if-else if

條件還是不夠多的話我們可以利用else-if來實現,語法如下:


if (條件式1) {
    敘述1;
    /* ... */
}
else if (條件式2) {
    //不滿足條件式1,滿足條件式2
    敘述2;
    .......;
}
else {
    //都不滿足時...
    敘述3;
    /* ... */
}

巢狀選擇結構

學會上面if的各種語法後,相信聰明的你會想到可以在if else if else內增加if吧,這種結構被稱為 巢狀選擇結構 ,範例如下:


if (條件式1) {
    if (條件式3) {
        //滿足條件式1與條件式3
        敘述3;
        /* ... */
    }
    else {
        //滿足條件式1,不滿足條件式3
        敘述4;
        /* ... */
    }
}
else if (條件式2) {
    //不滿足條件式1,滿足條件式2
    敘述2;
    /* ... */
}
else {
    //不滿足條件式1與條件式2
    敘述5;
    /* ... */
}

switch-case的使用

當我今天如果想要在某個變數在特定幾個範圍有不同的敘述結果,會有大量的if再使用,想必程式碼會又臭又長,這時候我們就要使用switch-case了,語法如下:

switch (運算式 或 變數) {
    case1:
        敘述1;
        break;
    case2:
        敘述2;
        break;
    case3:
        敘述3;
        break;
    default:
        敘述;
}

switch-case中,你可以利用運算式的結果 或 變數的值,分別執行不同的敘述,但變數只可以是 整數int字元char
切記,每一個case敘述結束後要利用break跳出switch,否則會程式回繼續往下執行其他的敘述。
如果你case的值是個範圍 可以利用...來達成目的,我們舉個例子,今天老師說要程式自動判斷學生成績是否及格,並分別在不同分數輸出不同鼓勵學生的話,用switch解法如下:

switch (score) {
    case 100:
        cout << "狠角色,請繼續保持" << endl;
        break;
    case 80 ... 99:
        cout << "很強歐!還不錯" << endl;
        break;
    case 60 ... 79:
        cout << "恭喜及格" << endl;
        break;
    case 0 ... 59:
        cout << "不及格,繼續加油吧" << endl;
        break;
    default:
        cout << "你的分數不是在 0~100之間" << endl;
}

短路運算

c++的邏輯判斷使用的是短路運算Short Circuit Evaluation
代表若前者的條件已經可以決定整個運算式的結果,便不會去判斷後者。
AND邏輯只要前者為false,就直接回傳false
OR邏輯只要前者為true,就直接回傳true
以上兩者都不會再去判斷後者的真假值
這帶給使用者很大的便利(可以用這項特性防止許多問題發生)。