while语句的特点是首先判断条件是否成立,然后决定是否执行循环体,也就是“先判断,后执行”,可以用来实现“当型”循环结构。
1.while语句的一般形式
while(表达式)语句
(1)while语句中的“表达式”是循环条件,一般是关系表达式或逻辑表达式,也可以是算术表达式。表达式的值非0为“真”,表示条件成立;0为“假”,表示条件不成立。另外,while语句中表达式外的一对圆括号是必须有的,不可以省略。
例如:
s=0;
n=10;
while(n)s=s+n--;
在这个while语句中“n”是循环条件,在循环执行过程中,n的值每次减1,当n的值为0时,循环条件不成立,结束循环。“n”外的一对圆括号是不能省略的。
(2)while语句中的“语句”就是多次重复执行的循环体,它可以是一个简单的C语句,也可以是一个复合语句,甚至也可以是一个空语句。
注意下列两个程序段的区别:
程序段1:
while(n<=100){
s=s+n;
n=n+1;}
程序段2:
while(n<=100)
s=s+n;
n=n+1;
程序段1的循环体是复合语句,循环体中的“s=s+n;”与“n=n+1;”两条C语句都是while语句每次循环时需要执行的。程序段2的循环体是赋值语句“s=s+n;”,循环时会反复执行这一条语句,而“n=n+1;”不是循环体中的语句。
(3)while语句的特点“先判断,后执行”,即先判断表达式的值后再执行循环体。如果循环条件一开始就不成立,则循环体一次都不执行。与for语句一样,可以用来实现“当型”循环结构,因此,对于while语句可以使用for语句进行改写。
例如:
实现1~100求和的while语句为:
i=1;sum=0;
while(i<=100)
{
sum=sum+i;
i++;
}
可以用for语句改写为:
sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
while语句之前对于循环变量赋初值的语句“i=1;”,可以作为for语句的表达式1。while语句循环体中的用于循环变量增值的语句“i++;”,可以作为for语句的表达式3。
2.while语句的执行过程
while语句的执行过程如图4.4所示:
Step1:求解“表达式”并判断。若值为非0(真),执行Step2,否则执行Step3。
Step2:执行循环体中的语句,转向Step1。
Step3:结束循环,执行while语句下面的语句。
从while语句的执行过程可以看出,若第一次求解作为循环条件的表达式的值为假,while语句的循环体语句将一次也得不到执行。
图4.4 while语句的执行过程
3.while语句的使用
while语句是C语言中常用的简单实用循环语句,使用频率较高,使用while语句需要注意以下几点:
(1)若while语句第一次执行时循环条件成立,在循环的执行过程中将逐步改变循环条件,使循环条件趋向不成立,直至循环条件不成立时结束循环,所以循环体中一定要有改变循环条件的语句。
例如:
i=1;sum=0;
while(i<=100)
{
sum=sum+i;
i++;
}(www.xing528.com)
循环体中的语句“i++;”就是改变循环条件的语句,经过多次循环之后,i的值逐渐趋向于100,当i的值为100时,执行完while语句的最后一次循环,这时i的值为101,“i<=100”表达式为假,退出循环。
(2)若第一次执行时循环条件就不成立,则循环体一次也不执行;若循环条件永远成立,则会形成“死循环”。对于这样的while语句,编程时应避免使用。
(3)若循环体不只包含一个语句时,一定要使用复合语句,否则,只将while后的第一个语句当作循环体语句。
(4)若while(表达式)后加了分号,则while的循环体为空语句。
程序内容如下:
1 #include<stdio.h>
2 int main()
3 {
4 int n,sum=0;
5 n=1;
6 while(n<=100)
7 {
8 sum+=n;
9 n++;
10 }
11 printf("%d\n",sum);
12 return 0;
13 }
程序结果如图4.5所示:
图4.5 例4.3程序结果图
【例题中关键问题说明】
(1)sum作为存放累加结果的变量,使用前要清零。
(2)n是while语句的循环变量,需要在while语句前使用“n=1;”语句对n赋初值。
(3)程序中的“n++;”是在程序的执行过程中使循环条件趋向不成立的语句,应该作为循环体中的内容,所以需要和反复执行的语句“sum+=n;”放在一对花括号内组成一条复合语句。
【例4.4】用while语句求n!。
程序内容如下:
1 #include<stdio.h>
2 int main()
3 {
4 int i,n,s=1;
5 scanf("%d",&n);
6 i=1;
7 while(i<=n)
8 {
9 s=s*i;
10 i++;
11 }
12 printf("s=%d\n",s);
13 return 0;
14 }
程序结果如图4.6所示:
图4.6 例4.4程序结果图
【例题中关键问题说明】
(1)变量i是本程序中while语句的循环变量,需要在while语句前使用“i=1;”语句对i赋初值,循环结束时i的值为“n+1”。
(2)s作为存放结果的变量,使用前要置1,因为s是定义的整型变量,存储数值的范围有限,若n的值较大,将不能输出正确的结果,要解决这个问题,可以将s定义为存储数值范围较大的类型的变量。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。