4.1 為什麼需要迴圈
迴圈就是「重複執行某段程式碼,直到某個條件不再滿足」。它的威力,是用短短幾行取代成百上千行的複製貼上。
¶沒有迴圈,會有多痛?
假設要印出 1 到 5,你也許還忍得下來:
cout << 1 << "\n";
cout << 2 << "\n";
cout << 3 << "\n";
cout << 4 << "\n";
cout << 5 << "\n";
但如果題目改成「印出 1 到 1000」呢?照抄要寫 1000 行;想改一個小地方(例如改成印出平方)就要改 1000 次。更糟的是——如果要印到第幾個是使用者執行時才輸入的 n,你連該抄幾行都不知道,根本抄不出來。
迴圈把這件事摺疊起來:你只寫一次「印一行」的邏輯,再叫電腦照著重複,直到數到頭:
for (int i = 1; i <= n; i += 1) // 讓 i 從 1 數到 n
cout << i << "\n"; // 每一圈印出當下的 i
不管 n 是 5、1000,還是使用者臨時輸入的數字,都是這三行。
(這裡先看懂「重複做同一件事」的大意就好;for 的完整語法會在 4.3 拆解。)
¶迴圈的三個要素
回頭看上面那段,其實任何迴圈都在回答三個問題:
| 要素 | 在問什麼 | 上面的例子 |
|---|---|---|
| 重複做的事 | 每一圈要執行哪段程式碼? | cout << i << "\n"; |
| 停止條件 | 什麼時候該停下來? | 數到 i 超過 n 就停 |
| 每圈的變化 | 每做完一圈,什麼東西要往前推進? | i 加 1(i += 1) |
其中「每圈的變化」常常靠一個計數器(counter)——一個每圈固定往前走一步的變數(像上面的 i)。只要抓穩「重複做的事/停止條件/每圈的變化」這三件事,之後三種迴圈的寫法,都只是同一件事換個排版而已。
¶三種迴圈,怎麼選?
C++ 提供三種迴圈,做的事一樣,差別只在「什麼時候檢查條件」:
| 迴圈 | 什麼時候用 | 一句話 |
|---|---|---|
while |
不知道要重複幾次(讀到結尾、算到超過某個值) | 只要條件成立就一直做(4.2) |
for |
跑固定圈數,或掃過一段範圍(有明確的計數器) | 把初始化/條件/更新收在一行(4.3) |
do-while |
至少要先做一次再檢查 | 先做一次,再問要不要繼續(4.4) |
三種其實可以互換,選哪個只看「哪個寫起來最自然」。本單元會逐一講解,做過幾題之後,你對「這題該用哪種」就會很快有直覺。
動手想想看:先別急著寫程式,在紙上回答——「印出 10、9、8、…、1(倒數)」這個迴圈的三個要素分別是什麼?計數器從幾開始、每圈怎麼變、什麼時候停?