C 语言中的嵌套循环
在编程语境中,"嵌套"一词指的是将一个特定的编程元素封装在另一个类似的元素中。例如,嵌套循环、嵌套结构、嵌套条件语句等。
嵌套循环
在 C 语言中,当一个循环结构被用在另一个循环体中时,我们称之为嵌套循环(或循环中的循环)。其中,封装另一个循环的循环称为外循环。封闭的循环称为内循环。
嵌套循环的一般语法
嵌套循环的一般形式如下:-
Outer loop { Inner loop { ... ... } ... }
C 语言提供了三个关键字用于循环的构成:while、do-while 和 for。这三种循环类型均可嵌套。这意味着您可以将 while 循环放在 for 循环内,将 for 循环放在 do-while 循环内,或者任何其他组合。
嵌套循环的一般行为是,对于外层循环的每次迭代,内层循环都会完成所有迭代。
嵌套 For 循环
嵌套 for 循环 非常常见。如果预计外层循环和内层循环各执行三次迭代,则最内层语句的总迭代次数为"3 * 3 = 9"。
示例:嵌套 for 循环
请看以下示例 -
#include <stdio.h> int main(){ int i, j; // 外循环 for(i = 1; i <= 3; i++){ // 内循环 for(j = 1; j <= 3; j++){ printf("i: %d j: %d ", i, j); } printf("End of Inner Loop "); } printf("End of Outer Loop"); return 0; }
输出
运行此代码时,将产生以下输出 -
i: 1 j: 1 i: 1 j: 2 i: 1 j: 3 End of Inner Loop i: 2 j: 1 i: 2 j: 2 i: 2 j: 3 End of Inner Loop i: 3 j: 1 i: 3 j: 2 i: 3 j: 3 End of Inner Loop End of Outer loop
嵌套循环说明
现在让我们分析一下上述程序的工作原理。当遇到外循环时,外循环的循环变量"i"被初始化为1。由于测试条件 (a <= 3) 为真,程序进入外循环体。
程序进入内循环,控制内循环的变量"j"被初始化为1。由于内循环的测试条件 (j <= 3) 为真,程序进入内循环。打印"a"和"b"的值。
程序到达内循环的末尾。变量"j"递增。程序跳转到步骤4,直到条件 (j <= 3) 为真。
当测试条件变为假(因为"j"变为4)时,程序退出内循环。到达外循环的末尾。控制外循环变量的变量"i"递增,控制跳转到步骤 3。由于这是内循环的开始,因此"j"再次设置为 1。
内循环完成迭代并再次结束。步骤 4 至 8 将重复执行,直到外循环的测试条件 (i <= 3) 变为 false。在外循环结束时,"i"和"j"分别变为 4 和 4。
结果表明,对于外循环变量的每个值,内循环变量都会取其所有值。打印的总行数为"3 * 3 = 9"。
在 For 循环中嵌套 While 循环
任何类型的循环都可以嵌套在任何其他类型的循环中。让我们通过在外部 for 循环内放置一个 while 循环来重写上面的示例。
示例:嵌套循环(for 循环内嵌套 while 循环)
请看以下示例 -
#include <stdio.h> int main(){ int i, j; // 外层 for 循环 for (i = 1; i <= 3; i++){ // 内部 while 循环 j = 1; while (j <= 3){ printf("i: %d j: %d ", i, j); j++; } printf("End of Inner While Loop "); } printf("End of Outer For loop"); return 0; }
输出
i: 1 j: 1 i: 1 j: 2 i: 1 j: 3 End of Inner While Loop i: 2 j: 1 i: 2 j: 2 i: 2 j: 3 End of Inner While Loop i: 3 j: 1 i: 3 j: 2 i: 3 j: 3 End of inner while Loop End of outer for loop
程序员在很多应用程序中使用嵌套循环。让我们来看一些嵌套循环的示例。
C 嵌套循环示例
示例:打印表格
以下程序借助两个嵌套的 for 循环打印 1 到 10 的表格。
#include <stdio.h> int main(){ int i, j; printf("Program to Print the Tables of 1 to 10 "); // 外循环 for(i = 1; i <= 10; i++){ // 内循环 for(j = 1; j <= 10; j++){ printf("%4d", i*j); } printf(" "); } return 0; }
输出
运行代码并检查其输出 −
Program to Print the Tables of 1 to 10 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
示例:打印字符金字塔
以下代码打印字符串中递增的字符数。
#include <stdio.h> #include <string.h> int main(){ int i, j, l; char x[] = "TutorialsPoint"; l = strlen(x); // 外循环 for(i = 0; i < l; i++){ // 内循环 for(j = 0; j <= i; j++){ printf("%c", x[j]); } printf(" "); } return 0; }
输出
运行此代码时,将产生以下输出 -
T Tu Tut Tuto Tutor Tutori Tutoria Tutorial Tutorials TutorialsP TutorialsPo TutorialsPoi TutorialsPoin TutorialsPoint
示例:打印二维数组
在本程序中,我们将展示如何使用嵌套循环显示一个由整数组成的二维数组。外层循环控制行数,内层循环控制列数。
#include <stdio.h> int main(){ int i, j; int x[4][4] = { {1, 2, 3, 4}, {11, 22, 33, 44}, {9, 99, 999, 9999}, {10, 20, 30, 40} }; // 外循环 for (i=0; i<=3; i++){ // 内循环 for(j=0; j <= 3; j++){ printf("%5d", x[i][j]); } printf(" "); } return 0; }
输出
运行此代码时,将产生以下输出 -
1 2 3 4 11 22 33 44 9 99 999 9999 10 20 30 40