理论教育 C语言程序设计应用教程:while语句

C语言程序设计应用教程:while语句

时间:2023-11-21 理论教育 版权反馈
【摘要】:由while语句构成的当型循环结构,其一般形式为:说明: while后的()是半角括号,不能省略。 while的表达式可以是任意类型的表达式,不仅仅是条件表达式或逻辑表达式。图5-1while型循环流程图例5.1 用while语句实现求1 +2+…例5.2 利用while语句实现输出小于5的正整数。

C语言程序设计应用教程:while语句

由while语句构成的当型循环结构,其一般形式为:

说明:

(1) while后的()是半角括号,不能省略。

(2) while的表达式可以是任意类型的表达式,不仅仅是条件表达式或逻辑表达式。表达式的值作为循环条件。

(3)语句部分称为循环体,当需要执行多条语句时,应使用复合语句(用{}括起来)。while语句构成的循环执行过程如下:

首先判断表达式的值是否为真(非0),如果表达式的值为真,则执行循环体内的语句;然后再判断表达式的值是否为真,如果表达式的值为真,则再次执行循环体内的语句,如此循环往复,直到表达式的值为假(0)时结束。其流程图如图5-1所示。

图5-1 while型循环流程图

例5.1 用while语句实现求1 +2+…+100的和。

解题思路:

要实现累加求和,需要设置两个变量:一个为累加数,一个为和。先判断累加数是否超出最大的加数,如果判断结果为真,则做累加运算,依此重复执行,直到累加数超出最大的累加数结束。这里设i为累加数,sum为和。其流程图如图5-2所示。

图5-2 例5.1的算法流程图

编写程序:

创建一个名为“eg5_1.c”的新文件,在编辑窗口中输入下面的程序代码。

运行结果:

程序说明:

程序中的循环体是复合语句,它含有“sum = sum + i ;”和“i++;”两条语句。循环条件是i <= 100,每执行一次循环体,i的值就会增加1(i++),使得i的值逐渐递增。当i <= 100这个条件不成立时,就不再执行循环体而结束循环。

i也能起到计数器的作用,通过i的值控制循环体被执行的次数,“i++;”与“++ i;”或“=i+1;”或“i+=1;”等价,程序的执行效果也完全相同。

循环条件i <= 100也可以用i<101表示,程序执行效果也完全相同。

注意:循环条件可以灵活设置,理解其等价关系,使得编程方法更加灵活。

例5.2 利用while语句实现输出小于5的正整数。

创建一个名为“eg5_2.c”的新文件,在编辑窗口中输入下面的程序代码。

(www.daowen.com)

运行结果:

程序说明:

本程序的功能是依次输出i的值,i <5是循环条件,当i的值为5时结束循环,循环体共执行4次。

在上例中,如果去掉循环体开始及结束的{},其具体代码如下所示。

程序说明:

程序运行后满屏飞快地输出1,永不停止!

这是因为系统认为“printf (" % d" , i) ;”是循环体语句,在条件i <5成立时被反复执行。表面上看“i++;”语句必须在上述重复过程执行完毕才轮到执行且只有一次,实际上在重复执行“printf(" % d" , i) ”语句的过程中,“ i ++ ;”永远也轮不到执行,使得i <5永远成立,“printf("%d" ,i) ;”语句会一直重复执行,永不停止,这就是所谓的死循环(亦称为无限循环)。

如果将上例中的循环体改为:

printf("%d",i++);与原程序运行效果相同,不是死循环。这是因为变量i每次加1的功能已经融入printf()函数中,使得i的值每次都可以改变。

注意:如果循环条件设计得不合理,可能会造成死循环。因此,在应用循环结构进行编程时应谨慎设置循环条件,循环体有限次被执行后,应使循环条件不成立,这样循环才能结束。

例5.3 空语句作为循环体。

创建一个名为“eg5_3.c”的新文件,在编辑窗口中输入下面的程序代码。

运行结果:

程序说明:

程序中的循环体是“;”(空语句),而不是“printf ("a= % d \ n" , a) ; ” 。 while循环部分的执行过程是先计算表达式a--的值为2,执行空语句,然后将a的值减1,值为1;再计算表达式a--的值为1,执行空语句,然后将a的值减1,值为0;再次计算a--的值为0,由于循环条件为假,不执行空语句并退出while循环,但a的值仍然要减1,值为-1。

上例中如果将while (a--)后的“;”去掉,则运行结果为:

a=2

a=1

为了便于理解,给出其等价的程序段如下:

这里循环体是“printf( "a=%d\n" ,a--);”,只要a--表达式的值不为0,就执行该循环体,并再判断a--的值。共执行了两次循环体,输出两行内容。

注意:空语句(;)及复合语句的执行过程比较特殊,应该引起重视。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈