资源描述
,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Click to edit Master title style,单片机汇编与,C,语言程序设计,工程训练中心,1,单片机汇编与C语言程序设计工程训练中心1,单片机汇编与,C,语言程序设计,C51,数据与计算,2,C51,函数,4,MCS-51,汇编指令系统,3,1,C51,构造数据类型,3,3,C51,模块化流程控制语句,5,2,单片机汇编与C语言程序设计C51数据与计算2C51函数4MC,第一章,MCS-51,汇编指令系统,寻址方式,3,1.1,指令说明,1.2,3,第一章 MCS-51汇编指令系统寻址方式31.1指令说明1,1.1,寻址方式,4,1.1 寻址方式4,1.2,指令说明,1,、数据传送指令,MOV,,,MOVC,,,MOVX,,,XCH,,,PUSH,,,POP,2,、转移指令,JMP,,,CJNE,,,JC,,,JB,,,CALL,,,RET,3,、算数运算指令,ADD,,,ADDC,,,SUBB,,,MUL,,,DIV,,,INC,,,DEC,4,、逻辑运算指令,ANL,,,ORL,,,XRL,,,CPL,,,CLR,,,SETB,5,1.2 指令说明1、数据传送指令5,第二章,C51,数据与计算,位变量的,C51,定义,2.4,C51,数据类型及在,MCS-51,中存储方式、存储结构,3,2.1,C51,单片机并行接口的定义,3,2.3,MCS-51,特殊功能寄存器(,SFR,)的定义,2.2,C51,运算符、表达式及其规则,2.5,6,第二章 C51数据与计算位变量的C51定义2.4C51数据,2.1.1 C51,数据类型,1,、,C51,的数据类型包括:,位型(,bit,)、无符号字符型(,unsigned char,)、有符号字符型(,signed char,)、无符号整型(,unsigned int,)、有符号整型(,signed int,)、无符号长整型(,unsigned long int,)、有符号长整型(,signed long int,)、浮点型(,float,)和指针类型等,7,2.1.1 C51数据类型1、C51的数据类型包括:7,2.1.1 C51,数据类型,表,1,、,C51,的数据类型,8,2.1.1 C51数据类型表1、C51的数据类型8,2.1.2,C51,数据在,MCS-51,中的存储方式,1,、位变量(,bit,),位变量被定为在,RAM,的位寻址空间中;,2,、字符变量(,char,),字符变量即长度为一个字节,8,位,最适合,MCS-51,单片机,,MCS-51,单片机每次可处理,8,位数据;,3,、整型变量(,INT,),整型变量长度,16,位,占,2,个字节;,4,、浮点型变量(,Float,),浮点型变量,32,位,占,4,个字节;,9,2.1.2C51数据在MCS-51中的存储方式1、位变量(b,2.1.2,C51,数据在,MCS-51,中的存储方式,1,、在编程时,如果只强调速度,而不进行负数的运算,最好采用无符号的格式(,unsigned,),;,2,、无论何时,应尽量使用无符号字符型变量,因为它能直接被,MCS-51,所接受,基于同样的原理,也尽量使用位变量;有符号字符变量虽也占用一个字节,但需要进行额外的操作来测试代码的符号位,这无疑会降低代码的效率;,10,2.1.2C51数据在MCS-51中的存储方式1、在编程时,,2.1.2,C51,数据在,MCS-51,中的存储方式,3,、使用简化形式定义数据类型,其方法是在源程序开头使用,#define,语句自定义简化的类型标示符;例如:,#define uchar unsigned char,#define uint unsigned int,这样在编程时就可以用,uchar,代替,unsigned char,,用,uint,代替,unsigend int,来定义变量了。,11,2.1.2C51数据在MCS-51中的存储方式3、使用简化形,2.1.3,C51,的数据存储类型,表,2 C51,存储类型与存储空间对应关系,12,2.1.3C51的数据存储类型表2 C51存储类型与存储空间,2.1.3,C51,的数据存储类型,表,2 C51,存储类型及其数据长度和值域,存储类型,长度,(bit),长度,(byte),值域范围,data,8,1,0255,idata,8,1,0255,pdata,8,1,0255,xdata,16,2,065 535,code,16,2,065 535,13,2.1.3C51的数据存储类型表2 C51存储类型及其数据长,2.1.3,C51,的数据存储类型,1,、带存储类型的变量定义的一般格式如下:,数据类型 存储类型 变量名,char data var1;,bit bdata flag;,float idata x,y,z;,unsigned int pdata var2;,14,2.1.3C51的数据存储类型1、带存储类型的变量定义的一般,2.1.3,C51,的数据存储类型,表,3 C51,存储模式说明,15,2.1.3C51的数据存储类型表3 C51存储模式说明15,2.2,MCS-51,特殊功能寄存器(,SFR,)的定义,1,、除了程序计数器,PC,和,4,组个通用寄存器组外,其他所有的寄存器都属于特殊功能寄存器(,SFR,),分散在片内的高,128,字节中,地址为,80H-FFH,;,SFR,中有,11,个寄存器具有位寻址功能,可以单独对每一位进行操作;,2,、为了能直接访问这些,SFR,,,C51,提供了一种自主的定义方式(定义方法与并准,C,语言不兼容),定义的一般格式如下:,sfr name=int constant,;,16,2.2MCS-51特殊功能寄存器(SFR)的定义1、除了程序,2.2,MCS-51,特殊功能寄存器(,SFR,)的定义,3,、“,sfr”,是定义语句的关键字,其后必跟一个,MCS-51,单片机真实存在的特殊功能寄存器名;“,=”,后必须是一个整型常数,不允许带有运算符的表达式,是特殊功能寄存器名相对应的字节地址;这个常数的范围必须是,SFR,的地址范围内,也就是,80H-FFH,之间;,例如:,sfr SCON=0 x98;/,串口控制寄存器,/,17,2.2MCS-51特殊功能寄存器(SFR)的定义3、“sfr,2.2,MCS-51,特殊功能寄存器(,SFR,)的定义,4,、特殊功能寄存器(,SFR,)的命名和定义被放在“*,.H”,的头文件里面定义保存好,以便以后调用;,5,、对于位寻址的,SFR,中的位,使用“,sbit”,关键字来定义(不与标准,C,语言兼容);,第一种格式:,sbit name=sfrnameint cont,第二种格式:,sbit name=int contint cont,第三种格式:,sbit name=int constant,18,2.2MCS-51特殊功能寄存器(SFR)的定义4、特殊功能,2.2,MCS-51,特殊功能寄存器(,SFR,)的定义,例如:,sfr PSW=0 xD0;sbit OV=PSW2;,sbit OV=0 xD02;,sbit OV=0 xD2;(,绝对地址,),19,2.2MCS-51特殊功能寄存器(SFR)的定义例如:sfr,2.3C51,单片机并行接口的定义,1,、,MCS-51,的并行,IO,接口除了芯片上的,4,个,IO,口(,P0P3,)外,还可以在片外扩展,IO,口;,MCS-51,的单片机的,IO,口与数据存储器统一编址,即把一个,IO,口当作数据存储器的一个单元来处理;,通常将片内和片外,IO,口统一在一个头文件里面进行定义;也可以在主程序的开头进行定义;,片内定义:,sfr P0=0 x80,;,20,2.3C51单片机并行接口的定义1、MCS-51的并行IO接,2.3C51,单片机并行接口的定义,对于片外扩展的,IO,口,则根据硬件译码地址,将其视为片外数据存贮器的一个单元;使用,#define,进行定义;例如:,#include,#define PORTA XBYTE0 xFFC0,absacc.h,是,51,绝对地址访问函数的头文件,将,PORTA,定义为外部,IO,口,地址为,FFC0H,,长度,8,位;,21,2.3C51单片机并行接口的定义对于片外扩展的IO口,则根据,2.4,位变量的,C51,定义,对于位变量的定义,定义位变量后,就可以用定义了的变量来表示,MCS-51,的位寻址单元;,位变量定义一般格式如下:,位类型标示符(,bit,)位变量名;,bit direction_bit,;,22,2.4位变量的C51定义对于位变量的定义,定义位变量后,就可,2.5C51,运算符、表达式及其规则,1,、,C51,算术运算符:,+,、,-,、*、,/,、,%,乘除、求余运算符优先级高于加减,强制类型转换运算符(类型名)(表达式);,2,、,C51,关系运算符、表达式及优先级,=!=,前,4,个优先级相同大于后,2,个,关系运算符低于算术运算符,关系运算符高于赋值运算符,23,2.5C51运算符、表达式及其规则1、C51算术运算符:+、,2.5C51,运算符、表达式及其规则,3,、,C51,逻辑运算符、表达式及优先级,“,&”,逻辑与,“,|”,逻辑或,“!”逻辑非,4,、,C51,位操作及其表达式,&,按位与,,按位异或,,位左移,,|,按位或,,按位取反,,位右移;,移位运算不会改变原变量本身;,24,2.5C51运算符、表达式及其规则3、C51逻辑运算符、表达,2.5C51,运算符、表达式及其规则,5,、自增减运算符,符合运算符及表达式,自增减运算符:,+i,,,-i,(使用前加减,1,),i+,,,i-,(使用后再加减,1,),符合运算符:,+=,,,-=,,*,=,,,/=,,,%=,,,=,,,&=,,,=,,,|=,;采用符合运算符的目的是为了简化程序,提高,C,程序编译效率;,25,2.5C51运算符、表达式及其规则5、自增减运算符,符合运算,第三章,C51,构造数据类型,结构,3.4,基于存储器的指针,3,3.1,指针,3,3.3,数组,3.2,26,第三章 C51构造数据类型结构3.4基于存储器的指针33.,3.1,基于存储器的指针,基于存储器的指针以存储器类型为参量,它在编译时才被确定;因此,为指针选择存储器的方法可以省掉,以便这些指针的长度为一个字节(,idata*,,,data*,,,pdata*,)或,2,个字节(,code*,,,xdata*,),.,编译时,这类操作一般被“行内”编码,而无须进行库调用;,基于存储器的指针定义举例:,char xdata*px,;,27,3.1基于存储器的指针基于存储器的指针以存储器类型为参量,它,3.1,基于存储器的指针,在,xdata,存储器中定义一个指向字符型(,char,)的指针变量,px,。指针自身在默认的存储区(决定于编译模式);长度为两个字节(值为,0-0 xFFFF,);,char xdata*data pdx,;,data char xdata*pdx,;,除了明确定义指针位于,MCS-51,内部存储区(,data,)外,其他与上例相同,与编译模式无关,28,3.1基于存储器的指针在xdata存储器中定义一个指向字符型,3.2,数组,1,、一维数组的定义方式:,类型说明符 数组名,整型表达式,int idata a6=;,2,、二维数组的定义方式:,类型说明符 数组名,常量表达式,常量表达式,存取方式,顺序,按行存取,先存取第一行,依次下来;,29,3.2数组1、一维数组的定义方式:29,3.2,数组,3,、字符数组,char a10=B,E,I,J,I,N,G,0,;,用字符串直接给字符数组置初值,char a10=“BEI JING”,;,(,编译器会自动在字符末尾加上结束符,0),,因此,字符数组的元素数目一定要比字符多一个;,二维字符数组,第一个下标是字符串个数,第二个下标是每个字符串长度:,例如:,uchar code msg17=;,第二个下标个数必须给定;,30,3.2数组3、字符数组30,3.3,指针(重点内容),1,、首先了解数据在数据中是如何存贮和读取的?,C,编译器在编译时会给一个变量在内存中分配相应的内存空间,变量名,数据标号,变量值,数据的内容,内存单元地址,编号,内存单元内容,内存单元中的数据,31,3.3指针(重点内容)1、首先了解数据在数据中是如何存贮和读,3.3,指针(重点内容),2,、变量名,内存单元地址,变量值,内存单元中的内容,3,、内存中变量名,a,b,c,是不存在的,对变量名的存取通过地址进行;,两种存取方式:,“直接访问”,找地址,取变量值;,“间接访问”,找存放,a,的地址的内存单元的地址;取出变量,a,的地址,然后从找到的,a,的地址中再取数据(变量值);,32,3.3指针(重点内容)2、变量名内存单元地址32,3.3,指针(重点内容),4,、学好指针必须弄清“变量的指针”和“指向变量的指针变量”(指针变量),变量的指针就是变量的地址;,指向变量的指针变量,一个变量专门用来存放另一个变量的地址,则该变量称为指针变量;,33,3.3指针(重点内容)4、学好指针必须弄清“变量的指针”和“,3.3,指针(重点内容),5,、指针变量的定义,类型识别符 *指针变量名,int *ap,;,float *pointer,;,指针变量的引用是通过取地址运算符,&,来实现,ap=(ap,为指针变量,,a,为变量,,&,为取地址运算符,),34,3.3指针(重点内容)5、指针变量的定义34,3.3,指针(重点内容),6,、通过指针和指针变量来对内存进行间接访问,就需要用到指针运算符“*”;,例如:,x=a,;,x=*ap(,这里*号代表指针运算符,),;这个“*”指针运算符,而非类型说明符,注意区分;,例如:,int*ap(,这里*号代表类型说明符,),;,int a,;,*,ap=a,;,&*ap=&a,;,*,ap+=a+,;,35,3.3指针(重点内容)6、通过指针和指针变量来对内存进行间接,3.3,指针(重点内容),7,、数组指针和指向数组的指针变量,数组的指针,=,数组的起始地址;,指向数组的指针变量;,例如:,int a10,;,int *app,;,app=&a0,;,app=a,;,(C,语言规定数组名,a,可以代表数组,a10,的首地址,实际上述两个等价,),;,36,3.3指针(重点内容)7、数组指针和指向数组的指针变量36,3.3,指针(重点内容),也可以将指针变量的定义和引用放在一个语句中完成,int*app=,int*app=a;,37,3.3指针(重点内容)也可以将指针变量的定义和引用放在一个语,3.3,指针(重点内容),通过通用指针引用数组元素;,app=&a0,,则,app+i=a+i,是数组元素,ai,的地址;,*,(app+i),或*,(a+i),是,app+i,或,a+i,所指向的数组元素,即,ai,;,指针变量可带下标:,appi=*(app+i),;,app+1,是指向数组首地址的下一个元素,38,3.3指针(重点内容)通过通用指针引用数组元素;38,3.3,指针(重点内容),指针变量的运算:,1,)、,p+,,,p,指向下一个单元;,2,)、*,p+=*(p+),等价,/+,运算符与*指针运算符优先级相同,结合方向为自右向左,/,;其作用是首先得到,p,指向的变量的值,(,即*,p),,然后执行,p,自加运算,指向下一个地址;,3,)、,(*p)+,,所指向的元素值加,1,,而非指针变量加,1,;,39,3.3指针(重点内容)指针变量的运算:39,3.3,指针(重点内容),8,、指向多维数组的指针和指针变量,pa34,;,p=a,;,p+1=a+1,;,p+2=a+2,指向第几行的首地址;,*,(p+1)+3=&a13,;指向,a13,的地址,*,(*(p+1)+3)=a13,;表示,a13,的值,*,(p+i)+j,;相当于,&aij,;第,i,行第,j,列地址,*,(*(p+i)+j),相当于,aij,;,40,3.3指针(重点内容)8、指向多维数组的指针和指针变量40,3.4,结构(重点内容),1,、结构的定义与应用,将不同类型的数据组成一个有机的整体,而组合在一起的数据又相互关联;,一个结构类型的一般形式为:,struct,结构名,结构成员说明,;,结构类型定义完以后,还需要定义结构的变量,41,3.4结构(重点内容)1、结构的定义与应用41,3.4,结构(重点内容),2,、结构变量的定义有,2,种:,1),先定义结构类型,再定义结构变量名;,struct date,int month;,int day;,;,date date1,date2;,(定义结构变量名),42,3.4结构(重点内容)2、结构变量的定义有2种:42,3.4,结构(重点内容),2),定义结构类型的同时定义该结构变量;,struct date,int month;,int day;,date1,date2;,(定义结构变量名),43,3.4结构(重点内容)43,3.4,结构(重点内容),3,对结构变量的引用遵循下述规则:,1),只能对结构类型变量进行赋值、存取和运算,结构不能作为一个整体参与赋值、存取和运算,不能整体作为函数的参数或函数返回值,(,因为,C,编译器不对抽象的结构类型分配内存空间,只对具体的结构类型变量分配内存空间,),;,2),对多级结构变量,只有最低一级的成员才能参加赋值、存取和运算;,44,3.4结构(重点内容)44,3.4,结构(重点内容),3,对结构变量的引用遵循下述规则:,3),成员运算符,引用方式为:,结构变量名,.,成员名,(,成员运算符“,.”),;,date1.year=1996;,结构类型变量的成员本身又属于一个结构类型变量,则需用若干个成员运算符“,.”,或“,-”,clerk1.birthday.year=1957,;,45,3.4结构(重点内容)45,3.4,结构(重点内容),4,、结构数组,结构数组的一般定义举例:,struct date,int month;,int day;,struct date date110;,引用例如:,date15.month=0 x04;,46,3.4结构(重点内容)4、结构数组46,3.4,结构(重点内容),5,、指向结构类型数据的指针,指向结构体变量的指针变量的一般形式:,struct,结构类型名 *指针变量名,struct msg1,uint lnk;,uchar len,flg;,;,struct msg1 *msg;,void message(struct msg1 *m);,47,3.4结构(重点内容)5、指向结构类型数据的指针47,3.4,结构(重点内容),6,、指向结构数组的指针变量,struct,uint lnk;,uchar len,flg,nod;,msg14;,struct msg1 *p;,void sendmessage(struct msg1 *m);,48,3.4结构(重点内容)6、指向结构数组的指针变量48,3.4,结构(重点内容),main(),struct msg1 *p;,for(p=msg1;plen=8;,p-flg=0;,sendmessage(p);/*,传递结构数组的指针变量*,/,49,3.4结构(重点内容)main()49,3.4,结构(重点内容),对指针变量,p,做几点说明:,1,、,(*p).flg,与,p-flg,和,msg0.flg,三者等价,2,、,p+1,是指指针,p,指向数组结构,msg0,的下一个元素,msg1,的首地址;,3,、指向运算符,-,的优先级高于自加运算符,+,(+p)-flg;(p+)-flg;,p-flg+;+p-flg;(,区分,),50,3.4结构(重点内容)对指针变量p做几点说明:50,3.4,结构(重点内容),对指针变量,p,做几点说明:,(+p)-flg;,先使,p,自加,1,指向,msg1,的首地址。然后得到它指向的,msg11.flg,的成员值;,(p+)-flg;,先得到,msg10.flg,的值,然后,p,自加,1,指向,msg11,的首地址,p-flg+;,先得到,msg10.flg,成员值,使用完后将,msg10,的值加,1,;,+p-flg;,先将,msg10.flg,成员值加,1,,再使用;,51,3.4结构(重点内容)对指针变量p做几点说明:51,第四章 函 数,数组、指针作为函数的参数,4.4,函数的分类、定义,3,4.1,函数的调用,3,4.3,函数的参数和函数值,4.2,52,第四章 函 数数组、指针作为函数的参数4.4,4.1,函数的分类、定义,1,、函数的分类,1),标准库函数,由,C,编译系统的函数库提供,2),用户自定义函数,根据用户自身需要编写的函数,53,4.1函数的分类、定义1、函数的分类53,4.1,函数的分类、定义,2,、函数的定义,1),无参数函数的定义:,返回值类型标识符 函数名,(),函数体语句,无参数函数一般不带返回值,因此函数返回值类型标识符可以省略。如果不带,默认值是,int,类型,54,4.1函数的分类、定义2、函数的定义54,4.1,函数的分类、定义,2,、函数的定义,2),有参数函数的定义:,返回值类型标识符 函数名,(,形式参数列表,),形式参数说明;,函数体语句,55,4.1函数的分类、定义2、函数的定义55,4.1,函数的分类、定义,2,、函数的定义,3),空函数的定义:,返回值类型标识符 函数名,(),56,4.1函数的分类、定义2、函数的定义56,4.2,函数的参数和函数值,1,、函数之间的参数传递,由函数调用时,主调函数的实参与被调函数的形参之间进行数据传递来实现;,形参与实参的类型必须一致,否则会发生类型不匹配的错误;,形参在被调用前,不占用实际内存;,57,4.2函数的参数和函数值1、函数之间的参数传递,由函数调用时,4.2,函数的参数和函数值,2,、函数的返回值,函数的返回值是通过函数中,return,语句获得的,一个函数可以有一个以上的,return,语句,但必须在选择结构中使用,(if),;,return,语句中的返回值也可以是一个表达式;,函数的返回值类型一般在定义函数时,用返回类型标识符指定;,有时为了明确表示被调用函数不带返回值,可以将该函数定义为“无类型”,void,;,58,4.2函数的参数和函数值2、函数的返回值58,4.3,函数的调用,1,、函数调用的一般形式:,函数名,(,实际参数列表,),;,对于有参数函数,若包含多个实际参数,应将参数间用逗号隔开;形参与实参数目一致;,如调用是无参数函数,则实际参数表可意省略,函数名后必须有一对空括号;,59,4.3函数的调用1、函数调用的一般形式:59,4.3,函数的调用,2,、函数调用的方式:,1),函数调用语句,即把被调函数名作为主调函数的一个语句;,print_message();,2),函数结果作为表达式的一个运算对象;,result=2*gcd(a,b);,3),函数参数,被调函数作为另一个函数的实际参数;,m=max(a,gcd(u,v);,60,4.3函数的调用2、函数调用的方式:60,4.3,函数的调用,3,、对被调用函数的说明,1),被调用函数必须是已经存在的函数,(,库函数或用户自定义函数,),2),如果程序中使用了库函数,或不在同一文件中另外的自定义函数,则应该在程序开头使用,#include,包含语句,将所有函数信息包括到程序中;,61,4.3函数的调用3、对被调用函数的说明61,4.3,函数的调用,3,、对被调用函数的说明,3),被调函数的定义放在主调函数之前,就可以不必另作类型说明;,62,4.3函数的调用3、对被调用函数的说明62,4.4,数组、指针作为函数的参数,1,、用函数指针变量调用函数,每一个函数都占用一段内存单元,它们有一个起始地址,使用指针变量,让它指向函数入口地址,让它来访问函数;,63,4.4数组、指针作为函数的参数1、用函数指针变量调用函数63,4.4,数组、指针作为函数的参数,例如:,main(),int j,c;,int (*p)();/*,函数指针变量定义*,/,p=factorial;,for(j=0;jnumber);,73,4.4数组、指针作为函数的参数 void s,4.4,数组、指针作为函数的参数,main(),void show();/*,函数申明*,/,struct record note;,note.number=3361;,show(,¬e,是,struct record,结构变量,note,的地址;,74,4.4数组、指针作为函数的参数 main()74,4.4,数组、指针作为函数的参数,当调用,show(),函数时,地址,¬e,被传递给,show,的形式参数,p,,,p,是一个指向,struct record,类型结构变量的指针,这样,p,指向,note,,在,show(),函数中,p,指向结构体变量的各个成员;,75,4.4数组、指针作为函数的参数当调用show()函数时,地,第五章,C51,模块化流程控制语句,顺序结构,3,5.1,循环结构,3,5.3,选择结构,5.2,76,第五章 C51模块化流程控制语句顺序结构35.1循环结构35,5.1,顺序结构,1,、,C,语言是一种结构化的编程语言,结构化的语言是一种不允许交叉的流程;必须是有严格的结构化;,2,、,C,语言的基本单元是模块,一般只有一个入口和一个出口,结构化语言由若干个模块组成,每个模块包含若干个结构,每个基本结构中由包含若干条语句;,77,5.1顺序结构1、C语言是一种结构化的编程语言,结构化的语言,5.1,顺序结构,3,、顺序结构是一种最基本,最简单的编程结构,这种结构中,程序由低地址向高地址顺序执行指令代码;,图,1,顺序结构,78,5.1顺序结构3、顺序结构是一种最基本,最简单的编程结构,这,5.2,选择结构,1,、选择结构,程序首先对一条语句进行测试。当条件为真时,执行一个方向上的程序流程;程序为假时,执行另一个方向上的程序流程,而对有些分支语句来说可能什么都不做;,79,5.2选择结构1、选择结构,程序首先对一条语句进行测试。当条,5.2,选择结构,图,2,一般型的选择结构,80,5.2选择结构图2 一般型的选择结构80,5.2,选择结构,1),串行多分支结构,(if else,语句,),,串行多分支结构中,以单选择结构中的某一分支方向作为串行多分支方向继续进行选择结构的操作;,一种,if else,语句;,另一种,if else if,语句(语句嵌套的方式),81,5.2选择结构1)串行多分支结构(if else语句),串行,5.2,选择结构,条件选择语句用法,1.if(,表达式,),语句,;,if(p1!=0)c=20;,2.if(,表达式,),语句,1;else,语句,2;,if(p1!=0),c=20;,else,c=0;,82,5.2选择结构条件选择语句用法82,5.2,选择结构,3.if(,表达式,1),语句,1;,else if(,表达式,2),语句,2;,else if(,表达式,m),语句,n;,else,语句,m;,83,5.2选择结构3.if(表达式1)语句1;83,5.2,选择结构,举例,if(a=1)c=0;,else if(a=2)c=20;,else if(a=3)c=30;,else c=0;,84,5.2选择结构举例84,5.2,选择结构,if,语句的嵌套:,if(),if(),语句,1;,else(),语句,2;,else,if(),语句,1;,else(),语句,2;,85,5.2选择结构 if语句的嵌套:85,5.2,选择结构,2),并行多分支结构,并行多分支结构中,根据判断条件的不同,而选择不同的操作中的一种来执行;,例如,switch-case,语句,86,5.2选择结构2)并行多分支结构,并行多分支结构中,根据判断,5.2,选择结构,图,3,串行的多分支结构,图,4,并行的多分支结构,87,5.2选择结构图3 串行的多分支结构图4 并行的多分支结构8,5.2,选择结构,例如,switch-case,语句,switch(,表达式,),case,常量表达式,1:,语句,1;break;,case,常量表达式,2:,语句,2;break;,case,常量表达式,n:,语句,n;break;,default:,语句,n+1;break;,88,5.2选择结构88,5.3,循环结构,1,、循环结构的常见状态,包括当型,(while),和直到型,(do-while),结构;,1),当型,(while),是在每一轮循环的开始处执行条件判断,当条件满足时继续执行循环体中的语句,否着跳出循环;,2),直到型,(while),是先执行循环体中的语句,然后在循环结束处进行条件判断,如果条件满足继续开始新一轮循环;直到条件不满足跳出循环;,89,5.3循环结构1、循环结构的常见状态,包括当型(while),5.3,循环结构,2,、,for,语句是循环语句中最复杂最灵活的一种;可用于给定的循环次数,或是次数不定的情况;,for(,表达式,1;,表达式,2;,表达式,3),语句;,/*,循环体*,/,第一部分为初始化表达式,第二部分对结束循环进行测试,第三部分为尺度增量;,90,5.3循环结构2、for语句是循环语句中最复杂最灵活的一种;,5.3,循环结构,具体的执行过程为:,1.,先对表达式,1,赋初值,进行初始化;,2.,判断表达式,2,是否满足给定的循环条件,若满足,则执行循环体内语句,然后执行后续语句;,3.,若表达式,2,为真,执行指定完循环语句后,求解表达式,3,;,4.,重复第,2,步直到条件不满足跳出循环;,91,5.3循环结构具体的执行过程为:91,
展开阅读全文