4.3 for 迴圈

for 迴圈特別適合「知道要重複幾次」的場景。它把「初始化、條件判斷、每次迴圈後的更新」都寫在一行裡,讓程式碼更緊湊、更不容易出錯。

for 迴圈的結構:

for (初始化; 條件式; 更新運算式) {
    程式碼區塊
}

三個部分的意義:

  1. 初始化:迴圈開始前執行一次,通常宣告計數器
  2. 條件式:每次迴圈開始前都檢查,為 false 時停止
  3. 更新運算式:每次迴圈結束後執行,通常是計數器加 1

執行流程:

  1. 執行初始化(只一次)
  2. 檢查條件式
  3. 如果為 true,執行程式碼區塊,然後執行更新運算式,回到步驟 2
  4. 如果為 false,跳出迴圈

範例程式碼

範例 1:印出九九乘法表

#include<iostream>
using namespace std;
int main() {
    // 外層迴圈:控制乘數(1 到 9)
    for (int i = 1; i <= 9; i++) {
        // 內層迴圈:控制被乘數(1 到 9)
        for (int j = 1; j <= 9; j++) {
            cout << i << " x " << j << " = " << i * j << "  ";
        }
        cout << "\n";  // 每一行結束後換行
    }

    return 0;
}

執行結果:(前三行)

1 x 1 = 1  1 x 2 = 2  1 x 3 = 3  ...
2 x 1 = 2  2 x 2 = 4  2 x 3 = 6  ...
3 x 1 = 3  3 x 2 = 6  3 x 3 = 9  ...

範例 2:計算一個數字的位數和

#include<iostream>
using namespace std;
int main() {
    int x;
    cin >> x;           // 讀入一個整數

    int answer = 0;     // 用來累加位數

    // 從 x 本身開始,每次除以 10,直到變成 0
    for (int now = x; now != 0; now /= 10) {
        answer += now % 10;  // 加上最低位的數字
    }

    cout << answer << "\n";
    return 0;
}

執行結果:(假設輸入為 12345

15

解釋:1 + 2 + 3 + 4 + 5 = 15

動手試試看:寫一個程式計算 1 + 2 + 3 + ... + 100 的結果,用 for 迴圈累加。

迴圈的排版

延續 1.5 與 3.5 的排版習慣,whilefor 迴圈也要排得層次分明。重點一樣是縮排大括號的位置;另外 for 的括號裡有三段,也有一套好讀的寫法:

// ✓ 好的排版
for (int i = 0; i < n; i++) {
    sum += i;
}

// ✗ 不好的排版:擠成一團、沒縮排
for(int i=0;i<n;i++){sum+=i;}
規則 ✓ 好的做法 ✗ 不好的做法 為什麼
關鍵字後空一格 for (...)while (...) for(...)while(...) forwhile 是關鍵字,和 ( 空一格,跟函式呼叫區別開
左大括號接行尾 for (...) { { 另起一行 { 放在同一行行尾,省一行、更緊湊
迴圈體縮排一層 { } 裡的語句往右縮 2~4 格 頂著最左邊寫 一眼看出「這些是迴圈裡重複做的事」
三段分號後空格 for (int i = 0; i < n; i++) for (int i=0;i<n;i++) 初始化/條件/更新三段用 ; 隔開更清楚