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结尾,这使 得每一行打印的字符都比上一行少一个。

posted @ 2022-02-06 23:31  喻雅芬  阅读(46)  评论(0)    收藏  举报