15. C Primer Plus 6.8及6.10
6.8及6.10
6.8出口条件循环do while语句
while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查 测试条件,所以有可能根本不执行循环体中的内容。
C语言还有出口条件循 环(exit-condition loop),即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。这种循环被称为 do while循环。
下列示例程序演示了出口条件循环:

上列示例程序在用户输入13之前不断提示用户输入数字,输出结果为:

上列示例程序可以使用while循环也能写出等价的程序,但是while循环写会长一些,例如:

下面是do while 循环的通用形式:
do
statement
while(expression);
注意:1.statement 可以使一条简单语句或者使一条复合语句。
2.do while 循环以分号结尾,do while循环的结构如下图:

3.do while循环在执行完循环体后才执行测试条件,所以至少执行循环体一次;而for循环或while循环都是在执行循环体之前先执行测试条件。
4.do while 循环适用于那些至少要迭代一次的循环。
下面是一个包含do while 循环的密码程序(上列示例程序)的伪代码:
do
{
提示用户输入密码
读取用户输入的密码
}while(用户输入的密码不等于密码);
避免使用这种形式的do while 结构:
do
{
询问用户是否继续
其他行为
}while(回答是yes);
这样的结构导致用户在回答“no”之后,仍然执行“其他行为”部分,因为测试条件执行晚了。
小结:do while 语句
关键字:do while
一般注解:do while 语句创建一个循环,在 expression 为假或 0 之前重复执行循环 体中的内容。do while语句是一种出口条件循环,即在执行完循环体后才根 据测试条件决定是否再次执行循环。因此,该循环至少必须执行一次。
statement部分可以是一条简单语句或者复合语句。
形式:
do
statement
while(expression);
在test为假或0之前,重复执行statement部分。
示例程序:

6.10嵌套循环
嵌套循环(nested loop)指在一个循环内包含另一个循环。
嵌套循环常 用于按行和列显示数据,也就是说,一个循环处理一行中的所有列,另一个循环处理所有的行。
下列示例程序演示了简单的嵌套循环:

输出结果如下:

6.10.1程序分析
第10行开始的for循环被称为外层循环,第12行开始的for 循环被称为内层循环。外层循环从row为0开始循环,到row为 6时结束。因此,外层循环要执行6次,row的值从0变为5。每次迭代要执行 的第1条语句是内层的for循环,该循环要执行10次,在同一行打印字符A~ J;第2条语句是外层循环的printf("\n");,该语句的效果是另起一行,这样在 下一次运行内层循环时,将在下一行打印的字符
注意:嵌套循环中的内层循环在每次外层循环迭代时都执行完所有的循环。
在上列示例程序中,内层循环一行打印10个字符,外层循环创建6行。
6.10.2嵌套变式
上一个实例中,内层循环和外层循环所做的事情相同。可以通过外层循 环控制内层循环,在每次外层循环迭代时内层循环完成不同的任务。
下列示例程序稍微修改上面的示例程序,使得内层循环开始打印的字符取决于外层循环的迭代次数,并且第一行使用了新的注释风格,还用const关键字代替#define:

输出结果如下:

因为每次迭代都要把row的值与‘A’相加,所以ch在每一行都被初始化为不同的字符。然而,测试条件并没有改变,所以每行依然是以F结尾,这使 得每一行打印的字符都比上一行少一个。

浙公网安备 33010602011771号