3.4 循环嵌套

更新于 2026年10月10日 版权声明
3.4 循环嵌套

在一个循环语句(外部循环)中包含另一个循环语句(内嵌循环),称为循环的嵌套,内嵌循环中还可以嵌套循环。3种循环(while循环、do-while循环和for循环)可以互相嵌套。

例3-5 下面程序的执行结果是什么?

图示

分析:

程序中有两个变量i和j,外部循环的变量为i,内嵌循环的变量为j。当i的值为1时,i<=3成立,执行循环语句,而外部循环的循环语句又是一个for循环,也就是内嵌循环,循环变量为j,j的初值为1,判断j<=i是否成立,此时i的值为1,条件成立,执行循环语句,输出一个“*”,j的值变成2,再判断j<=i是否成立,条件不成立,退出循环,内嵌循环执行完毕,执行后面的输出换行符。然后外循环的第一轮循环语句执行完毕,i的值增加为2。

判断i<=3成立,执行循环语句,j的初值为1,判断j<=i是否成立,此时i的值为2,条件成立,执行循环语句,输出一个“*”,j的值变成2,再判断j<=i是否成立,条件仍成立,再输出一个“*”,j的值变化为3,判断j<=i是否成立,条件不成立,退出内嵌循环,执行后面的输出换行符。然后外循环的第二轮循环语句执行完毕,i的值增加为3。

判断i<=3成立,执行循环语句,而外部循环的循环语句又是一个for循环,也就是内嵌循环,循环变量为j,j的初值为1,判断j<=i是否成立,此时i的值为3,条件成立,执行循环语句,输出一个“*”,j的值变成2,再判断j<=i是否成立,条件仍成立,再输出一个“*”,j的值变化为3,判断j<=i是否成立,条件仍成立,再输出一个“*”,j的值变化为4,再判断j<=i是否成立,此时条件不成立,退出循环,内嵌循环执行完毕,执行后面的输出换行符。然后外循环的第三轮循环语句执行完毕。

所以,整个程序执行的结果为:

*

**

***

例3-6 要输出以下图形,需要怎样编写程序?

*

**

***

本例题跟例3-5之间的区别在于每行的“*”不是左对齐的,而是右对齐的,也就是在第一行先输出两个空格,再输出“*”,第二行先输出一个空格,再输出2个“*”,第三行直接输出3个“*”。

输出“*”的程序是跟例3-5一样的,唯一不同的是在外循环的循环语句中要加一个输出空格的for循环,程序如下:

图示

第1行输出2个空格,第2行输出1个空格,第3行输出0个空格,行数和空格数的和正好为总行数3,因此用“j<=3-i”来控制每行输出的空格数。

思考:如果要输出如下图形,应该怎么编写程序?

图示

例3-7 编程实现输出以下数字金字塔:

1

12

123

1234

分析:

要输出上述4行数字,每行数字都是从1开始,最大输出到行标,需要使用嵌套循环来实现。用外循环来控制行数,内嵌循环来控制每行的输出内容。程序如下:

图示

外循环控制行数,因此变量i的范围要不超过4,内循环控制输出内容从1到行标,因此变量j不能超过行标i,最关键的一点是在每一轮外循环结束时,都要输出换行符,因此在内嵌循环的结尾要有printf("\n"),执行程序的结果如下:

图示

分析:

例3-8中的数字金字塔跟例3-7每行输出的内容一样,不同之处在于每行数据是右对齐,不是左对齐。因此需要在每行输出数字之前先输出空格,并且空格的个数和数字的个数之和为4。因此在输出数据的内嵌循环前面需要加一个输出空格的for循环。程序如下:

图示

因为每行输出空格的个数和输出数字的个数之和为4,因此输出空格时用“j<=4-i”来控制变量j的结束。程序执行结果如下所示:

图示

例3-9 编程实现输出如下的数字金字塔:(https://www.daowen.com)

1

121

12321

1234321

这个数字金字塔跟例3-8里面的不同在于每行的后面又多了几个数字,而且是从每行的最大值开始递减到1的。因此在例3-8的程序基础上,在内嵌循环的后面再添加一个输出递减数字到1的for循环来实现数字金字塔右半部分的数字输出即可。程序如下:

图示

图示

程序执行结果如下所示:

图示

例3-10 编程实现输出如下图形。

0

1 2

2 3 4

3 4 5 6

4 5 6 7 8

分析:

该数字金字塔共分5层,每层的输出数字序列是连续的,从行标减1开始,到2倍的行标减2结束。因此对于输出数字内容的for循环变量j的开始和结束可以通过行“i-1”和“2*i-2”来控制。程序如下:

图示

图示

例3-11 编程实现输出如下矩阵:

1 2 3 4

2 4 6 8

3 6 9 12

4 8 12 16

分析:

在上面的矩阵中,一共要输出共16个数,但是要4个一行,对齐显示。每行显示的数都是第一行的行标倍。因此程序如下:

图示

执行结果为:

图示

例3-12 编程实现输出如下矩阵:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

分析:

要输出从1到16之间的16个数,且每4个数一行,可以在程序中设置一个计数器t,用于每次循环记一次数。当t的值为4的倍数时,就输出一个换行,再输出该数;当t的值不是4的倍数时,只输出该数即可。程序如下:

图示

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)