for 迴圈
把迴圈的三樣東西寫在同一行。 · ⏱ 約 25 分鐘
你會學到三件事
for 就是 while 的三樣東西寫在一起,而什麼時候用哪一個
break 跳出整個迴圈,continue 只跳過這一圈
- 為什麼大家幾乎都從
0 開始數
開始之前
上一課的迴圈,三樣東西散在三個地方:
int n = 1; // ① 在上面
while (n <= 5) { // ② 在這裡
...
n = n + 1; // ③ 在最後一行,很容易忘
}
for 把它們放在同一行,所以你不可能漏掉第三樣。
🟢 先把編輯器打開,跟著下面一起做:跟著做
一、for
同一件事用 for 寫起來是這樣——照著打上:
1for (int i = 1; i <= 5; i++) {2 cout << i << endl;3}
分號隔開的三段,就是上一課那三樣東西:
for ( int i = 1 ; i <= 5 ; i++ ) {
① 起點 ② 條件 ③ 變動
執行順序:起點跑一次 → 問條件 → 做內容 → 變動 → 回去問條件 → …
積木盤上這一顆寫著「計數 … 從 … 到 …」——那三段就填在它的格子裡。
⚠️ i 只活在這個迴圈裡。 迴圈結束之後 i 就不存在了,
想在外面用到它的值,要另外宣告一個變數。
二、同一支程式,兩種寫法
上一課那支「印 1 到 5」,兩種寫法逐字對照。while 的寫法:
1int n = 1;2while (n <= 5) {3 cout << n << endl;4 n = n + 1;5}
for 的寫法:
1for (int i = 1; i <= 5; i++) {2 cout << i << endl;3}
int n = 1; ←→ int i = 1 ① 起點
n <= 5 ←→ i <= 5 ② 條件
n = n + 1 ←→ i++ ③ 變動
一模一樣的三樣東西,只是換了擺法。跑出來的結果逐字相同。
i++ 是 i = i + 1 的簡寫。積木上那一顆是一個變數配一個下拉,選 加 1(++)。
那什麼時候用哪一個?
判準只有一句話:你講得出「第幾次」嗎?
| 你心裡想的是 |
用 |
「跑 10 次」「第 i 個」「從 0 到 n-1」——有編號 |
for |
| 「一直讀到 0 為止」「一直除到剩 1」——不知道要跑幾次 |
while |
上一課的兩題正好各站一邊:
印出前五項 有編號(第 1 項到第 5 項) → for
一直除到剩 1 不知道要幾步(那正是那題要問的) → while
⚠️ 兩種永遠可以互換:for 寫得出來的 while 也寫得出來,反過來也是。
這不是能不能的問題,是哪一個讀起來比較誠實。
三、跳出去 vs 跳過這圈
把剛才那一段改成這樣,中間會跳過一次:
1for (int i = 1; i <= 5; i++) {2 if (i == 3) continue; // 這一圈剩下的不做,直接做「變動」3 cout << i << endl;4}
印出 1 2 4 5——3 被跳過了。
|
做什麼 |
continue |
這一圈剩下的不做,跳到「變動」,繼續下一圈 |
break |
整個迴圈結束,跳到大括號後面 |
積木盤上它們寫著「跳至下一次」與「跳出迴圈」。
⚠️ 兩個都只影響最靠近的那一層迴圈。多層迴圈的時候要注意
(第 16 課會遇到)。
四、為什麼大家從 0 開始
上面的例子從 1 開始,因為我們要印 1 到 5。
而處理資料的時候幾乎都這樣寫:
for (int i = 0; i < n; i++) {
0 開始、< 而不是 <=。原因是一條你從下一批課程開始會一直碰到的規則:
位置從 0 開始數,所以 n 個東西的位置是 0 到 n-1。
寫成 i = 0; i < n 的話,i 正好走過每一個位置,一個不多一個不少。
⚠️ 寫成 i <= n 會多跑一圈,而多的那一圈碰到的是不存在的東西。
這個形狀從第 13 課的陣列開始會一直出現,先把它記成一個整體。
完成的樣子
這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。
1#include <iostream>2using namespace std;3int main() {4 for (int i = 1; i <= 5; i++) {5 if (i == 3) continue;6 cout << i << endl;7 }8 return 0;9}
把積木打散,自己排回去:排回去:把剛才那支程式的積木排好
換你了
把 continue 改成 break,執行看看差在哪。
(會印 1 2 就停——break 是整個迴圈結束,不是跳過一圈。)
到編輯器做這一題:練習:把 continue 換成 break
再一個:把上一課那題改寫成 for
上一課的「找出公式」那一題,你用 while 印出了 1, 3, 5, 7, 9。
現在用 for 寫一遍,輸出要逐字相同。
🔴 改完之後把兩支程式並排看一眼:哪一支比較容易看出「它會跑五次」?
到編輯器做這一題:練習:把上一課的 while 改寫成 for
做一個
數出 1 到 100 之間,是 3 的倍數、而不是 5 的倍數的數字有幾個。
🔴 這一題規定要用 continue,不准用 && 把兩個條件併成一個。
做完之後再用 && 寫一次,兩個答案要一樣,它們是同一件事的兩種說法。
到編輯器做這一題:做一個:3 的倍數,但不是 5 的倍數
這一課你做了什麼
- 你用
for 把迴圈的三樣東西寫在同一行
- 你用
continue 跳過一圈、用 break 跳出整個迴圈
- 你知道
i = 0; i < n 這個形狀為什麼是標準寫法
- 你說得出什麼時候該用
for、什麼時候該用 while
如果卡住了
| 你看到 |
多半是因為 |
迴圈外面用 i 說沒宣告 |
i 只活在迴圈裡。要在外面用就在外面宣告 |
| 多跑了一圈 |
i <= n 應該是 i < n |
for (...) ; 什麼都沒做 |
多了一個分號——和 if 同一個錯 |
break 沒跳出全部 |
它只跳出最靠近的那一層 |
在編輯器打開這一課 →