基本用法

極為常見

條件判斷是什麼?

在寫程式時,我們常需要依照題目要求判斷現在的狀況,再決定下一步要做什麼,這時候條件判斷就派上用場了。

if - 如果

在程式中,我們的判斷架構會像這樣:

if (條件) {
    (敘述1)
}

其中,if 後面的 () 裡裝的是條件,最簡單的第一種寫法就是直接放一個數學不等式進去,像是 x != 10x < y 之類的。如果這個條件成立,就會做 敘述1 的內容。舉個例子,假設你要寫個程式判斷你有沒有及格,那你的 code 應該會長這樣:

int score;
cin >> score;
if (score >= 60) {
    cout << "Oh yes~";
}

else - 否則

繼續上面的例子,如果你及格了,程式會輸出 Oh yes~,但那這時候問題就來了,如果你很不幸地沒有及格怎麼辦勒?

或許你會想到再加一個 if 像是這樣:

if (score >= 60) {
    cout << "Oh yes~";
}

if (score < 60) {
    cout << "Oh no qwq...";
}

不過這樣寫有點麻煩,所以我們可以用 else 來簡化:

if (score >= 60) {
    cout << "Oh yes~";
} else {
    cout << "Oh no qwq...";
}

else 的意思就是否則,當 if 的條件不成立時,就會執行 else 裡面的內容。

else if - 否則如果

那如果條件判斷不是二元的呢?不用擔心,還有 else if!這個東西可以讓你在 if 不成立時再檢查一次條件,像是這樣:

int score;
cin >> score;
if (score >= 90) {
    cout << "Oh yes~";
} else if (score >= 60) {
    cout << "That's OK.";
} else {
    cout << "Oh no qwq...";
}

把 if 寫在一行

這邊再介紹一個小技巧,如果你的 ifelse 要執行的敘述不多,你可以把它們寫在一行:

if (score >= 60) cout << "Oh yes~";
else cout << "Oh no qwq...";

那如果要執行的敘述有兩行呢?你可用逗號 , 來分隔:

if (score >= 60) cout << "Oh yes~", cout << "You're great!";
else cout << "Oh no qwq...", cout << "You can do better!";

雖然行數看起來少了,但如果想這麼寫的話,請確保你的程式碼還是容易閱讀的。另外,這個技巧不只適用在 if 裡,其他地方也可以用,你可以自己試試看!

switch - 多重條件判斷

switch 是一個可以讓你一次判斷多個條件的結構,通常用在有很多種情況要判斷的時候。

這是基本的 switch 架構:

switch (x) {
    case (情況1):
        (敘述1)
        break;
    case (情況2):
        (敘述2)
    case (情況3):
        (敘述3)
        break;
    case (情況4):
    case (情況5):
        (敘述4)
        break;
    ...
    default:
        (敘述4)
}

簡單來說,case 們代表的就是原本 if 裡的各種狀況,只要 case 後面括弧內的值和 x 相同,case 下的敘述就會被執行,否則就會繼續檢查下面的其他 case。最後如果全部都不符合,就會執行 default 後的內容。

注意

一旦進入 switch 的某個 case 裡面,除非遇到 break,否則一定會等到 default 才會退出 switch。如果像上面的第二個 case 一樣後面沒有加 break,那麼第三個 case 的敘述也會被執行到。

舉個例子,假設給你兩個正整數 a、b 和一個符號 c( + , - , * , / , % ),請你求 a、b 經過 c 運算後的結果。

如果只用 if 的話要寫成這樣:

if (c == '+') {
    cout << a + b;
} else if (c == '-') {
    cout << a - b;
} else if (c == '*') {
    cout << a * b;
} else if (c == '/') {
    cout << a / b;
} else {
    cout << a % b;
}

而換成 switch 的話就變成這樣:

switch (c) {
    case '+':
        cout << a + b;
        break;
    case '-':
        cout << a - b;
        break;
    case '*':
        cout << a * b;
        break;
    case '/':
        cout << a / b;
        break;
    default:
        cout << a % b;
        break;
}

是不是比 if 的版本更容易理解呢?

但好像比較麻煩(?

小測驗

下面這段程式碼的輸出為何?

#include <bits/stdc++.h>
using namespace std;

int main() {
    int x = 2;
    switch (x) {
        case 1:
            cout << "A";
        case 2:
            cout << "B";
        case 3:
            cout << "C";
            break;
        case 4:
            cout << "D";
    }
    cout << endl;
}