4.2 while 迴圈

圖 4-1:while 迴圈執行流程

while 迴圈最直觀——「只要條件成立,就一直做某件事」。它特別適合那些「不知道要重複幾次」的場景,比如「讀取輸入直到遇到 0」。

while 迴圈的結構:

while (條件式) {
    程式碼區塊
}

執行流程:

  1. 檢查 條件式 是否為 true
  2. 如果是,執行 程式碼區塊,然後回到步驟 1
  3. 如果否,跳過迴圈,繼續執行後面的程式

執行流程圖:

┌─────────────────┐
│  while 開始     │
└────────┬────────┘
         │
         ↓
    ┌────────────┐
    │ 檢查條件式 │
    └────┬───────┘
         │
    true │ false
         │        ↓
         │   ┌─────────────┐
         │   │ while 結束  │
         │   └─────────────┘
         ↓
    ┌──────────────┐
    │ 執行程式碼區塊│
    └──────┬───────┘
           │
           └─────────→(回到條件判斷)

範例程式碼

範例 1:細菌繁殖問題的完整解法

#include<iostream>
using namespace std;
int main() {
    long long A, B, C;      // A: 初始細菌數,B: 分裂倍數,C: 目標數
    cin >> A >> B >> C;     // 讀入三個參數

    int day = 0;            // 紀錄天數
    long long num = A;      // 紀錄目前的細菌數量

    // 只要細菌數還少於 C,就繼續分裂
    while (num < C) {
        num *= B;           // 細菌數量乘以 B(分裂)
        day += 1;           // 天數加 1
    }

    cout << day << " " << num << "\n";  // 輸出天數和最終細菌數
    return 0;
}

執行結果:(假設輸入為 1 2 100

6 64

解釋:初始 1 隻細菌,每天分裂成 2 倍。第 1 天 2 隻,第 2 天 4 隻,…,第 6 天 64 隻(已超過 100 的一半,但題目要求超過 100,所以答案是 64)。

範例 2:印出 1 到 10 的所有數字

#include<iostream>
using namespace std;
int main() {
    int i = 1;              // 初始化計數器

    while (i <= 10) {        // 條件:i 不超過 10
        cout << i << "\n";  // 輸出 i
        i += 1;             // i 加 1
    }

    return 0;
}

執行結果:

1
2
3
4
5
6
7
8
9
10

動手試試看:把第 5 行的 i <= 10 改成 i < 10,看看輸出有什麼變化。為什麼會差 1?