版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章C51流程控制语句4.1表达式语句及复合语句4.1.1表达式语句在表达式的后边加一个分号“;”就构成了表达式语句,如:a=b++;x=8;y=7;++k;
可以一行放一个表达式形成表达式语句,也可以一行放多个表达式形成表达式语句,这时每个表达式后面都必须带“;”号,另外,还可以仅由—个分号“;”占一行形成一个表达式语句,这种语句称为空语句。
空语句在程序设计中通常用于两种情况:(1)在程序中为有关语句提供标号,用以标记程序执行的位置。例如采用下面的语句可以构成一个循环。repeat:;;gotorepeat;(2)在用while语句构成的循环语句后面加一个分号,形成一个不执行其它操作的空循环体。这种结构通常用于对某位进行判断,当不满足条件则等待,满足条件则执行。【例4-1】下面这段子程序用于读取8051单片机的串行口的数据,当没有接收到则等待,当接收到,接收数据后返回,返回值为接收的数据。#include<reg51.h>chargetchar(){charc;while(!RI);//当接收中断标志位RI为0则等待,当接收中断标志位为1则结束等待c=SBUF;RI=0;return(c);}4.1.2复合语句复合语句是由若干条语句组合而成的一种语句,在C51中,用一个大括号“{}”将若干条语句括在一起就形成了一个复合语句,复合语句最后不需要以分号“;”结束,但它内部的各条语句仍需以分号“;”结束。复合语句的一般形式为:{局部变量定义;语句1;语句2;}复合语句在执行时,其中的各条单语句按顺序依次执行,整个复合语句在语法上等价于一条单语句,因此在C51中可以将复合语句视为一条单语句。通常复合语句出现在函数中,实际上,函数的执行部分(即函数体)就是一个复合语句;复合语句中的单语句一般是可执行语句,此外还可以是变量的定义语句(说明变量的数据类型)。在复合语句内部语句所定义的变量,称为该复合语句中的局部变量,它仅在当前这个复合语句中有效。利用复合语句将多条单语句组合在—起,以及在复合语句中进行局部变量定义是C51语言的一个重要特征。4.2C51程序基本结构与相关语句4.2.1C51的基本结构一.顺序结构顺序结构是最基本、最简单的结构,在这种结构中,程序由低地址到高地址依次执行,图4-1给出顺序结构流程图,程序先执行A操作,然后再执行B操作。AB图4-1顺序结构流程图
选择结构可使程序根据不同的情况,选择执行不同的分支,在选择结构中,程序先都对一个条件进行判断。当条件成立,即条件语句为“真”时,执行一个分支,当条件不成立时,即条件语句为“假”时,执行另一个分支。如图4-2,当条件S成立时,执行分支A,当条件P不成立时,执行分支B。二.选择结构条件P语句A语句B成立不成立在C51中,实现选择结构的语句为if/else,if/elseif语句。另外在C51中还支持多分支结构,多分支结构既可以通过if和elseif语句嵌套实现,可用swith/case语句实现。在程序处理过程中,有时需要某一段程序重复执行多次,这时就需要循环结构来实现,循环结构就是能够使程序段重复执行的结构。循环结构又分为两种:当(while)型循环结构和直到(do...while)型循环结构。(1)当型循环结构当型循环结构如图4-3,当条件P成立(为“真”)时,重复执行语句A,当条件不成立(为“假”)时才停止重复,执行后面的程序。三.循环结构图4-3当型循环结构
(2)直到型循环结构直到型循环结构如图4-4,先执行语句A,再判断条件P,当条件成立(为“真”)时,再重复执行语句A,直到条件不成立(为“假”)时才停止重复,执行后面的程序。条件P语句A成立不成立图4-4直到型循环结构构成循环结构的语句主要有:while、dowhile、for、goto等。4.2.2if语句if语句是C51中的一个基本条件选择语句,它通常有三种格式:(1)if(表达式){语句;}(2)if(表达式){语句1;}else{语句2;}(3)if(表达式1){语句1;}elseif(表达式2){语句2;}elseif(表达式3){语句3;}……elseif(表达式n-1){语句n-1;}else{语句n;}【例4-2】if语句的用法。(1)if(x!=y)printf(“x=%d,y=%d\n”,x,y);执行上面语句时,如果x不等于y,则输出x的值和y的值。(2)if(x>y)max=x;elsemax=y;执行上面语句时,如x大于y成立,则把x送给最大值变量max,如x大于y不成立,则把y送给最大值变量max。使max变量得到x、y中的大数。(3)if(score>=90)printf(“YourresultisanA\n”);elseif(score>=80)printf(“YourresultisanB\n”);elseif(score>=70)printf(“YourresultisanC\n”);elseif(score>=60)printf(“YourresultisanD\n”);elseprintf(“YourresultisanE\n”);执行上面语句后,能够根据分数score分别打出A、B、C、D、E五个等级。4.2.3switch/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语句的的用法。对学生成绩绩划分为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)}4.2.4while语语句while语句在C51中用用于实现当当型循环结结构,它的的格式如下下:while(表达式式){语句句;}/*循环环体*/while语句后面面的表达式式是能否循循环的条件件,后面的的语句是循循环体。当当表达式为为非0(真真)时,就就重复执行行循环体内内的语句;;当表达式式为0(假假),则中中止while循环环,程序将将执行循环环结构之外外的下一条条语句。它它的特点是是:先判断断条件,后后执行循环环体。在循循环体中对对条件进行行改变,然然后再判断断条件,如如条件成立立,则再执执行循环体体,如条件件不成立,,则退出循循环。如条条件第一次次就不成立立,则循环环体一次也也不执行。。【例4-4】下下面程序是是通过while语语句实现计计算并输出出1~100的累加加和。#include<reg51.h>//包含含特殊功能能寄存器库库#include<stdio.h>//包含含I/O函函数库voidmain(void)//主函数{inti,s=0;//定义义整型变量量x和yi=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语语句dowhile语句句在C51中用用于实实现直直到型型循环环结构构,它它的格格式如如下::do{语语句句;}/*循环环体*/while(表表达式式);;它的特特点是是:先先执行行循环环体中中的语语句,,后判判断表表达式式。如如表达达式成成立((真)),则则再执执行循循环体体,然然后又又判断断,直直到有有表达达式不不成立立(假假)时时,退退出循循环,,执行行dowhile结结构的的下一一条语语句。。dowhile语语句在在执行行时,,循环环体内内的语语句至至少会会被执执行一一次。。【例4-5】通通过过dowhile语语句实实现计计算并并输出出1~100的的累加加和。。#include<reg52.h>//包含含特殊殊功能能寄存存器库库#include<stdio.h>//包含含I/O函函数库库voidmain(void)//主函函数{inti,s=0;//定义义整型型变量量x和和yi=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);}程序执执行的的结果果: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.6for语句【例4-6】用用for语句句实现计计算并输输出1~100的累加加和。#include<reg52.h>//包含含特殊功功能寄存存器库#include<stdio.h>//包含含I/O函数库库voidmain(void)//主主函数{inti,s=0;//定义整整型变量量x和ySCON=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);}程序执行行的结果果:1+2+3………+100=5050在一个循循环的循循环体中中允许又又包含一一个完整整的循环环结构,,这种结结构称为为循环的的嵌套。。外面的的循环称称为外循循环,里里面的循循环称为为内循环环,如果果在内循循环的循循环体内内又包含含循环结结构,就就构成了了多重循循环。在C51中,允允许三种种循环结结构相互互嵌套。。【例4-7】用用嵌套结结构构造造一个延延时程序序。voiddelay(unsignedintx){unsignedcharj;while(x--){for(j=0;j<125;j++);}}这里,用用内循环环构造一一个基准准的延时时,调用用时通过过参数设设置外循循环的次次数,这这样就可可以形成成各种延延时关系系。循循环的的嵌套break和continue语句句通常用用于循环环结构中中,用来来跳出循循环结构构。但是是二者又又有所不不同,下下面分别别介绍。。1.break语句前面已介介绍过用用break语语句可以以跳出switch结结构,使使程序继继续执行行switch结构后后面的一一个语句句。使用用break语语句还可可以从循循环体中中跳出循循环,提提前结束束循环而而接着执执行循环环结构下下面的语语句。它它不能用用在除了了循环语语句和switch语语句之外外的任何何其它语语句中。。【例4-8】下下面一段段程序用用于计算算圆的面面积,当当计算到到面积大大于100时,,由break语句跳跳出循环环。for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break;printf(“%f\n””,area);}和和continue语语句continue语句句用在循循环结构构中,用用于结束束本次循循环,跳跳过循环环体中continue下面面尚未执执行的语语句,直直接进行行下一次次是否执执行循环环的判定定。continue语句句和break语句的的区别在在于:continue语句句只是结结束本次次循环而而不是终终止整个个循环;;break语语句则是是结束循循环,不不再进行行条件判判断。【例4-9】输输出出100~200间不不能被3整除的的数。for(i=100;i<=200;i++){if(i%3==0)continue;printf(“%d””,i);}在程序中中,当i能被3整除时时,执行行continue语语句,结结束本次次循环,,跳过printf(()函数数,只有有能被3整除时时才执行行printf()函函数。2.continue语句return语语句一般般放在函函数的最最后位置置,用于于终止函函数的执执行,并并控制程程序返回回调用该该函数时时所处的的位置。。返回时时还可以以通过return语语句带回回返回值值。return语句句格式有有两种::(1)return;;(2)return(表达达式);;如果return语句句后面带带有表达达式,则则要计算算表达式式的值,,并将表表达式的的值作为为函数的的返回值值。若不不带表达达式,则则函数返返回时将将返回一一个不确确定的值值。通常常我们用用return语句把把调用函函数取得得的值返返回给主主调用函函数。4.3.9return语句Anyquestion??Thanks!!上机练习习:1、各自自建立工工程,输输入例4-4,,4-5,4-6源程程序,链链接,编编译,调调试,用用keil串行行口窗口口观察输输出结果果。2、建立立工程,,将例4-2中中的三个个程序补补充完整整,链接接,编译译,调试试。用keil串行口口窗口观观察输出出结果。。要求::(1))、输入入x和y,如果果x不等等于y,,输出x和y的的值,相相等则不不输出。。反过来来,改动动
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年舞蹈表演艺术人才培养机构合同模板2篇
- 2024年餐馆厨师劳动合同3篇
- 2025年度网络安全监测合同范本共十七项安全防护措施3篇
- 2024年限期土地开发承包协议
- 1《义务教育数学课程标准(2022年版)》自测卷
- 2024年采购合作合同范本一
- 2024年节能打印机销售及售后服务合同3篇
- 2025年度住宅防盗门个性化定制合同3篇
- 2024年珠海房产买卖合同3篇
- 2025年度船舶建造项目股权转让与工程监理合同3篇
- SVG无功补偿培训
- 新生儿听力筛查技术规范卫生部2010年版
- 大猫英语分级阅读 六级1 Arthur's Fantastic Party课件
- SCA自动涂胶系统培训讲义
- LEC法取值标准对照表
- 铸造工厂设备管理(共21页)
- 华中数控车床编程及操作
- 农产品收购台账(登记经营单位及个体经营者投售的农产品
- 分红保险精算规定
- 名词性从句引导词表格
- 3、起重工、焊工、电工安全技术交底
评论
0/150
提交评论