6.2 do…while语句
考点2 do…while语句
真考链接
考点2在选择中是必考内容,考核概率为100%,此知识点属于重点理解重点掌握的内容。在操作题中主要以编程题的形式进行考查,考查概率为10%。
do…while语句的一般形式如下:
do
循环体语句
while(表达式);
说明:
(1)do是C语言的关键字,必须和while联合使用,不能独立出现。
(2)do…while循环由 do开始,用while结束。在语法上,do和while之间只能是一条语句,如需要执行多条语句时,可以用大括号({})括起来,构成复合语句。必须注意的是:while(表达式)后的分号不可丢,它用以表示do…while语句的结束。
(3)while后面的圆括号中的表达式,可以是C语言中任意合法的表达式,由它控制循环是否执行,且圆括号不可丢。
执行过程:先执行一次指定的循环体语句,执行完后,判断while后面的表达式的值,当表达式的值为非零(真)时,程序流程返回,去重新执行循环体语句。如此反复,直到表达式的值等于零为止,此时循环结束。
特点:先执行循环体一次,然后判断循环条件是否成立。
有时,为了产生一段延时,也可以用空语句作为循环体语句。i循环60000次for(i=0;i<60000;i++),但什么也不做,目的就是消耗时间。熟练运用这些技巧可以给编程带来很多益处。
小提示
while语句先判断后执行;do…while语句先执行一次,再判断是否继续执行循环体。
常见问题
while语句和 do…while语句都是执行循环体语句,各有何特点和区别?
while语句首先判断是否执行,而do…while语句首先无条件执行循环体一次,然后再根据while后面的语句判断是否继续执行循环体。这点区别很细微也很关键,考生运用时要非常注意。
真题精选
【例1】有以下程序:
#include <stdio.h>
main()
{ int i = 5;
do
{ if(i % 3 == 1)
if(i % 5 == 2)
{printf("*% d",i);break }
i++;
}while(i!= 0);
printf("\n");
}
程序的运行结果是( )。
A.*7 B.*3*5 C.*5 D.*2*6
【答案】A
【解析】整个程序中只有对i增加的语句没有对i减少的语句,所以2、3都不可能出现,选项B和D错误。而i=5时第一个if语句的表达式为假,所以选项C也错误。
【例2】若变量已正确定义,有以下程序段:
i = 0;
do printf("% d,",i);while(i++);
printf("% d\n",i);
其输出结果是( )。
A.0,0 B.0,1 C.1,1 D.程序进入死循环
【答案】B
【解析】对于do…while循环,程序先执行一次循环体,再判断循环是否继续。本题先输出一次i的值“0”,再接着判断表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,程序再次输出i的值“1”。
【例3】以下叙述正确的是( )。
A.do…while语句构成的循环不能用其他语句构成的循环代替
B.只有do…while语句构成的循环能用break语句退出
C.用do…while语句构成循环时,在while后的表达式为零时不一定结束循环
D.用do…while语句构成循环时,在while后的表达式为零时结束循环
【答案】D
【解析】do…while语句构成的循环可以用其他语句构成的循环来代替。但要注意,for和while语句构成的循环,循环体是否执行取决于对循环控制条件的设置;而do…while构成的循环不管循环控制的条件如何设置,循环体总要执行一次。无论是哪种循环,break语句都可以退出循环。用do…while语句构成的循环和while语句构成的循环一样,都是在while后的表达式为零时结束循环,非零时循环继续。
【例4】下列给定程序中函数fun的功能是:计算正整数num各位上的数字之积。
例如,若输入252,则输出应该是20。若输入202,则输出应该是0。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序
#include <stdio.h>
#include <conio.h>
long fun(long num)
{ /*****found*****/
long k;
do
{ k*=num% 10;
/*****found*****/
num \=10;
}while(num);
return(k);
}
main()
{ long n;
printf("please enter a number:");
scanf("% ld",&n);
printf("\n% ld\n",fun(n));
}
【答案】(1)longk=1;(2)num/=10;
【解析】本题考查:do…while循环,数据类型;保存乘积的变量初始化;除法运算符。
(1)k用来存放各位数字的积,初始值应为1。
(2)这里是一个符号错误,除号用“/”来表示。