单片机C语言C51的语句
1. if语句if语句是C51中的一个基本条件选择语句,它通常有三种格式:(1)if (表达式) {语句;}(2)if (表达式) {语句1;} else {语句2;}(3)if (表达式1) {语句1;}else if (表达式2) (语句2;)else if (表达式3) (语句3;)……else if (表达式n-1) (语句n-1;)else...
1. if语句
if语句是C51中的一个基本条件选择语句,它通常有三种格式:
(1)if (表达式) {语句;}
(2)if (表达式) {语句1;} else {语句2;}
(3)if (表达式1) {语句1;}
else if (表达式2) (语句2;)
else if (表达式3) (语句3;)
……
else if (表达式n-1) (语句n-1;)
else {语句n}
【例】 if语句的用法。
(1)if (x!=y) printf(“x=%d,y=%d\n”,x,y);
执行上面语句时,如果x不等于y,则输出x的值和y的值。
(2)if (x>y) max=x;
else max=y;
执行上面语句时,如x大于y成立,则把x送给最大值变量max,如x大于y不成立,则把y送给最大值变量max。使max变量得到x、y中的大数。
(3)if (score>=90) printf(“Your result is an A\n”);
else if (score>=80) printf(“Your result is an B\n”);
else if (score>=70) printf(“Your result is an C\n”);
else if (score>=60) printf(“Your result is an D\n”);
else printf(“Your result is an E\n”);
执行上面语句后,能够根据分数score分别打出A、B、C、D、E五个等级。
2. switch/case语句
if语句通过嵌套可以实现多分支结构,但结构复杂。switch是C51中提供的专门处理多分支结构的多分支选择语句。它的格式如下:
switch (表达式)
{case 常量表达式1:{语句1;}break;
case 常量表达式2:{语句2;}break;
……
case 常量表达式n:{语句n;}break;
default:{语句n+1;}
说明如下:
(1)switch后面括号内的表达式,可以是整型或字符型表达式。
(2)当该表达式的值与某一“case”后面的常量表达式的值相等时,就执行该“case”后面的语句,然后遇到break语句退出switch语句。若表达式的值与所有case后的常量表达式的值都不相同,则执行default后面的语句,然后退出switch结构。
(3)每一个case常量表达式的值必须不同否则会出现自相矛盾的现象。
(4)case语句和default语句的出现次序对执行过程没有影响。
(5)每个case语句后面可以有“break”,也可以没有。有break语句,执行到break则退出switch结构,若没有,则会顺次执行后面的语句,直到遇到break或结束。
(6)每一个case语句后面可以带一个语句,也可以带多个语句,还可以不带。语句可以用花括号括起,也可以不括。
(7)多个case可以共用一组执行语句。
【例】 switch/case语句的用法。
对学生成绩划分为A~D,对应不同的百分制分数,要求根据不同的等级打印出它的对应百分数。可以通过下面的switch/case语句实现。
……
switch(grade)
{
case ‘A’;printf(”90~100\n”);break;
case ‘B’;printf(”80~90\n”);break;
case ‘C’;printf(”70~80\n”);break;
case ‘D’;printf(”60~70\n”);break;
case ‘E’;printf(”<60\n”);break;
default;printf(”error”\n)
}
3. while语句
while语句在C51中用于实现当型循环结构,它的格式如下:
while(表达式)
{语句;} /*循环体*/
while语句后面的表达式是能否循环的条件,后面的语句是循环体。当表达式为非0(真)时,就重复执行循环体内的语句;当表达式为0(假),则中止while循环,程序将执行循环结构之外的下一条语句。它的特点是:先判断条件,后执行循环体。在循环体中对条件进行改变,然后再判断条件,如条件成立,则再执行循环体,如条件不成立,则退出循环。如条件第一次就不成立,则循环体一次也不执行。
【例】 下面程序是通过while语句实现计算并输出1~100的累加和。
#include <reg52.h> //包含特殊功能寄存器库
#include <stdio.h> //包含I/O函数库
void main(void) //主函数
{
int i,s=0; //定义整型变量x和y
i=1;
SCON=0x52; //串口初始化
TMOD=0x20;
TH1=0XF3;
TR1=1;
while (i<=100) //累加1~100之和在s中
{
s=s+i;
i++;
}
printf(“1+2+3……+100=%d\n”,s);
while(1);
}
程序执行的结果:
1+2+3……+100=5050
4. do while语句
do while语句在C51中用于实现直到型循环结构,它的格式如下:
do
{语句;} /*循环体*/
while(表达式);
它的特点是:先执行循环体中的语句,后判断表达式。如表达式成立(真),则再执行循环体,然后又判断,直到有表达式不成立(假)时,退出循环,执行do while结构的下一条语句。do while语句在执行时,循环体内的语句至少会被执行一次。
【例】 通过do while语句实现计算并输出1~100的累加和。
#include <reg52.h> //包含特殊功能寄存器库
#include <stdio.h> //包含I/O函数库
void main(void) //主函数
{
int i,s=0; //定义整型变量x和y
i=1;
SCON=0x52; //串口初始化
TMOD=0x20;
TH1=0XF3;
TR1=1;
do //累加1~100之和在s中
{
s=s+i;
i++;
}
while (i<=100);
printf(“1+2+3……+100=%d\n”,s);
while(1);
}
5. for语句
for(表达式1;表达式2;表达式3)
{语句;} /*循环体*/
for语句后面带三个表达式,它的执行过程如下:
(1)先求解表达式1的值。
(2)求解表达式2的值,如表达式2的值为真,则执行循环休中的语句,然后执行下一步(3)的操作,如表达式2的值为假,则结束for循环,转到最后一步。
(3)若表达式2的值为真,则执行完循环体中的语句后,求解表达式3,然后转到第四步。
(4)转到(2)继续执行。
(5)退出for循环,执行下面的一条语句。
在for循环中,一般表达式1为初值表达式,用于给循环变量赋初值;表达式2为条件表达式,对循环变量进行判断;表达式3为循环变量更新表达式,用于对循环变量的值进行更新,使循环变量能不满足条件而退出循环。
【例】 用for语句实现计算并输出1~100的累加和。
#include <reg52.h> //包含特殊功能寄存器库
#include <stdio.h> //包含I/O函数库
void main(void) //主函数
{
int i,s=0; //定义整型变量x和y
SCON=0x52; //串口初始化
TMOD=0x20;
TH1=0XF3;
TR1=1;
for (i=1;i<=100;i++) s=s+i; //累加1~100之和在s中
printf(“1+2+3……+100=%d\n”,s);
while(1);
}
6. 循环的嵌套
在一个循环的循环体中允许又包含一个完整的循环结构,这种结构称为循环的嵌套。外面的循环称为外循环,里面的循环称为内循环,如果在内循环的循环体内又包含循环结构,就构成了多重循环。在C51中,允许三种循环结构相互嵌套。
【例】用嵌套结构构造一个延时程序。
void delay(unsigned int x)
{
unsigned char j;
while(x--)
{for (j=0;j<125;j++);}
}
这里,用内循环构造一个基准的延时,调用时通过参数设置外循环的次数,这样就可以形成各种延时关系。
7. break和continue语句
break和continue语句通常用于循环结构中,用来跳出循环结构。但是二者又有所不同,下面分别介绍。
1).break语句
前面已介绍过用break语句可以跳出switch结构,使程序继续执行switch结构后面的一个语句。使用break语句还可以从循环体中跳出循环,提前结束循环而接着执行循环结构下面的语句。它不能用在除了循环语句和switch语句之外的任何其它语句中。
【例19】下面一段程序用于计算圆的面积,当计算到面积大于100时,由break语句跳出循环。
for (r=1;r<=10;r++)
{
area=pi*r*r;
if (area>100) break;
printf(“%f\n”,area);
}
2).continue语句
continue语句用在循环结构中,用于结束本次循环,跳过循环体中continue下面尚未执行的语句,直接进行下一次是否执行循环的判定。
continue语句和break语句的区别在于:continue语句只是结束本次循环而不是终止整个循环;break语句则是结束循环,不再进行条件判断。
【例20】 输出100~200间不能被3整除的数。
for (i=100;i<=200;i++)
{
if (i%3= =0) continue;
printf(“%d ”;i);
}
在程序中,当i能被3整除时,执行continue语句,结束本次循环,跳过printf()函数,只有能被3整除时才执行printf()函数。
8. return语句
return语句一般放在函数的最后位置,用于终止函数的执行,并控制程序返回调用该函数时所处的位置。返回时还可以通过return语句带回返回值。return语句格式有两种:
(1)return;
(2)return (表达式);
如果return语句后面带有表达式,则要计算表达式的值,并将表达式的值作为函数的返回值。若不带表达式,则函数返回时将返回一个不确定的值。通常我们用return语句把调用函数取得的值返回给主调用函数。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)