條件判斷是什麼?#
在寫程式時,我們常需要依照題目要求判斷現在的狀況,再決定下一步要做什麼,這時候條件判斷就派上用場了。
if - 如果#
在程式中,我們的判斷架構會像這樣:
if (條件) {
(敘述1)
}
其中,if 後面的 () 裡裝的是條件,最簡單的第一種寫法就是直接放一個數學不等式進去,像是 x != 10、x < 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 寫在一行#
這邊再介紹一個小技巧,如果你的 if 或 else 要執行的敘述不多,你可以把它們寫在一行:
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 的版本更容易理解呢?
但好像比較麻煩(?
