For 迴圈

極為常見

還記得前面提到的 while 迴圈嗎?for 迴圈也是一種迴圈,但是比 while 迴圈更為簡潔。for 迴圈通常用於迭代一個固定次數的迴圈,而 while 迴圈則是比較適合用於迭代一個不確定次數的迴圈。

語法

在熟悉了 while 迴圈之後,如果你想要寫一段程式來重複執行某個區塊 5 次,你應該會寫出下面這段程式碼:

int i = 1;

while (i <= 5) {
    cout << i << ' ';
    i++;
}

這段程式碼會印出 1 2 3 4 5,但是如果你使用 for 迴圈,你可以更為簡潔地達到相同的效果:

for (int i = 1; i <= 5; i++) {
    cout << i << ' ';
}

可以看到,for 迴圈的括號中包含了三個部分,分別用兩個分號隔開。第一個部分是設定變數的初始值,第二個是設定迴圈終止條件,第三個區塊則是可以在每一次迴圈執行完畢後調整變數的值。

事實上,for 迴圈的語法結構與 while 迴圈是相同的,只是將設定變數的初始值、迴圈終止條件和調整變數的值都放在了一個地方:

(設定初始值)

while (終止條件) {
    // 程式碼
    (調整變數的值)
}

轉換成 for 迴圈的語法結構:

for (設定初始值; 終止條件; 調整變數的值) {
    // 程式碼
}

相信看到這裡,你應該已經能夠理解 for 迴圈的基本語法了!接下來的章節將會介紹更多關於迴圈的用法,讓你更加熟悉各種應用。

巢狀迴圈

巢狀迴圈,顧名思義是由兩個 ( 甚至是更多個 ) 的迴圈疊在一起產生的。以下是一個嵌套兩層的 for 迴圈:

for (int i = 2; i < 10; i++) {
    for (int j = 1; j < 10; j++) {
        cout << i << "*" << j << " ";
    }
    cout << endl;
}

這是一個九九乘法的程式碼,他是一個典型的巢狀迴圈實作。下方是程式碼的輸出結果,我們透過外層的 i 迴圈來控制被乘數的增加,而透過內層的 j 迴圈來控制乘數的增加。根據結果我們可以發現,外層的 i 迴圈每增加一圈裡面的 j 迴圈都會再次從 1 執行到 9

2*1 2*2 2*3 2*4 2*5 2*6 2*7 2*8 2*9
3*1 3*2 3*3 3*4 3*5 3*6 3*7 3*8 3*9
4*1 4*2 4*3 4*4 4*5 4*6 4*7 4*8 4*9
5*1 5*2 5*3 5*4 5*5 5*6 5*7 5*8 5*9
6*1 6*2 6*3 6*4 6*5 6*6 6*7 6*8 6*9
7*1 7*2 7*3 7*4 7*5 7*6 7*7 7*8 7*9
8*1 8*2 8*3 8*4 8*5 8*6 8*7 8*8 8*9
9*1 9*2 9*3 9*4 9*5 9*6 9*7 9*8 9*9

小測驗

以下哪個程式碼片段會導致無窮迴圈?