選擇
讓程式走兩條不同的路。 · ⏱ 約 25 分鐘
你會學到三件事
if 怎麼把一段程式變成有條件的
else 是「其餘的情況」
- 大括號圈起來的東西叫區塊,而它是一個整體
開始之前
到目前為止,程式由上往下每一行都會跑。
這一課開始,有些行會被跳過,而哪些被跳過取決於資料。
這是程式第一次「自己做決定」。
第 7 課的 bool 就是為了這一課。
🟢 先把編輯器打開,跟著下面一起做:跟著做
一、if
照著打上這一段:
1int score = 75;2if (score >= 60) {3 cout << "及格" << endl;4}
讀法:「如果 score >= 60 成立,就做大括號裡面的事。」
不成立的話,大括號裡面整段跳過,程式從大括號後面繼續。
三個部位:
if ( 條件 ) { 要做的事 }
↑ ↑
一個 bool 一個【區塊】——大括號圈起來的一整段
⚠️ if 後面沒有分號。 if (x) ; 是合法的,而它的意思是
「條件成立就做,什麼都不做」,後面那個大括號會變成無條件執行。
這個錯不會報錯,只會讓程式行為變得莫名其妙。
二、else
不及格的時候也要說話——在後面接一段 else:
1if (score >= 60) {2 cout << "及格" << endl;3} else {4 cout << "不及格" << endl;5}
else 沒有條件,它就是「上面那個不成立的時候」。
兩條路一定會走一條,而且只會走一條。
三、區塊
大括號 { } 圈起來的一整段叫區塊。它裡面可以有很多行:
1if (score >= 60) {2 cout << "及格" << endl;3 cout << "恭喜" << endl;4}
只有一行的時候,大括號可以省略:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1if (score >= 60) cout << "及格" << endl;
⚠️ 而建議永遠不要省。
省掉之後想加第二行,很容易變成這樣:
if (score >= 60)
cout << "及格" << endl;
cout << "恭喜" << endl; // ← 這一行【無條件】會跑
縮排看起來在裡面,而 if 只管到第一個分號為止。
這是一個縮排會騙你的錯,而它在 Python 裡不會發生(那一課會再提)。
完成的樣子
這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。
1#include <iostream>2using namespace std;3int main() {4 int score = 75;5 if (score >= 60) {6 cout << "及格" << endl;7 } else {8 cout << "不及格" << endl;9 }10 return 0;11}
把積木打散,自己排回去:排回去:把剛才那支程式的積木排好
換你了
改成三段:>= 90 印「優等」、>= 60 印「及格」、其餘印「不及格」。
提示:else 後面可以直接再接一個 if——
} else if (score >= 60) {
到編輯器做這一題:練習:加上「優等」那一段
再一個:調分
老師覺得這次考太難,決定調分。規則有四段:
| 原分數 |
怎麼調 |
>= 90 |
已經很高了,不調 |
>= 60 |
加 5 分 |
>= 40 |
開根號再乘以 10 |
| 其餘 |
加 10 分 |
讀進一個分數,印出調完的分數。⚠️ 裁判餵的是 49。
(開根號是第 6 課的 sqrt,別忘了 #include <cmath>。)
🔴 四段的順序不能換。 把 >= 40 那一段搬到最前面試試看:
95 分會變成多少?想清楚為什麼,再改回來。
🔴 自己拿 95、75、30 各跑一次,確認四段都走得到。
裁判只餵一個數字,而它驗不到你沒走過的那三段。
到編輯器做這一題:練習:調分
做一個
兩個人出拳,用數字表示:0 石頭、1 布、2 剪刀。讀進兩個數字,
印出 A、B 或 平手。⚠️ 裁判用的是 0 1(石頭對布,B 贏)。
🔴 做完跟旁邊的人比一下你們寫了幾個條件。
這一題至少有三種寫法:九個 if、三個 if、以及一行算式。三種都是對的。
到編輯器做這一題:做一個:剪刀石頭布的裁判
這一課你做了什麼
- 你用
if 讓一段程式變成有條件的
- 你用
else 處理了其餘的情況
- 你知道大括號圈起來的是一個整體,而省略它有代價
如果卡住了
| 你看到 |
多半是因為 |
| 兩句都印出來了 |
第二句沒在大括號裡(或大括號省掉了) |
| 條件明明成立卻沒進去 |
== 寫成 = 了,或比較方向反了 |
if (x); 行為很怪 |
多了一個分號。if 後面不加分號 |
| 「優等」和「及格」都印了 |
第二段用了 if 而不是 else if——那是兩個獨立的判斷 |
在編輯器打開這一課 →