Course playlist
C++ 多层循环结构教程
学习嵌套循环的使用方法和应用场景
什么是多层循环?
多层循环(嵌套循环)就是在一个循环内部包含另一个循环。
就像时钟的时针、分针、秒针:秒针转一圈,分针走一格;分针转一圈,时针走一格。
两层循环执行过程:
外层循环 i = 1
├─ 内层循环 j = 1, 2, 3...
外层循环 i = 2
├─ 内层循环 j = 1, 2, 3...
外层循环 i = 3
├─ 内层循环 j = 1, 2, 3...
...
基本嵌套循环示例
// 示例1:打印九九乘法表的一部分
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
cout << i << " × " << j << " = " << i * j << " ";
}
cout << endl; // 换行
}
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
cout << i << " × " << j << " = " << i * j << " ";
}
cout << endl; // 换行
}
输出结果:
1 × 1 = 1 1 × 2 = 2 1 × 3 = 3
2 × 1 = 2 2 × 2 = 4 2 × 3 = 6
3 × 1 = 3 3 × 2 = 6 3 × 3 = 9
1 × 1 = 1 1 × 2 = 2 1 × 3 = 3
2 × 1 = 2 2 × 2 = 4 2 × 3 = 6
3 × 1 = 3 3 × 2 = 6 3 × 3 = 9
执行顺序:
- 外层循环 i 从 1 开始
- 对于每个 i,内层循环 j 从 1 到 3 执行一遍
- 当 j 循环结束后,i 增加 1,再次执行 j 循环
不同循环的组合
可以混合使用 for、while、do-while 循环
// 示例2:for 和 while 组合
for (int row = 1; row <= 4; row++) {
int col = 1;
while (col <= row) {
cout << "* ";
col++;
}
cout << endl;
}
for (int row = 1; row <= 4; row++) {
int col = 1;
while (col <= row) {
cout << "* ";
col++;
}
cout << endl;
}
输出结果:
*
* *
* * *
* * * *
*
* *
* * *
* * * *
三层循环示例
// 示例3:三维坐标遍历
for (int x = 1; x <= 2; x++) {
for (int y = 1; y <= 2; y++) {
for (int z = 1; z <= 2; z++) {
cout << "(" << x << ", " << y << ", " << z << ") ";
}
cout << endl;
}
cout << endl;
}
for (int x = 1; x <= 2; x++) {
for (int y = 1; y <= 2; y++) {
for (int z = 1; z <= 2; z++) {
cout << "(" << x << ", " << y << ", " << z << ") ";
}
cout << endl;
}
cout << endl;
}
输出结果:
(1, 1, 1) (1, 1, 2)
(1, 2, 1) (1, 2, 2)
(2, 1, 1) (2, 1, 2)
(2, 2, 1) (2, 2, 2)
(1, 1, 1) (1, 1, 2)
(1, 2, 1) (1, 2, 2)
(2, 1, 1) (2, 1, 2)
(2, 2, 1) (2, 2, 2)
实用案例:打印图形
// 示例4:打印矩形
int width = 5, height = 4;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
cout << "* ";
}
cout << endl;
}
int width = 5, height = 4;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
cout << "* ";
}
cout << endl;
}
输出结果:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
// 示例5:打印直角三角形
int n = 5;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cout << "* ";
}
cout << endl;
}
int n = 5;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cout << "* ";
}
cout << endl;
}
测试题
题目1:下面的代码输出什么?
for (int i = 1; i <= 2; i++) {
for (int j = 1; j <= 3; j++) {
cout << i << j << " ";
}
cout << endl;
}
for (int j = 1; j <= 3; j++) {
cout << i << j << " ";
}
cout << endl;
}
答案:
11 12 13
21 22 23
21 22 23
外层循环 i 从 1 到 2,内层循环 j 从 1 到 3,所以输出 i 和 j 的组合。
题目2:下面的代码输出什么图形?
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= i; j++) {
cout << j << " ";
}
cout << endl;
}
for (int j = 1; j <= i; j++) {
cout << j << " ";
}
cout << endl;
}
答案:
1
1 2
1 2 3
1 2 3 4
1 2
1 2 3
1 2 3 4
题目3:找出代码中的错误
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; i++) {
cout << "*";
}
cout << endl;
}
for (int j = 1; j <= 3; i++) {
cout << "*";
}
cout << endl;
}
答案:内层循环的增量写错了
错误:for (int j = 1; j <= 3; i++)
正确:for (int j = 1; j <= 3; j++)
内层循环应该增加 j,而不是 i,否则会导致死循环。
编程练习
练习1:打印九九乘法表
编写程序打印完整的九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
cout << j << "×" << i << "=";
if (i * j < 10) cout << " "; // 对齐数字
cout << i * j << " ";
}
cout << endl;
}
for (int j = 1; j <= i; j++) {
cout << j << "×" << i << "=";
if (i * j < 10) cout << " "; // 对齐数字
cout << i * j << " ";
}
cout << endl;
}
练习2:打印空心矩形
编写程序打印一个空心矩形,只有边框有 *,内部是空格
int width = 6, height = 4;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (i == 0 || i == height - 1 || j == 0 || j == width - 1) {
cout << "* ";
} else {
cout << " "; // 两个空格
}
}
cout << endl;
}
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (i == 0 || i == height - 1 || j == 0 || j == width - 1) {
cout << "* ";
} else {
cout << " "; // 两个空格
}
}
cout << endl;
}
练习3:数字金字塔
编写程序打印数字金字塔:
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
int n = 5;
for (int i = 1; i <= n; i++) {
// 打印空格
for (int j = 1; j <= n - i; j++) {
cout << " ";
}
// 打印左边数字
for (int j = 1; j <= i; j++) {
cout << j << " ";
}
// 打印右边数字
for (int j = i - 1; j >= 1; j--) {
cout << j << " ";
}
cout << endl;
}
for (int i = 1; i <= n; i++) {
// 打印空格
for (int j = 1; j <= n - i; j++) {
cout << " ";
}
// 打印左边数字
for (int j = 1; j <= i; j++) {
cout << j << " ";
}
// 打印右边数字
for (int j = i - 1; j >= 1; j--) {
cout << j << " ";
}
cout << endl;
}
总结
重点回顾:
- 嵌套循环就是循环里面套循环
- 外层循环执行一次,内层循环执行完整的一轮
- 可以使用 for、while、do-while 的任意组合
- 注意循环变量的命名,避免混淆
- 多层循环常用于处理二维数据、打印图形等场景
| 题目 | 对/错/率 | 难度 | 记录 | 通过 |
|---|
| 姓名 | 分数 | 提交时间 | 操作 |
|---|