循环体里面也可以有循环,这就是所谓的循环嵌套。循环嵌套可以帮助我们解决很多问题,经常被用于按行列方式输出数据。
例8.2:按行列方式输出九九乘法表。
运行结果如图8.3所示。
图8.3 例8.2程序运行结果
本例中的外循环共循环9次(即一共输出9行),当i等于10时循环终止。外循环的每轮循环都会执行内循环,在外循环的每轮循环中,内循环的循环次数都不相同。因为外循环的每轮循环都会使i增1,而且j的值也会被重新赋值为1,而内循环的结束条件是j<=i,且内循环的每轮循环中j只增加1,所以外循环每循环一次,内循环的循环次数就增加一次:在外循环的第一轮循环,内循环的循环次数为1;在外循环的第二轮循环,内循环的循环次数为2;在外循环的第三轮循环,内循环的循环次数为3……下面我们模拟一下本例的运行过程:
(1)外循环第一轮循环
i的值为1(以下简写为i=1),故而i<=ROWS成立,进入循环体:
①内循环的第一轮循环
j=1,故而j<=i成立,进入循环体:
输出i*j(即1*1)的乘积和一个空格,即1。
++j-->j=2,j<=i不成立,内循环结束。
输出\n,换行。
++i-->i=2,故而i<=ROWS成立,开始第二轮循环。
(2)外循环第二轮循环
①内循环的第一轮循环
j=1,j<=i成立,进入循环体:
输出i*j(2*1)和一个空格,即2。
++j-->j=2,j<=i仍然成立,开始第二轮循环。
②内循环的第二轮循环
输出i*j(2*2)和一个空格,即4。
++j-->j=3,j<=i不成立,内循环结束。
输出\n,换行。
++i-->i=3,i<=ROWS成立,开始第三轮循环。
至此,输出结果为:
外循环第三轮循环至第九轮循环从略,请大家自行模拟一次。
/*......*/
++i-->i=10,i<=ROWS不成立,外循环结束。
并非一定要同种结构的循环才能进行嵌套。for循环里面也可以嵌套while、do-while循环,while循环里也可也嵌套for、do-while循环。循环体里可以嵌套多个内循环,内循环里还可以嵌套内循环。如图8.4所示。
图8.4 循环嵌套
例8.3:输出素数。(www.xing528.com)
输出100以内的素数。素数是只能被1和本身整除的数。可用穷举法来判断一个数是否是素数。
运行结果如图8.5所示。
图8.5 例8.3程序运行结果
本例程序中,第一层循环表示对1~100这100个数逐个判断是否是素数,共循环100次,在第二层循环中则对数n用2~n-1逐个去除,若某次除尽则跳出该层循环,说明不是素数。如果在所有的数都是未除尽的情况下结束循环,则为素数,此时有i>=n,故可经此判断后输出素数。然后转入下一次大循环。实际上,大于2的所有偶数均不是素数,因此可以使循环变量的步长值改为2,即每次增加2,此外只需对数n用2~n的平方根去除就可判断该数是否素数。这样将大大减少循环次数,减少程序运行时间。
例8.4:改进后代码:
输出结果和例8.3一样,如图8.5所示。
➢for循环语句使用最为灵活,不仅适用于循环次数已经确定的情况,而且适用于循环次数不确定的情况。它完全可以代替while、do-while循环语句。
➢for可以在循环体内通过break、return等强行跳出循环
➢循环嵌套就是在循环体里面还包含循环。
1.循环输入张三同学s1结业考试的5门课成绩,并计算平均分,运行效果如图8.6所示。
图8.6 计算平均分
2.找出1~100之间个位数字不是2、3、4、7,并且不能被3整除的整数之和,运行效果如图8.7所示。
图8.7 输出满足要求的数字
3.为了提高销售额,对顾客的年龄层次(30岁之上/下)进行调查(样本数为10),计算两个层次的顾客比例,运行效果如图8.8所示。
图8.8 顾客年龄调查
4.打印出100-999之间的所有“水仙花数”。所谓“水仙花数”,是指一个3位数,其各位数字立方和等于该数本身,例如:153是一个“水仙花数”,因为153=13+53+33,运行效果如图8.9所示。
图8.9 打印“水仙花数”数字
5.接收用户输入的3个学生4门课成绩,分别计算每个学生的总成绩及平均成绩,运行效果如图8.10所示。
图8.10 计算每个学生的总成绩和平均分
1.打印出以下图形,运行效果如图8.11所示。
图8.11 打印图形
2.打印每条边有4颗星的空心的菱形,运行效果如图8.12所示。
图8.12 打印空心菱形
3.求1+(1+2)+(1+2+3)+(1+2+3+4)+(1+2+3+4+5)的和,运行效果如图8.13所示。
图8.13 求和
4.求1!+2!+3!+4!+5!之和,运行效果如图8.14所示。
图8.14 输出1!+2!+3!+4!+5!和
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。