重複
一段程式跑很多次,而你只寫一次。 · ⏱ 約 25 分鐘
你會學到三件事
while 怎麼讓一段程式重複
- 一個迴圈一定要有的三樣東西
- 少了其中一樣會發生什麼(無窮迴圈)
開始之前
想印出 1 到 5,用現在會的東西只能這樣:
cout << 1 << endl;
cout << 2 << endl;
cout << 3 << endl;
cout << 4 << endl;
cout << 5 << endl;
那印到 100 呢?印到 n 呢——而 n 是使用者輸入的?
寫不出來。 這一課解決它。
一、while
int n = 1;
while (n <= 5) {
cout << n << endl;
n = n + 1;
}
讀法:「只要 n <= 5 還成立,就一直做大括號裡面的事。」
它和 if 長得幾乎一樣,只差一個字——而行為差很多:
|
條件成立時 |
做完之後 |
if |
做一次 |
往下走 |
while |
做一次 |
回去再問一次條件 |
二、一個迴圈一定要有三樣東西
int n = 1; // ① 起點 ——從哪裡開始
while (n <= 5) { // ② 條件 ——什麼時候還要繼續
cout << n << endl;
n = n + 1; // ③ 前進 ——每一圈讓它往終點靠近
}
三樣缺一不可,而漏掉的通常是第三樣。
三、少了「前進」會怎樣
int n = 1;
while (n <= 5) {
cout << n << endl;
// ← 忘了 n = n + 1;
}
n 永遠是 1,條件永遠成立,於是它永遠不會停。
這叫無窮迴圈。畫面會一直印 1,直到你按停止。
每次寫完一個 while,回頭看一眼:那個條件裡的東西,
有沒有在迴圈裡被改? 沒有的話它就停不下來。
⚠️ 而「前進」不一定是加一。它可以是 n = n * 2、可以是讀下一筆輸入——
只要那件事會讓條件遲早變成不成立就行。
四、do ... while
還有一種寫法,它先做一次再問:
do {
cout << n << endl;
n = n + 1;
} while (n <= 5);
差別只有一個:do while 保證至少跑一次,即使條件一開始就不成立。
它用得比 while 少很多。知道有這個東西就好。
⚠️ 注意它的結尾有分號。
完成的樣子
int main() {
int n = 1;
while (n <= 5) {
cout << n << endl;
n = n + 1;
}
return 0;
}
換你了
改成印出 1 到 5 的總和(答案是 15)。
提示:多一個變數 sum 從 0 開始,每一圈 sum = sum + n;。
⚠️ sum 要宣告在迴圈外面——宣告在裡面的話它每一圈都重新開始。
這一課你做了什麼
- 你用
while 讓一段程式重複跑
- 你認得出迴圈的三樣東西:起點、條件、前進
- 你知道少了「前進」會變成無窮迴圈
如果卡住了
| 你看到 |
多半是因為 |
| 一直印同一個數字停不下來 |
少了「前進」那一行 |
| 一次都沒印 |
條件一開始就不成立(例如 n 從 10 開始) |
| 印到 6 才停 |
條件用了 <= 而你想要 <(或反過來) |
| 總和每次都一樣 |
sum 宣告在迴圈裡面了 |
在編輯器打開這一課 →