文章教程

全国计算机等级考试二级C语言6.2do…while语句

8/22/2020 10:24:52 PM 人评论 次浏览

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)这里是一个符号错误,除号用“/”来表示。

教程类别