c语言---嵌套循环
·
文章目录
1. 什么是嵌套循环?
嵌套循环(Nested Loops)是指一个循环语句的循环体内包含另一个或多个完整的循环结构。它就像时钟的时针、分针和秒针:秒针转一圈(内层循环),分针走一格;分针转一圈(中层循环),时针走一格。
2. 基本语法结构
C语言中的三种循环(for, while, do-while)可以相互任意组合嵌套。最常用的是 for 循环嵌套。
2.1、 for 循环嵌套
这是最常见的形式,结构清晰,通常用于循环次数已知的场景。
for (初始化外层; 条件外层; 调整外层) {
// 外层循环体
for (初始化内层; 条件内层; 调整内层) {
// 内层循环体
}
// 外层循环体其他代码
}
2.2、while 循环嵌套
while (条件外层) {
// 外层循环体
while (条件内层) {
// 内层循环体
}
// 外层循环体其他代码
}
2.3、混合嵌套
不同类型的循环也可以相互嵌套。
for (初始化外层; 条件外层; 调整外层) {
while (条件内层) {
// 内层循环体
}
}
3. 执行流程与特点
关键特点:对于外层循环的每一次迭代,内层循环都会完整地执行所有次迭代。
示例代码:
#include <stdio.h>
int main() {
int i, j;
// 外层循环控制行
for (i = 1; i <= 3; i++) {
printf("外层循环 i = %d\n", i);
// 内层循环控制列
for (j = 1; j <= 2; j++) {
printf(" 内层循环 j = %d\n", j);
}
printf("外层循环第 %d 次结束\n\n", i);
}
return 0;
}
输出结果:
外层循环 i = 1
内层循环 j = 1
内层循环 j = 2
外层循环第 1 次结束
外层循环 i = 2
内层循环 j = 1
内层循环 j = 2
外层循环第 2 次结束
外层循环 i = 3
内层循环 j = 1
内层循环 j = 2
外层循环第 3 次结束
执行顺序详解:
1、i = 1,进入外层循环第一次迭代
2、执行内层循环:j 从 1 到 2,完成两次迭代
3、继续执行外层循环体剩余代码
4、i++ → i = 2,开始外层循环第二次迭代
5、内层循环重新初始化,j 再次从 1 到 2
6、重复此过程直到外层循环结束
4、控制嵌套循环:break 和 continue
在嵌套循环中使用 break 和 continue 时需要特别注意:
1、break:跳出当前所在的那一层循环
2、、continue:跳过当前所在循环的本次迭代,继续下一次
示例:使用 break 跳出内层循环
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (j == 2) {
break; // 只跳出内层循环,外层循环继续
}
printf("i=%d, j=%d\n", i, j);
}
}
5、经典应用示例
示例1:打印乘法口诀表
#include <stdio.h>
int main() {
int i, j;
for (i = 1; i <= 9; i++) { // 控制行(被乘数)
for (j = 1; j <= i; j++) { // 控制列(乘数),j<=i 只打印下三角
printf("%d×%d=%-2d ", j, i, i * j); // %-2d 左对齐,占2位
}
printf("\n"); // 换行
}
return 0;
}
示例2:遍历二维数组
#include <stdio.h>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
for (int i = 0; i < 3; i++) { // 遍历行
for (int j = 0; j < 4; j++) { // 遍历列
printf("%d\t", matrix[i][j]);
}
printf("\n");
}
return 0;
}
示例3:打印图案(金字塔)
#include <stdio.h>
int main() {
int rows = 5;
for (int i = 1; i <= rows; i++) {
// 打印空格
for (int j = i; j < rows; j++) {
printf(" ");
}
// 打印星号
for (int k = 1; k <= (2 * i - 1); k++) {
printf("*");
}
printf("\n");
}
return 0;
}
输出:
*
***
*****
*******
*********
6. 跳出多层嵌套循环的几种方法
如果需要一次性跳出多层循环,有几种常见方法:
方法1:使用 goto(谨慎使用)
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (condition) {
goto exit_loops; // 直接跳出所有循环
}
}
}
exit_loops:
// 后续代码
方法2:使用标志变量(推荐)
int break_all = 0; // 标志变量
for (int i = 0; i < 10 && !break_all; i++) {
for (int j = 0; j < 10 && !break_all; j++) {
if (condition) {
break_all = 1;
break; // 先跳出内层
}
}
// 外层循环通过检查 break_all 来决定是否继续
}
方法3:将嵌套循环封装成函数
void process_loops() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (condition) {
return; // 直接返回,跳出所有循环
}
}
}
}
7. 性能注意事项
1、循环顺序很重要:在遍历多维数组时,尽量让内层循环遍历连续的内存地址(如二维数组的列),可以利用CPU缓存提升性能。
2、避免不必要的嵌套:如果嵌套层数过深(如超过3层),考虑是否可以重构代码。
3、减少内层循环的计算量:将能在循环外计算的表达式提到循环外。
更多推荐



所有评论(0)