4.1.4 循环语句
循环语句用于需要进行反复多次执行若干语句的操作。C51语言中包括3种循环语句:while语句、do-while语句和for语句。虽然这3种语句都是进行循环操作,但在程序中的作用和用法却不相同。在程序中使用循环语句时,要注意恰当地选择合适的循环语句。下面分别介绍这3种循环语句的具体用法。
1.while语句
while循环语句的一般形式如下。
while(表达式)
{
语句;
}
while语句在执行时首先判断表达式值是否为真,如果为真,便执行一次语句,然后再次判断表达式的值,直到表达式的值被判定为假时,才结束循环。while语句结束后,程序便可以接着执行循环体外的后续语句。
技巧while语句根据后面的表达式的值来决定是否执行循环体,当表达式的值为0时,表示为假,当表达式的值为非0时,表示为真。在单片机的程序中,经常可看到使用while(1)这种形式,这时,由于表达式为一个常量,且不为0,则该循环语句将始终循环执行。这种语句称为死循环。
while循环语句的示例程序如下。
include<stdio.h>//头文件
void main()//主函数
{
int i,s;//声明变量
i=100;s=0;//初始化
while(i>0)//while循环,求和
{
s=s+i;//s累加
i=i-1;//循环次数减1
}
printf(“1+2+……+100=%d\n”,s);//输出求和结果
}
该程序可以在KeilµVision3编译环境中执行,其运行的结果如下所示。
1+2+……+100=5050
本例中首先定义并初始化变量i为循环次数,s为累加和。程序中采用了while循环语句,求1加到100的总和。当i小于或等于0时,表达式为假,while循环结束,然后输出求和结果。
使用while循环语句时,要注意以下几点。
❑while语句的特点是先判断表达式即条件,后执行语句。这样可能不执行任何语句就退出。
❑如果循环体内的语句只有一个,则可以省略“{}”。如果循环体内的语句由多行构成,即语句是语句体时,必须用括起来,表示成复合语句的形式。
❑while语句“{}”后面无分号。
❑while语句循环体内允许空语句,此时while语句结尾需要添加分号。示例如下。
while((ch=getchar())!=‘\X0D’);
本例中等待键盘输入字符,直到键入回车时,循环才结束。循环语句只有表达式,作为判定条件,而没有执行语句。
❑while语句循环允许多层循环嵌套使用。
❑在使用while循环语句时,要将表达式或执行语句进行适当的修改,使其可以跳出循环,而不至于造成死循环。
2.do-while语句
do-while语句的一般形式如下。
do
{
语句;
}
while(表达式);
do-while语句在执行时,首先执行一次do后面的语句,然后再判断while后的表达式值是否为真,如果表达式值为真,返回再次执行do后面的语句,直到表达式值为假时,才结束循环。do-while循环语句结束后,程序才可以继续执行循环体外的后续语句。do-while语句的程序示例如下。
include<stdio.h>//头文件
void main()//主函数
{
int i,s;//声明变量
i=100;s=0;//初始化
do//do-while循环,求和
{
s=s+i;//s累加
i=i-1;//循环次数减1
}
while(i>0);//表达式
printf(“1+2+……+100=%d\n”,s);//输出求和结果
}
该程序可以在KeilµVision3编译环境中执行,其运行的结果如下所示。
1+2+……+100=5050
本例中首先定义并初始化变量i为循环次数,s为累加和。程序中采用了do-while循环语句,求1加到100的总和。当i小于或等于0时,表达式为假,do-while循环结束,然后输出求和结果。
使用do-while循环语句时,要注意以下几点。
❑do-while语句的特点是先执行一次语句,然后再判断条件。因此,do-while语句至少执行一次do后面的语句。
❑如果do-while循环体内的语句只有一条,可以省略“{}”。如果do-while循环体内由多个语句构成语句体时,必须用“{}”括起来,表示成复合语句的形式。
❑do-while语句中的“{}”后面无分号。
❑使用do-while语句循环时,while(表达式)后的“;”不能遗漏。
❑使用do-while语句循环时,需要注意避免构成死循环。
3.for语句
for语句的一般形式如下。
for(表达式1;表达式2;表达式3)
{
语句;
}
其中,表达式1一般为赋值语句,给循环变量进行初始化赋值;表达式2是一个关系逻辑表达式,作为判断循环条件的真假;表达式3定义循环变量的变化方式。当由表达式1初始化循环变量后,由表达式2和表达式3确定循环次数。
for语句在执行时,首先执行表达式1,然后判断表达式2是否为真,如果为真,则执行一次循环体内部的语句和表达式3,否则将结束循环。for循环语句结束后,程序才可以继续执行循环体外的后续语句。for循环语句的程序示例如下。
include<stdio.h>//头文件
void main()//主函数
{
int i,s;//声明变量
i=100;s=0;//初始化
for(i=0;i<=100;i++)//for循环
{
s=s+i;//表达式语句
}
printf(“1+2+……+100=%d\n”,s);//输出求和结果
}
该程序可以在KeilµVision3编译环境中执行,其运行的结果如下所示。
1+2+……+100=5050
本例中首先定义并初始化变量i为循环次数,s为累加和。程序中采用了for循环语句,求从1加到100的总和。当i大于100时,表达式“i<=100”为假,for循环结束,然后输出求和结果。
使用for循环语句时,需要注意以下几点。
❑for语句中的3个表达式都是可选择项,可以任意缺省,但“;”不能省。例如for(;),表示一个无限循环。省略表达式1,即不对循环控制变量进行初始化赋值。省略表达式2,即不判断循环条件的真假。省略表达式3,即不对循环控制变量进行操作。
❑如果for语句中省略表达式3,则可以在循环语句体内加入控制循环变量的语句,从而避免构成一个死循环。
❑for循环语句循环允许多层循环嵌套。
❑for语句循环体中如果只有一条语句,则可以省略“{}”。如果循环体内的语句是多个语句构成的语句体,则必须用“{}”括起来。
❑for语句“{}”后面无分号。
❑for语句循环体内允许空语句,此时for语句结尾需要添加分号。示例如下。
for(i=0;i<100;i++);
本例中for语句没有循环体,只进行空循环,没有任何的操作意义,常用于延时。