1、定義:
在 C++ 中,多層循環(嵌套循環)是指在一個循環體內包含另一個或多個循環語句。它常用于處理多維數據結構(如二維數組)、復雜的迭代邏輯(如矩陣運算、圖形打印、組合遍歷等)。多層循環的核心是外層循環控制 “輪次”,內層循環控制每輪的 “細節操作”,執行時先完整執行內層循環,再進入外層循環的下一次迭代。
2、多層循環的基本結構
多層循環可由for、while、do-while任意組合構成,最常用的是for循環的嵌套(結構清晰,適合已知循環次數的場景)。
雙層for循環(最常見)
for (外層初始化; 外層循環條件; 外層迭代) {
// 外層循環體
for (內層初始化; 內層循環條件; 內層迭代) {
// 內層循環體(每次外層循環,內層會完整執行一遍)
}
}
for嵌套while:
for (int i = 0; i < 3; i++) {
int j = 0;
while (j < 2) {
cout << “i=” << i << “, j=” << j << endl;
j++;
}
}
while嵌套do-while:
int i = 0;
while (i < 2) {
int j = 0;
do {
cout << “i=” << i << “, j=” << j << endl;
j++;
} while (j < 3);
i++;
}
3、執行流程
以雙層for循環為例,執行順序為:
1)執行外層初始化(僅一次)。
2)判斷外層循環條件:若為true,進入外層循環體;若為false,整個多層循環結束。
3)執行內層初始化(每次進入外層循環體時執行一次)。
4)判斷內層循環條件:若為true,執行內層循環體,然后執行內層迭代,重復步驟 4;若為false,退出內層循環。
5)執行外層迭代,回到步驟 2,開始外層循環的下一次迭代。
示例執行過程:
for (int i = 0; i < 2; i++) { // 外層循環:i=0,1
for (int j = 0; j < 2; j++) { // 內層循環:j=0,1(每次i變化時,j從0重新開始)
cout << “i=” << i << “, j=” << j << " ";
}
cout << endl;
}
4、常見應用場景
1)二維數組的遍歷
二維數組本質是 “數組的數組”,需通過外層循環控制行,內層循環控制列:
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 遍歷二維數組并打印所有元素
for (int i = 0; i < 3; i++) { // 外層循環:控制行(0~2)
for (int j = 0; j < 4; j++) { // 內層循環:控制列(0~3)
cout << matrix[i][j] << “\t”;
}
cout << endl;
}
輸出:
1 2 3 4
5 6 7 8
9 10 11 12
2) 圖形打印(如矩形、三角形)
通過內層循環控制每行的字符數量,外層循環控制行數:
// 打印5行4列的矩形(組成)
for (int row = 0; row < 5; row++) { // 外層:5行
for (int col = 0; col < 4; col++) { // 內層:每行4個
cout << "* ";
}
cout << endl; // 每行結束換行
}
輸出:
3)組合邏輯(如窮舉法)
例如計算兩個數的所有可能組合(1~3 之間的數對):
for (int a = 1; a <= 3; a++) {
for (int b = 1; b <= 3; b++) {
cout << “(” << a << “,” << b << ") ";
}
cout << endl;
}
輸出:
(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)
(3,1) (3,2) (3,3)
5、多層循環的擴展(三層及以上)
理論上,循環可以嵌套任意多層(如三層循環處理三維數組),但需注意代碼可讀性和程序的執行效率。例如,遍歷三維數組int arr[2][3][4]:
for (int i = 0; i < 2; i++) { // 第一層:深度
for (int j = 0; j < 3; j++) { // 第二層:行
for (int k = 0; k < 4; k++) { // 第三層:列
cout << arr[i][j][k] << " ";
}
cout << “\t”;
}
cout << endl;
}