6.10 嵌套循环

嵌套循环(nested loop)是指在另一个循环之内的循环。通常使用嵌套循环来按行按列显示数据。也就是说一个循环处理一行中的所有列,而另一个循环则处理所有的行。程序清单6.17是一个简单的例子。

程序清单6.17 rows1.c程序

阅读 ‧ 电子书库

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

阅读 ‧ 电子书库

运行这个程序会产生下列输出:

阅读 ‧ 电子书库

6.10.1 程序讨论

开始于第10行的for循环被称为外部循环,而开始于第12行的循环被称为内部循环,因为它位于另一个循环的内部。外部循环开始时row的值为0,当row到达6时结束。因此外部循环要执行6次,row的值从0变到5。每次循环中的第一个语句都是内部的for循环。这个循环执行10次,在同一行上打印从A到J的字符。外部循环的第二个语句是printf(“\n”);。这个语句开始一个新行,这样内部循环下次运行的时候,输出就会位于一个新的行上。

请注意在嵌套循环中,内部循环在外部循环的每次单独循环中都完全执行它的所有循环。在上一个例子中,内部循环在一行中打印10个字符,而外部循环创建6个行。

6.10.2 嵌套变化

在前面的例子中,内部循环在外部循环的每个周期中做着同样的事情。通过使内部循环的一部分依赖于外部循环,可以使内部循环在每个周期中的表现不同。例如,程序清单6.18稍微修改了上一个程序,使内部循环的开始字符依赖于外部循环的循环次数。它还使用了新的注释风格,并用const代替了#define,这有助于您熟悉这两种方法。

程序清单6.18 rows2.c程序

阅读 ‧ 电子书库

这次的输出如下:

阅读 ‧ 电子书库

因为在外部循环的每个周期中都要把row的值加到‘A’上,所以ch在每一行中都被初始化为字母表中后面的字符。但是判断条件并没有改变,所以每一行依然是以F结尾。这导致在每一个新行都打印更少的字符。