C语言中的循环嵌套(非常详细,附带实例)

C语言中的循环嵌套(非常详细,附带实例)

在 C语言中,循环嵌套是指在一个循环结构内部嵌套另一个或多个循环结构。简单来说,就是“循环套循环”。

循环嵌套在编程中非常常见,尤其当你需要处理多层次的数据或重复执行某些操作时。

学习循环嵌套之前,相信读者已经掌握了 C 语言中 while、do-while 和 for 循环的用法。接下来,我们直接深入探讨循环嵌套的原理、用法、示例以及注意事项。

循环嵌套的语法

循环嵌套的本质是层次化的重复执行,外层循环每执行一次,内层循环会完整地执行一遍(通常是多次迭代)。循环嵌套的过程和钟表很像,外层循环是“小时”,内层循环是“分钟”,每过一小时,分钟要从 0 走到 59。

C语言支持各种循环之间的嵌套,比如 for 嵌套 for、while 嵌套 for,甚至更复杂的组合。

循环嵌套并没有特殊的语法,它只是将一个循环语句作为另一个循环的“循环体”。以下是一个典型的 for 循环嵌套结构:

for (初始化1; 条件1; 更新1) {

// 外层循环体

for (初始化2; 条件2; 更新2) {

// 内层循环体

}

}

在这里:

外层循环控制“大循环”的次数。

内层循环在每次外层循环中完整执行,直到条件2 不满足。

其他循环(如 while、do-while)的嵌套方式类似,只需将对应的语法嵌入即可。

为了理解循环嵌套的执行顺序,我们可以用一个简单的例子来说明。假设外层循环执行 3 次,内层循环执行 4 次:

#include

int main() {

int i, j;

for (i = 1; i <= 3; i++) {

for (j = 1; j <= 4; j++) {

printf("i = %d, j = %d\n", i, j);

}

}

return 0;

}

输出结果:

i = 1, j = 1

i = 1, j = 2

i = 1, j = 3

i = 1, j = 4

i = 2, j = 1

i = 2, j = 2

i = 2, j = 3

i = 2, j = 4

i = 3, j = 1

i = 3, j = 2

i = 3, j = 3

i = 3, j = 4

从输出可以看出:

当 i = 1 时,内层循环将 j 从 1 跑到 4。

j 完成后,i 变为 2,内层循环再次从头开始。

总执行次数 = 外层次数 × 内层次数 = 3 × 4 = 12。

这就像一层一层剥洋葱,先完成内层,再推进外层。

循环嵌套的经典实例

1) 打印九九乘法表

循环嵌套最经典的应用之一是打印九九乘法表。外层控制行数,内层控制每行的乘法结果。

#include

int main() {

int i, j;

for (i = 1; i <= 9; i++) {

for (j = 1; j <= i; j++) {

printf("%d × %d = %d\t", j, i, i * j);

}

printf("\n"); // 每行结束后换行

}

return 0;

}

输出结果:

1 × 1 = 1

1 × 2 = 2 2 × 2 = 4

1 × 3 = 3 2 × 3 = 6 3 × 3 = 9

1 × 4 = 4 2 × 4 = 8 3 × 4 = 12 4 × 4 = 16

1 × 5 = 5 2 × 5 = 10 3 × 5 = 15 4 × 5 = 20 5 × 5 = 25

1 × 6 = 6 2 × 6 = 12 3 × 6 = 18 4 × 6 = 24 5 × 6 = 30 6 × 6 = 36

1 × 7 = 7 2 × 7 = 14 3 × 7 = 21 4 × 7 = 28 5 × 7 = 35 6 × 7 = 42 7 × 7 = 49

1 × 8 = 8 2 × 8 = 16 3 × 8 = 24 4 × 8 = 32 5 × 8 = 40 6 × 8 = 48 7 × 8 = 56 8 × 8 = 64

1 × 9 = 9 2 × 9 = 18 3 × 9 = 27 4 × 9 = 36 5 × 9 = 45 6 × 9 = 54 7 × 9 = 63 8 × 9 = 72 9 × 9 = 81

这里,内层循环的条件 j <= i 确保只打印当前行需要的部分,形成三角形结构。

2) 打印星号图案

另一个常见的例子是打印图形,比如一个 5 行的倒三角形星号图案:

#include

int main() {

int i, j;

for (i = 5; i >= 1; i--) {

for (j = 1; j <= i; j++) {

printf("* ");

}

printf("\n");

}

return 0;

}

输出结果:

* * * * *

* * * *

* * *

* *

*

外层循环控制行数从 5 递减到 1,内层循环打印每行的星号,数量由 i 决定。

与其他控制语句的结合

循环嵌套常常与 break 和 continue 结合使用,增加灵活性。但要注意它们的作用范围。

1) 使用break语句

在一个嵌套循环中,break 只跳出它所在的最近一层循环。以下是一个例子:

#include

int main() {

int i, j;

for (i = 1; i <= 3; i++) {

for (j = 1; j <= 5; j++) {

if (j == 3) {

break; // 只跳出内层循环

}

printf("i = %d, j = %d\n", i, j);

}

}

return 0;

}

输出结果:

i = 1, j = 1

i = 1, j = 2

i = 2, j = 1

i = 2, j = 2

i = 3, j = 1

i = 3, j = 2

当 j == 3 时,break 终止内层循环,但外层循环继续执行。如果想跳出所有循环,可以使用标签和 goto,但这超出了本教程范围。

2) 使用continue语句

continue 只影响当前循环的本次迭代。例如:

#include

int main() {

int i, j;

for (i = 1; i <= 3; i++) {

for (j = 1; j <= 3; j++) {

if (j == 2) {

continue; // 跳过 j = 2

}

printf("i = %d, j = %d\n", i, j);

}

}

return 0;

}

输出结果:

i = 1, j = 1

i = 1, j = 3

i = 2, j = 1

i = 2, j = 3

i = 3, j = 1

i = 3, j = 3

j = 2 被跳过,但内层和外层循环都正常运行。

循环嵌套的注意事项

性能问题:嵌套层数过多会导致执行次数呈指数增长(如三层循环可能是 n³ 次),要避免不必要的复杂嵌套。

变量命名:内外层循环的控制变量要区分开(如 i 和 j),否则会引发混乱。

调试技巧:嵌套循环出错时,可以用 printf 打印变量值,逐步跟踪执行流程。

总结

循环嵌套是 C语言中处理多层次重复任务的重要手段,C语言提供的 while、do-while 和 for 这 3 种循环结构中,任意两种都可以嵌套。

阅读完本文,相信你已经彻底掌握了 C 语言循环嵌套的用法。建议你尝试多编写一些嵌套循环程序,比如打印不同的图形或处理二维数组,这样可以加深对循环嵌套的理解。