![C++新经典](https://wfqqreader-1252317822.image.myqcloud.com/cover/184/44510184/b_44510184.jpg)
5.3 循环的嵌套、比较与break语句、continue语句
5.3.1 循环的嵌套
前面学习了三种循环语句,包括while、do…while、for语句。
一个循环体内又包含另外一个完整的循环结构,称为循环的嵌套,换句话说,就是循环套循环。而在内嵌的循环中,还可以套循环,这就是多层循环嵌套,可以一直这样套下去,但一般来说一个循环体内套一层相对普遍,而套两层甚至更多层就不好理解了。图5.4所示是一些典型的循环嵌套结构。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P95_47139.jpg?sign=1738936093-MRgS09bM3lBEOAeykgXWHRFats4dTxOq-0-d477eb276dd49eda6508353985f9da00)
图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,代码如下:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p95_85530.jpg?sign=1738936093-Lotua3q3wPU9YD941K854fn6QenVAGU1-0-7c23787512a70ec4107b5a60aa03458a)
看一看上面这段代码的执行结果,如图5.5所示。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P95_47176.jpg?sign=1738936093-Qtaw4EbYcPKWSGgD9z2uv66bftG9X5cm-0-d7c3b04b701f01a6b1d0d7babd5407db)
图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也输出了内循环的循环次数:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P96_47198.jpg?sign=1738936093-vp933XHboZFYPIjFZx1bcldMAAIiSTtp-0-de1bf7a9bc5a24327002a6b20015c9f5)