文档介绍:第9章一遍又一遍——循环结构
所谓“循环”,就是对某块代码段重复多次地执行,循环结构是C语言程序书写中常用的一种重要控制结构,C语言提供了3种循环结构,分别是while结构、do while结构和for结构,本章将对其展开讨论。
构造循环
循环结构有两大要素:循环条件和循环体,当满足某个条件时,重复执行某些动作,直到该条件不再满足,这个表述很好地体现了循环条件和循环体的关系。构造循环时,首先要明白要做什么,即“循环体是什么”,这是和程序的目的相关的,知道要干什么了还不够,还要明白什么时候开始做,什么时候停,如果没有合理设定循环条件,很容易造成程序死循环,甚至是资源耗尽导致电脑死机。
循环的条件
举个最简单的例子,要求计算从1加到100有多大,因为本章讨论的是循环,所以我们撇开高斯的简便方法((1+100)*50=5050),程序如何来编的,采用如下形式显然是不现实的:
sum=1+2+3+4+……+100;
写完这个式子就够费劲的,还好只有100个,要是有成千上万个,活活要累个半死,在这种应用背景下,需要使用循环结构,只要一小段代码,如:
当型循环和直到型循环
循环结构分为两类:当型循环和直到型循环,从字面的“当”和“直到”体会两者的差别,当型循环指的是先判断循环条件,如果条件为真(非0),执行循环体,否则,跳过该循环结构,而直到型循环是先执行循环体,再判断循环条件,如果条件为真(非0),进入下一次循环,否则结束循环,两种循环的流程示意如所示。
简洁循环语句——while和do while结构
前面的示例中已经用到了while结构,其基本结构形式为:
while (表达式)
{
循环结构体
}
首先计算表达式的值,当表达式为真(非0)时,重复执行循环体,直到表达式变为假(0),跳出while结构向下执行。
do while结构与while结构略有不同,其基本形式为:
do
{
循环结构体
}
while( 表达式); /*不要忘记末尾的分号*/
语法规则
在while/do while结构中,表达式既可以是逻辑表达式或关系表达式,也可以是普通表达式,甚至可以是常量或变量,判断的关键在于其值是否为0。下面来看一下表达式仅仅是个变量的示例,见:
代码块
while结构和do while结构中的循环体是“块语句”,要么是单条语句,要么是用花括号包裹起来的多条语句,这和第8章if结构中的情况有些类似。
从字面上看,do while结构中,do和while似乎已经把循环限定住了,再加花括号似乎显得多余,但C语言的规则规定此处必须是“块语句”,如果是多条语句,却没有用花括号包裹起来,编译器会提示出错。
如果因为不小心,在while结构的“while( 表达式)”后敲上了一个分号,将会造成死循环,也就是说,表达式的值得不到修改,程序一直重复、停留在该循环处不会跳出,此时:
while( 表达式); /*此处误敲了一个分号*/
{
……/*循环体*/
}
最常用的循环语句——for结构
阅读代码时可以发现,for结构是应用最多的一种循环控制结构,这大抵是因为for结构提供的控制功能更为完善,而且,相比while结构,for结构写出的代码也更为简洁,可读性也稍好。
基本形式
for结构的一般结构为:
for (初始化表达式; 判断表达式; 修正表达式)
{
循环体
}
用while结构表示同样的结构,如下:
初始化表达式;
while( 判断表达式)
{
循环体
修正表达式;
}
表达式省略
for循环结构中的初始化表达式,判断表达式和修正表达式都是可选项,也就是说,可以省略,但每个表达式后的分号不能省略,最极端的情况是:3个表达式都省略,形式如下:
for(; ; ) /*两个分号不能省略*/
{
……/*循环体*/
}
这相当于;
while( 1 )
{
……/*循环体*/
}