循环结构是结构化程序设计的三种基本结构之一,在程序设计中对于那些需要重复执行的操作应该采用循环结构来完成,利用循环结构处理各类重复操作既简单又方便。在C语言中有三种可以构成循环结构的循环语句:while、do-while和for。
while语句和用while语句构成的循环结构
1.1 while循环的一般形式
由while语句构成的循环也称“当”型循环,while循环的一般形式如下:
while***表达式***循环体
例如:
k=0
while***k<10***{ printf***“*”***;k++;}
程序段将重复输出语句printf,输出10个*号。
说明:
***1***while是C语言的关键字。
***2***while后一对圆括号中的表达式可以是C语言中任意合法的表达式,但不能为空,由它来控制循环体是否执行。
***3***在语法上,循环体只能是一条可执行语句,若循环体内有多个语句,应该使用复合语句。
1.2 while循环的执行过程
while循环的执行过程如下:
***1***计算while后圆括号中表达式的值。当值为非0时,执行步骤***2***;当值为0时,执行步骤***4***。
***2***执行循环体一次。
***3***转去执行步骤***1***。
***4***退出while循环。
由以上执行过程可知,while后圆括号中表达式的值决定了循环体是否将被执行。因此,进入while循环后,一定要有能使此表达式的值变为0的操作,否则循环将会无限制地进行下去,成为无限循环***死循环***。若此表达式的值不变,则循环体内应有在某种条件下强行终止循环的语句***如break等***。
请初学者注意:
***1***while语句的循环体可能一次都不执行,因为while后圆括号中的条件表达式可能一开始就为0。
***2***在设计循环时,通常应在循环体内改变条件表达式中有关变量的值,使条件表达式的值最终变成0,以便能结束循环。
***3***当循环体需要无条件循环,条件表达式可以设为1***恒真***,但是循环体内要带条件的非正常出口***break等***。
5.2.1 do—while语句构成的循环结构
do—while循环结构的形式如下:
do
循环体
while***表达式***;
例如:
do
{ i++;s+=i;
}while***i<10***;
说明:
***1***do是C语言的关键字,必须和while联合使用。
***2***do—while循环由do开始,至while结束。必须注意的是:在while***表达式***后的“;”不可丢,它表示do—while语句的结束。
***3***while后一对圆括号中的表达式,可以是C语言中任意合法的表达式,由它控制循环是否执行。
***4***按语法,在do和while之间的循环体只能是一条可执行语句。若循环体内需要多个语句,应该使用复合语句。
5.2.2 do—while循环的执行过程
do—while循环的执行过程如下:
***1***执行do后面循环体中的语句。
***2***计算while后一对圆括号中表达式的值。当值为非0时,转去执行步骤***1***;当值为0
时,执行步骤***3***。
***3***退出do—while循环。
由do—while构成的循环与while循环十分相似,它们之间的重要区别是:while循环的控制出现在循环体之前,只有当while后面条件表达式的值为非0时,才可能执行循环体,因此循环体可能一次都不执行;在do—while构成的循环中,总是先执行一次循环体,然后再求条件表达式的值,因此,无论条件表达式的值是0还是非0,循环体至少要被执行一次。
和while循环一样,在do—while循环体中,一定要有能使while后表达式的’值变为0的操作,否则,循环将会无限制地进行下去,除非循环体中有带条件的非正常出口***break等***。
5.3 for语句和用for语句构成的循环结构
5.3.1 for语句构成的循环结构
for语句构成的循环结构通常称为for循环。for循环的一般形式如下:
for***表达式1;表达式2;表达式3*** 循环体
例如:for ***k=0;k<10;k++*** printf***“*”***;
以上for循环在一行上输入10个*号。
for是C语言的关键字,其后的一对圆括号中通常含有三个表达式,各表达式之间用“;”隔开。这三个表达式可以是任意形式的表达式,通常主要用于for循环的控制,紧跟for***…***之后的循环体在语法上要求是一条语句,若需要多条语句,应该使用复合语句。
for循环的一般形式等价于下面的程序段:
表达式1;
while***表达式2***
{
循环体
表达式3
}
5.3.2 for循环的执行过程
for循环的执行过程如下:
***1***计算表达式1;
***2***计算表达式2,若其值为非0,转步骤***3***;若其值为0,转步骤***5***;
***3***执行一次for循环体;
***4***计算表达式3,转向步骤***2***;
***5***结束循环。