购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3.5 循环语句

实际应用中很多地方需要用到循环控制,如需要反复进行某种操作等,这时可以用循环语句来实现。在C语言程序中用来构成循环控制的语句有:while语句、do-while语句、for语句以及goto语句,分述如下。

① 采用while语句构成循环结构的一般形式如下:

while(条件表达式) 语句;

其意义为,当条件表达式的结果为真(非0值)时,程序就重复执行后面的语句,一直执行到条件表达式的结果变为假(0值)时为止。这种循环结构是先检查条件表达式所给出的条件,再根据检查的结果决定是否执行后面的语句。如果条件表达式的结果一开始就为假,则后面的语句一次也不会被执行。这里的语句可以是复合语句。如图2.4所示为while语句的执行过程。

图2.4 while语句的执行过程

例2-15 使用while语句计算自然数1~100的累加和。

程序执行结果:

1+2+…+100=5050

② 采用do-while语句构成循环结构的一般形式如下:

do 语句 while(条件表达式);

这种循环结构的特点是先执行给定的循环体语句,然后再检查条件表达式的结果。当条件表达式的值为真(非0值)时,则重复执行循环体语句,直到条件表达式的值变为假(0值)时为止。因此,用do-while语句构成的循环结构在任何条件下,循环体语句至少会被执行一次。图2.5给出了这种循环结构的流程图。

图2.5 do-while循环结构的流程图

例2-16 用do-while语句构成的循环计算自然数1~100的累加和。

程序执行结果:

1+2+···+100=5050

例2-16的程序与例2-15的程序十分相似。它们的区别仅仅是执行循环体语句和判断条件表达式的结果的顺序不同。另外,用do-while语句构成的循环结构中,while(条件表达式)的后面必须有一个分号,而用while语句构成的循环结构中while(条件表达式)后面是没有分号的。这一点在写程序时一定要注意。

③ 采用for语句构成循环结构的一般形式如下:

for([初值设定表达式];[循环条件表达式];[更新表达式])语句

for语句的执行过程是:先计算出初值设定表达式的值,以此作为循环控制变量的初值,再检查循环条件表达式的结果,当满足条件时就执行循环体语句并计算更新表达式,然后再根据更新表达式的计算结果来判断循环条件是否满足,一直进行到循环条件表达式的结果为假(0值)时退出循环体。for语句的执行过程如图2.6所示。

图2.6 for语句的执行过程

例2-17 用for语句构成的循环计算自然数1~100的累加和。

程序执行结果:

1+2+…+100=5050

在C语言程序的循环结构中,for语句的使用最为灵活,它不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况。另外,for语句中的三个表达式是相互独立的,并不一定要求三个表达式之间有依赖关系。并且for语句中的三个表达式都可能缺省,但无论缺省哪一个表达式,其中的两个分号都不能缺省。一般不要缺省循环条件表达式,以免形成死循环。

例2-18 for语句中缺省表达式的例子——计算自然数1~100的累加和。

程序执行结果:

1+2+…+100=5050

④ goto语句是一个无条件转向语句,它的一般形式为:

goto语句标号;

其中语句标号是一个带冒号“:”的标识符。将goto语句和if语句一起使用,可以构成一个循环结构。但更常见的是在C语言程序中采用goto语句来跳出多重循环,需要注意的是只能用goto语句从内层循环跳到外层循环,而不允许从外层循环跳到内层循环。

例2-19 使用goto语句跳出循环结构。

本程序采用循环结构来求一整数的等差数列,该数列满足条件:头四个数的和值为26,积值为880。该数列的公差应为正整数,否则将产生负的项,此外该数列的首项数必须小于5,且其公差也应小于5,否则头四项的和值将大于26。

程序执行结果:

2,5,8,11,14,17,20,23,26,29,…

在这个程序中采用for语句构成了两重循环嵌套,即在第一个for语句的循环体中又出现了另一个for语句的循环体,需要时还可以构成多重循环结构。程序在最内层循环体中采用了一个goto语句,它的作用是直接跳出两层循环,即跳到第一层循环体外边由标号pt:所指出的地方。前面在介绍开关语句时提到采用break语句可以跳出开关语句,break语句还可以用于跳出循环语句。对于上面的例子,也可以采用break语句来终止循环。

例2-20 用break语句终止循环。

程序执行结果:

2,5,8,11,14,17,20,23,26,29,…

从例2-20可以看到,对于多重循环的情况,break语句只能跳出它所处的那一层循环,而不像goto语句可以直接从最内层循环中跳出来。由此可见,要退出多重循环时,采用goto语句比较方便。需要指出的是,break语句只能用于开关语句和循环语句之中,它是一种具有特殊功能的无条件转移语句。另外还要注意,在进行实际程序设计时,为了保证程序具有良好的结构,应当尽可能少地采用goto语句,以使程序结构清晰易读。

在循环结构中还可以使用一种中断语句continue,它的功能是结束本次循环,即跳过循环体中下面尚未执行的语句,把程序流程转移到当前循环语句的下一个循环周期,并根据循环控制条件决定是否重复执行该循环体。continue语句的一般形式为:

continue;

continue语句通常和条件语句一起用在由while、do-while和for语句构成的循环结构中,它也是一种具有特殊功能的无条件转移语句,但与break语句不同,continue语句并不跳出循环体,而只是根据循环控制条件确定是否继续执行循环语句。

例2-21 利用continue语句把10~20之间不能被3整除的数输出。

程序执行结果:

10 11 13 14 16 17 19 20 Fj6Jbkqs/ZQK7C8WQ2s/5kHU/v7oKXDpAlSSG48j9CJcefJhCosWcNW47o9Y2Fr2

点击中间区域
呼出菜单
上一章
目录
下一章
×