4--第四章--C51流程控制语句

上传人:尘*** 文档编号:242936411 上传时间:2024-09-12 格式:PPT 页数:26 大小:196.50KB
返回 下载 相关 举报
4--第四章--C51流程控制语句_第1页
第1页 / 共26页
4--第四章--C51流程控制语句_第2页
第2页 / 共26页
4--第四章--C51流程控制语句_第3页
第3页 / 共26页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 C51流程控制语句,4.1 表达式语句及复合语句,4.1.1 表达式语句,在表达式的后边加一个分号“;”就构成了表达式语句 ,如:,a=b+;,x=8;,y=7;,+k;,可以一行放一个表达式形成表达式语句,也可以一行放多个表达式形成表达式语句,这时每个表达式后面都必须带“;”号,另外,还可以仅由个分号“;”占一行形成一个表达式语句,这种语句称为空语句。,空语句在程序设计中通常用于两种情况:,(1)在程序中为有关语句提供标号,用以标记程序执行的位置。例如采用下面的语句可以构成一个循环。,repeat:;,;,goto repeat;,(2)在用while语句构成的循环语句后面加一个分号,形成一个不执行其它操作的空循环体。这种结构通常用于对某位进行判断,当不满足条件则等待,满足条件则执行。,【例4-1】下面这段子程序用于读取8051单片机的串行口的数据,当没有接收到则等待,当接收到,接收数据后返回,返回值为接收的数据。,#include ,char getchar( ),char c;,while(!RI); /当接收中断标志位RI为0则等待,当接收中断标志位,为1则结束等待,c=SBUF;,RI=0;,return(c);,4.1.2 复合语句,复合语句是由若干条语句组合而成的一种语句,在C51中,用一个大括号“ ”将若干条语句括在一起就形成了一个复合语句,复合语句最后不需要以分号“;”结束,但它内部的各条语句仍需以分号“;”结束。复合语句的一般形式为:,局部变量定义;,语句1;,语句2;,复合语句在执行时,其中的各条单语句按顺序依次执行,整个复合语句在语法上等价于一条单语句,因此在C51中可以将复合语句视为一条单语句。通常复合语句出现在函数中,实际上,函数的执行部分(即函数体)就是一个复合语句;复合语句中的单语句一般是可执行语句,此外还可以是变量的定义语句(说明变量的数据类型)。在复合语句内部语句所定义的变量,称为该复合语句中的局部变量,它仅在当前这个复合语句中有效。利用复合语句将多条单语句组合在起,以及在复合语句中进行局部变量定义是C51语言的一个重要特征。,4.2 C51程序基本结构与相关语句,4.2.1 C51的基本结构,一顺序结构,顺序结构是最基本、最简单的结构,在这种结构中,程序由低地址到高地址依次执行,图4-1给出顺序结构流程图,程序先执行A操作,然后再执行B操作。,A,B,图4-1顺序结构流程图,选择结构可使程序根据不同的情况,选择执行不同的分支,在选择结构中,程序先都对一个条件进行判断。当条件成立,即条件语句为“真”时,执行一个分支,当条件不成立时,即条件语句为“假”时,执行另一个分支。如图4-2,当条件S成立时,执行分支A,当条件P不成立时,执行分支B。,二选择结构,条件P,语句A,语句B,成立,不成,立,在C51中,实现选择结构的语句为if/else,if/else if语句。另外在C51中还支持多分支结构,多分支结构既可以通过if和else if语句嵌套实现,可用swith/case语句实现。,在程序处理过程中,有时需要某一段程序重复执行多次,这时就需要循环结构来实现,循环结构就是能够使程序段重复执行的结构。循环结构又分为两种:当(while)型循环结构和直到(do.while)型循环结构。,(1)当型循环结构,当型循环结构如图4-3,当条件P成立(为“真”)时,重复执行语句A,当条件不成立(为“假”)时才停止重复,执行后面的程序。,三循环结构,图4-3 当型循环结构,(2)直到型循环结构,直到型循环结构如图4-4,先执行语句A,再判断条件P,当条件成立(为“真”)时,再重复执行语句A,直到条件不成立(为“假”)时才停止重复,执行后面的程序。,条件P,语句A,成立,不成,立,图4-4 直到型循环结构,构成循环结构的语句主要有:while、do while、for、goto等。,4.2.2 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;,【例4-2】 if语句的用法。,(1)if (x!=y),printf(“x=%d,y=%dn”,x,y);,执行上面语句时,如果x不等于y,则输出x的值和y的值。,(2)if (xy),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 An”);,else if (score=80) printf(“Your result is an Bn”);,else if (score=70) printf(“Your result is an Cn”);,else if (score=60) printf(“Your result is an Dn”);,else printf(“Your result is an En”);,执行上面语句后,能够根据分数score分别打出A、B、C、D、E五个等级。,4.2.3 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可以共用一组执行语句。,【例4-3】 switch/case语句的用法。,对学生成绩划分为AD,对应不同的百分制分数,要求根据不同的等级打印出它的对应百分数。可以通过下面的switch/case语句实现。,switch(grade),case A: printf(“90100n”);break;,case B: printf(“8090n”);break;,case C: printf(“7080n”);break;,case D: printf(“6070n”);break;,case E: printf(“60n”);break;,default: printf(“error”n),4.2.4 while语句,while语句在C51中用于实现当型循环结构,它的格式如下:,while(表达式), 语句; /*循环体*/,while语句后面的表达式是能否循环的条件,后面的语句是循环体。当表达式为非0(真)时,就重复执行循环体内的语句;当表达式为0(假),则中止while循环,程序将执行循环结构之外的下一条语句。它的特点是:先判断条件,后执行循环体。在循环体中对条件进行改变,然后再判断条件,如条件成立,则再执行循环体,如条件不成立,则退出循环。如条件第一次就不成立,则循环体一次也不执行。,【例4-4】 下面程序是通过while语句实现计算并输出1100的累加和。,#include /包含特殊功能寄存器库,#include /包含I/O函数库,void main(void) /主函数,int i,s=0; /定义整型变量x和y,i=1;,SCON=0x52; /串口初始化,TMOD=0x20;,TH1=0xF3;,TR1=1;,while (i=100) /累加1100之和在s中,s=s+i;,i+;,printf(“1+2+3+100=%dn”,s);,while(1);,程序执行的结果:,1+2+3+100=5050,4.2.5 do while语句,do while语句在C51中用于实现直到型循环结构,它的格式如下:,do, 语句; /*循环体*/,while(表达式);,它的特点是:先执行循环体中的语句,后判断表达式。如表达式成立(真),则再执行循环体,然后又判断,直到有表达式不成立(假)时,退出循环,执行do while结构的下一条语句。do while语句在执行时,循环体内的语句至少会被执行一次。,【例4-5】 通过do while语句实现计算并输出1100的累加和。,#include /包含特殊功能寄存器库,#include /包含I/O函数库,void main(void) /主函数,int i,s=0; /定义整型变量x和y,i=1;,SCON=0x52; /串口初始化,TMOD=0x20;,TH1=0xF3;,TR1=1;,do /累加1100之和在s中,s=s+i;,i+;,while (i=100);,printf(“1+2+3,+100=%dn”,s);,while(1);,程序执行的结果:,1+2+3+100=5050,在C51语言中,for语句是使用最灵活、用得最多的循环控制语句,同时也最为复杂。它可以用于循环次数已经确定的情况,也可以用于循环次数不确定的情况。它完全可以代替while语句,功能最强大。它的格式如下:,for(表达式1;表达式2;表达式3),语句; /*循环体*/,for语句后面带三个表达式,它的执行过程如下:,(1)先求解表达式1的值。,(2)求解表达式2的值,如表达式2的值为真,则执行循环休中的语句,然后执行下一步(3)的操作,如表达式2的值为假,则结束for循环,转到最后一步。,(3)若表达式2的值为真,则执行完循环体中的语句后,求解表达式3,然后转到第四步。,(4)转到(2)继续执行。,(5)退出for循环,执行下面的一条语句。,在for循环中,一般表达式1为初值表达式,用于给循环变量赋初值;表达式2为条件表达式,对循环变量进行判断;表达式3为循环变量更新表达式,用于对循环变量的值进行更新,使循环变量能不满足条件而退出循环。,4.2.6 for语句,【例4-6】 用for语句实现计算并输出1100的累加和。,#include /包含特殊功能寄存器库,#include /包含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; /累加1100之和在s中,printf(“1+2+3+100=%dn”,s);,while(1);,程序执行的结果:,1+2+3+100=5050,在一个循环的循环体中允许又包含一个完整的循环结构,这种结构称为循环的嵌套。外面的循环称为外循环,里面的循环称为内循环,如果在内循环的循环体内又包含循环结构,就构成了多重循环。,在C51中,允许三种循环结构相互嵌套。,【例4-7】用嵌套结构构造一个延时程序。,void delay(unsigned int x),unsigned char j;,while(x-),for (j=0;j125;j+);,这里,用内循环构造一个基准的延时,调用时通过参数设置外循环的次数,这样就可以形成各种延时关系。,4.2.7 循环的嵌套,break和continue语句通常用于循环结构中,用来跳出循环结构。但是二者又有所不同,下面分别介绍。,1break语句,前面已介绍过用break语句可以跳出switch结构,使程序继续执行switch结构后面的一个语句。使用break语句还可以从循环体中跳出循环,提前结束循环而接着执行循环结构下面的语句。它不能用在除了循环语句和switch语句之外的任何其它语句中。,【例4-8】下面一段程序用于计算圆的面积,当计算到面积大于100时,由break语句跳出循环。,for (r=1;r100),break;,printf(“%fn”,area);,4.2.8 break和continue语句,continue语句用在循环结构中,用于结束本次循环,跳过循环体中continue下面尚未执行的语句,直接进行下一次是否执行循环的判定。,continue语句和break语句的区别在于:continue语句只是结束本次循环而不是终止整个循环;break语句则是结束循环,不再进行条件判断。,【例4-9】 输出100200间不能被3整除的数。,for (i=100;i=200;i+),if (i%3= =0),continue;,printf(“%d ”, i);,在程序中,当i能被3整除时,执行continue语句,结束本次循环,跳过printf()函数,只有能被3整除时才执行printf()函数。,2continue语句,return语句一般放在函数的最后位置,用于终止函数的执行,并控制程序返回调用该函数时所处的位置。返回时还可以通过return语句带回返回值。return语句格式有两种:,(1)return;,(2)return (表达式);,如果return语句后面带有表达式,则要计算表达式的值,并将表达式的值作为函数的返回值。若不带表达式,则函数返回时将返回一个不确定的值。通常我们用return语句把调用函数取得的值返回给主调用函数。,4.3.9 return语句,Any question?Thanks!,上机练习,:,1、各自建立工程,输入例4-4,4-5,4-6源程序,链接,编译,调试,用keil串行口窗口观察输出结果。,2、建立工程,将例4-2中的三个程序补充完整,链接,编译,调试。用keil串行口窗口观察输出结果。要求:(1)、输入x和y,如果x不等于y,输出x和y的值,相等则不输出。反过来,改动此程序,实现如果x等于y,输出x和y的值。 (2)、输入x和y,如x大于y成立,则把x送给最大值变量max,如x大于y不成立,则把y送给最大值变量max,输出max 。(3)、输入0100内的一个分数,输出相关的等级。,3、建立工程,将例4-3中的程序补充完整,链接,编译,调试,用keil串行口窗口观察输出结果。要求:输入相应的等级,输出对应的分数段。,上机练习,:,4、建立工程,将例4-8中的程序补充完整,链接,编译,调试,用keil串行口窗口观察输出结果。,要求:半径从1到10依次计算圆的面积然后输出,当计算到面积大于100时,由break语句跳出循环。,5、建立工程,将例4-9中的程序补充完整,链接,编译,调试,用keil串行口窗口观察输出结果。,要求:输出100200间不能被3整除的数。,作业:,6、编程实现,输入1,显示A,输入2,显示B,输入3,显示C,输入4,显示D,输入5,显示End,输入其他值,显示error。,7、输入2个int型数据,按由小到大顺序输出。,8、用三种循环结构的一种(while语句,do while语句,for语句)编程实现输出1到10的平方和,。,说明:,上机练习里面的作业部分,当次课不给指导,由同学自己完成。上机调试无误后下课前写在作业纸上上交。,上机练习,:,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!