Cprogramming 简明教程
Nested Loops in C
在编程环境中,“嵌套”一词是指特定编程元素内嵌于另一个类似元素中。例如,嵌套循环、{s4}、{s5} 等。
Nested For Loops
{s17} 非常常见。如果外层循环和内层循环预期每个执行三次迭代,那么最内层陈述的总迭代次数将为“3 * 3 = 9”。
Example: Nested for Loop
请看以下示例:
#include <stdio.h>
int main(){
int i, j;
// outer loop
for(i = 1; i <= 3; i++){
// inner loop
for(j = 1; j <= 3; j++){
printf("i: %d j: %d\n", i, j);
}
printf("End of Inner Loop \n");
}
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
Explanation of Nested Loop
现在,我们分析上面的程序如何工作。当遇到外层循环时,“i”是外层循环的循环变量,它被初始化为 1。由于测试条件(a ⇐ 3)为真,程序进入外层循环主体。
程序到达内层循环,“j”是控制内层循环的变量,它被初始化为 1。由于内层循环的测试条件(j ⇐ 3)为真,程序进入内层循环。打印 “a” 和 “b” 的值。
程序到达内层循环的末尾。其变量“j”被递增。控制跳转到步骤 4,直到条件(j ⇐ 3)为真。
当测试条件变为假(因为“j”变为 4 时),控制就会退出内部循环。此时遇到外部循环的末尾。控制外部变量的变量“i”会被递增,且控制跳转至步骤 3。由于这是内部循环的开始,“j”会被再次设置为 1。
内部循环完成其迭代并再次结束。在外部循环的测试条件 (i ⇐ 3) 变为假之前,步骤 4 至 8 将被重复。在外部循环的末尾,“i”和“j”分别变为 4 和 4。
结果显示,对于外部循环变量的每个值,内部循环变量都会获取所有值。打印出的总行数为“3 * 3 = 9”。
Nesting a While Loop Inside a For Loop
任何类型的循环都可以嵌套在任何其他类型中。让我们通过在外部 for 循环中放置一个 while 循环,对上述示例进行重写。
Example: Nested Loops (while Loop Inside for Loop)
请看以下示例:
#include <stdio.h>
int main(){
int i, j;
// outer for loop
for (i = 1; i <= 3; i++){
// inner while loop
j = 1;
while (j <= 3){
printf("i: %d j: %d\n", i, j);
j++;
}
printf("End of Inner While Loop \n");
}
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 Nested Loops Examples
Example: Printing Tables
以下程序借助两个嵌套 for 循环来打印 1 到 10 的表格。
#include <stdio.h>
int main(){
int i, j;
printf("Program to Print the Tables of 1 to 10 \n");
// outer loop
for(i = 1; i <= 10; i++){
// inner loop
for(j = 1; j <= 10; j++){
printf("%4d", i*j);
}
printf("\n");
}
return 0;
}
Output
运行代码并检查其输出:
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
Example: Printing Characters Pyramid
以下代码打印字符串中字符的增加数。
#include <stdio.h>
#include <string.h>
int main(){
int i, j, l;
char x[] = "TutorialsPoint";
l = strlen(x);
// outer loop
for(i = 0; i < l; i++){
// inner loop
for(j = 0; j <= i; j++){
printf("%c", x[j]);
}
printf("\n");
}
return 0;
}
当你运行这段代码时,它将产生以下输出:
T
Tu
Tut
Tuto
Tutor
Tutori
Tutoria
Tutorial
Tutorials
TutorialsP
TutorialsPo
TutorialsPoi
TutorialsPoin
TutorialsPoint
Example: Printing Two-Dimensional Array
在此程序中,我们将展示如何使用 nested loops 来显示 two-dimensional array 的整数。外部循环控制行号,而内部循环控制列。
#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}
};
// outer loop
for (i=0; i<=3; i++){
// inner loop
for(j=0; j <= 3; j++){
printf("%5d", x[i][j]);
}
printf("\n");
}
return 0;
}
当你运行这段代码时,它将产生以下输出:
1 2 3 4
11 22 33 44
9 99 999 9999
10 20 30 40