5.3 循环的嵌套、比较与break语句、continue语句

5.3.1 循环的嵌套

前面学习了三种循环语句,包括while、do…while、for语句。

一个循环体内又包含另外一个完整的循环结构,称为循环的嵌套,换句话说,就是循环套循环。而在内嵌的循环中,还可以套循环,这就是多层循环嵌套,可以一直这样套下去,但一般来说一个循环体内套一层相对普遍,而套两层甚至更多层就不好理解了。图5.4所示是一些典型的循环嵌套结构。

图5.4 典型的九种循环嵌套结构

一般来说,最常用的循环语句的嵌套是for语句内部嵌套for语句这种形式,所以这里就举一个for语句内部嵌套for语句的例子,输出一个九九乘法表,形如1*1=1,2*1=2,2*2=4,3*1=3,3*2=6,3*3=9,…,9*9=81,代码如下:

看一看上面这段代码的执行结果,如图5.5所示。

图5.5 九九乘法表范例输出结果

上面这个范例是一个典型的for循环嵌套范例,可以尝试设置断点进行跟踪以进一步理解程序的执行步骤。从图5.5所示的结果中可以看到,程序一共输出9行,这主要是因为外循环一共循环了9次,每次执行一下“printf("\n");”语句导致一次换行,这里特别值得注意的是内循环的循环次数,内循环代码是for (j =1;j<=i;j++),这意味着,外循环每循环一次,内循环都要从头开始循环多次。仔细观察和设置断点分析不难发现:

· 外循环循环第1次时,i=1,此时内循环循环了1次,所以第1行输出了1列。

· 外循环循环第2次时,i=2,此时内循环循环了2次,所以第2行输出了2列。

· 外循环循环第3次时,i=3,此时内循环循环了3次,所以第3行输出了3列。

…………

· 外循环循环第9次时,i=9,此时内循环循环了9次,所以第9行输出了9列。

最终,不难看出,内循环中的代码一共执行了45次,如何计算的?就是把所有内循环的次数加起来就可以。图5.5也输出了内循环的循环次数: