語法書 / AA 競程語法書 上冊 / 第四單元 / 為什麼需要迴圈

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(倒數)」這個迴圈的三個要素分別是什麼?計數器從幾開始、每圈怎麼變、什麼時候停?