6.1 while语句
考点1 while语句
真考链接
考点1在选择题中是必考内容,主要以读程序的形式出现。此知识点属于重点理解重点掌握的内容。在操作题考试中,主要在修改和编程题中进行考查,用于程序流程的控制。考核概率为40%。
while语句的一般形式如下:
while(表达式)
循环体
说明:
while是C语言的关键字。紧跟其后的表达式可以是C语言中任意合法的表达式,该表达式是循环条件,由它来控制循环体是否执行。循环体只能是一条可执行语句,当多项操作需要多次重复做时,可以使用复合语句。
执行过程:
(1)计算紧跟while后括号中表达式的值。当表达式的值为非0时,则接着执行while语句中的内嵌语句;当表达式值为0 时,则跳过该 while语句,执行该while结构后的其他语句。
(2)执行循环体内嵌语句。
(3)返回去执行步骤(1),直到条件不满足为止,即表达式的值为0时,退出循环,while结构结束。特点:先对表达式进行条件判断,后执行语句。
小提示
由while语句构成的循环结构不同于由if语句构成的选择结构。当if后面的条件表达式的值为非零时,其if子句只执行一次;而当while后面的条件表达式的值为非零时,其后的循环体中的语句将被重复执行。而且在设计循环时,通常应在循环体内改变与条件表达式中有关变量的值,使条件表达式的值最终变成零,以便能及时退出循环。
常见问题
如果while后面的表达式为空语句,那么循环体会如何执行呢?
如果后面的表达式为空语句,则说明让循环体循环下去的任何条件都满足,这样导致的后果就是形成死循环。
真题精选
【例1】在下列选项中,没有构成死循环的是( )。
A. B.
int i = 100; for(;;)
while(1)
{ i = i % 100 + 1;
if(i > 100)break;
}
C. D.
int k=10000; int s=36;
do{k++;}while(k>10000); while(s) --s;
【答案】D
【解析】选项A的循环表达式的条件永远为1,并且小于100的数与100取余不超过99,所以在循环体内表达式i%100+1的值永远不会大于100,break语句永远不会被执行,所以是死循环;选项B的括号内没有能使循环停下来的变量增量,是死循环。选项C中先执行k++,使k=10001,从而使循环陷入死循环。
【例2】以下程序的输出结果是( )。
int n=10;
while(n>7)
{ n--;
printf("% d#",n);
}
A.1098 B.987 C.10987 D.9876
【答案】B
【解析】以上程序段只包含了一个while循环,循环的控制表达式是n>7,只要n的值大于7,循环体就不断执行。在进入循环时,n的值为10。循环体内只有两条语句,每循环一次,首先n的值减1,然后输出n的值;由于n的初值为10,所以执行循环中的n--语句后,n的值依次为9、8、7,并进行输出,printf每执行一次就在最后输出一个空格。当n的值为7时,while的控制表达式n>7的值已为0,因此退出循环。
【例3】以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入,请填空。
试题程序
#include <stdio.h>
main()
{ float x,amax,amin;
scanf("% f",&x);
amax=x;amin=x;
while(______)
{ if(x>amax)amax=x;
if(______)amin=x;
scanf("% f",&x);
}
printf("\namax =% f\n amin =% f\n", amax,amin);
}
【答案】x>=0 x<amin
【解析】阅读以上程序可知,最高成绩放在变量amax中,最低成绩放在amin中。while循环用于不断读入数据放入x中,并通过判断把大于amax的数放入amax中,把小于amin的数放入amin中。因此在第二个横线处应填入x<amin。while后的表达式用以控制读入的成绩是否为负数,若是负数,读入结束并且退出循环,因此在第一个横线处应填入x>=0,即当读入的值大于等于0时,循环继续,小于0时循环结束。