目录
(一)引言
(一)引言
在c语言的学习中,我们会学习到循环结构的程序设计,对于循环结构我们常见的有while循环语句、do…while循环语句和for循环语句这三种,当然我们或许还会见到if和goto搭配使用的循环语句。这里我们就简单提一下后者这种语句。
首先,goto我们能从表面知道是“去到”这样的意思,其实我们可以简单的理解为“返回”。下面我们来看一组代码:
上述代码是简单的求和程序,i的初始值为1,在if条件下,完成求和,当完成循环变量增值这一步之后,若i的值仍然满足i<=100时,则继续执行循环体,直到不再满足条件时,程序运行结束。(loop在if与goto构成的循环中起到语句标号的作用)。值得一提的是,该类型循环语句属于无条件转移语句,但是为什么我们还要学习另外的三种语句呢?原因是因为语句标号的条件和goto语句的不方便性:
- 不能用整数作为语句标号;
- 只能出现在goto函数当中,且唯一;
- 标号只能加在可执行语句前面;
- 限制使用goto语句(尽量不用),goto语句在一个程序中使用多次必然会使人眼花缭乱。
下面这段代码可以作为了解,感受一下if与goto构成的循环语句。
当然,也不能全否定goto语句,在某些特定情况下,使用goto语句还是非常方便的。下面就说一下C语言中常用的三种循环语句。
(二)利用while语句实现的循环
while语句循环的一般形式:while(expression)
statement;
statement部分可以是简单语句,也可以是花括号括起来的复合语句。
如果表达式为真(简单地说就是非零),执行语句部分一次,然后判断表达式。在表达式假(0)之前,循环的判断和执行将会一直重复。而每次循环都被成为一次迭代。
while语句循环的终止
在构建while语句中,有一个非常重要的一点,那就是保证测试值有变化,表达式最终要为假。否则,循环将会一直进行下去。例如下面这段程序:
上述程序段的运行结果是:出现无限个Good morning!。那么原因是什么呢?没错,就是因为在循环中index的值从未发生改变(一直是1)。我们简单的对上述代码进行修改如下:
第二段代码虽然改变了index的值,但是与第一段代码相比,并没有多大的改进,但是至少当此段代码在index减少到其类型可容纳的最小负值并变成最大正值时终止循环。
说明:
- 循环体可能一次也不执行
- 循环体可为任意类型语句
- 下列情况退出while循环:<1>条件表达式不成立(为零)
- <2>循环体内遇到break,return,goto
- 无限循环while(l)
循环体;//进入死循环
注意:使用while时,要牢记一点,只有在测试条件后的单独语句(简单语句或者复合语句)才是循环语句。
(三)利用do…while语句实现的循环
do…while语句循环的一般形式:do
statement
while(expresssion);
do while语句是一种出口条件循环,即在执行完循环体后才根据测试条件决定是否再次执行环。 do while循环在执行完循环体后才执行测试条件,所以至少执行循环体一次;该类循环适用于那些至少要迭代一次的循环。比如:输入我们在登陆账号输入密码的环节。
(四)while语句和do…while语句对比
- 结论:当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则,
两者结果不相同(指两者具有相同的循环体的情况)。
(五)利用for语句实现的循环
for语句的一般形式:for(initialize;test;update)statement
在test为假或0之前,重复执行statement部分。
示例:
注意:for语句中的三个语句需要用";"分隔开。initialize表达式在执行for语句之前只执行一次;然后对test表达式求值,如果表达式为真,则执行循环一次,接着对update表达式进行求值,并再次检验test表达式。for语句可能一次都不执行。
for语句和while语句的转换:
- 可以改写为while语句如下:
for(initialize;test;update)statement可以改写为while语句如下:
initialize;
while test;
{
statement
update
}
二者无条件
(六)如何选择循环
首先,需要确定选择出口条件循环还是入口条件循环。一般而言,入口条件循环使用的比较多,理由如下:
- 一般原则是在执行循环之前进行测试条件比较好;
- 测试放在循环开头,使程序的可读性更高;
- 在许多应用中,要求在一开始不满足测试条件时就直接跳过整个循环。
一般而言,当循环涉及初始化和变量更新时,用for循环比较合适,而其它情况下使用while循环更合适。另外,涉及索引计数的循环,用for循环更为合适。
参考文献:C Primer Plus——作者:Stephen Prata
C程序设计(第五版)——作者:谭浩强