多層迴圈
迴圈裡面再放一個迴圈。 · ⏱ 約 25 分鐘
你會學到三件事
- 迴圈可以套在另一個迴圈裡面
- 內圈會跑完整輪,外圈才前進一格
- 二維陣列:用兩個位置指一格
開始之前
九九乘法表、棋盤、圖片的每一個像素——
這些東西都有兩個方向:第幾列、第幾行。
一個迴圈只能走一個方向。所以要兩個。
一、套起來
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
cout << i * j << " ";
}
cout << endl;
}
執行順序是這樣:
i = 1 → j = 1, 2, 3 印 1 2 3 然後換行
i = 2 → j = 1, 2, 3 印 2 4 6 然後換行
i = 3 → j = 1, 2, 3 印 3 6 9 然後換行
外圈走一格,內圈跑完一整輪。
所以總共跑了 3 × 3 = 9 次。這是多層迴圈的代價:
兩層各 1000 圈的話,裡面那行會跑一百萬次。
⚠️ cout << endl; 的位置很重要:它在內圈外面、外圈裡面。
放進內圈的話每個數字都換行;放到外圈外面的話全部擠成一行。
二、兩個位置指一格
int g[2][3] = {{1, 2, 3}, {4, 5, 6}};
讀法:「2 列,每列 3 個」。
[0] [1] [2]
[0] 1 2 3
[1] 4 5 6
g[1][2] 是 6——第一個方括號是列,第二個是行。
大括號的巢狀對應到形狀:{{一列}, {另一列}}。
三、走過整張
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << g[i][j] << " ";
}
cout << endl;
}
外圈走列、內圈走行——和陣列的形狀完全一樣,只是做了兩次。
⚠️ 兩個迴圈變數不能同名。都叫 i 的話,內圈會把外圈的 i 蓋掉,
而那是一個很難看出來的錯。習慣上外圈用 i、內圈用 j。
完成的樣子
int main() {
int g[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << g[i][j] << " ";
}
cout << endl;
}
return 0;
}
換你了
印一個星星塔:
*
**
***
****
提示:外圈 i 從 1 到 4,內圈跑 i 次——
內圈的條件可以用外圈的變數。
這一課你做了什麼
- 你把一個迴圈套進了另一個迴圈
- 你知道外圈走一格、內圈跑一整輪
- 你用兩個方括號指到了二維陣列的一格
如果卡住了
| 你看到 |
多半是因為 |
| 全部擠在一行 |
cout << endl; 放到外圈外面了 |
| 每個數字都換行 |
cout << endl; 放進內圈了 |
| 結果完全不對 |
兩層迴圈變數同名了 |
| 星星塔每列一樣長 |
內圈條件寫成固定數字,要用外圈的 i |
在編輯器打開這一課 →