首页 > 编程笔记 > C语言笔记 阅读:13

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

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

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

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

循环嵌套的语法

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

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

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

for (初始化1; 条件1; 更新1) {
    // 外层循环体
    for (初始化2; 条件2; 更新2) {
        // 内层循环体
    }
}

在这里:


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

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

#include <stdio.h>

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

从输出可以看出:


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

循环嵌套的经典实例

1) 打印九九乘法表

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

#include <stdio.h>

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 <stdio.h>

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 决定。

与其他控制语句的结合

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

1) 使用break语句

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

#include <stdio.h>

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 <stdio.h>

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 被跳过,但内层和外层循环都正常运行。

循环嵌套的注意事项

总结

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

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

相关文章