1、第第6次课主要内容:次课主要内容:编程语言编程语言Keil C51 C51语言的数据类型(背住)语言的数据类型(背住)数据类型的定义方法(背住)数据类型的定义方法(背住)数据类型编程(掌握)数据类型编程(掌握)第第3 3章章 C51C51语言编程基础语言编程基础1 1)机器语言)机器语言定义:处理器能直接执行的二进制代码定义:处理器能直接执行的二进制代码特点:效率高、但不易于使用特点:效率高、但不易于使用10110110 00000000 10110101 00000000ADD AADD A,#19#193.1 3.1 编程语言编程语言KeilKeil C51 C51简介简介1、编程语言、编
2、程语言2 2)汇编语言)汇编语言 定义:以助记符的形式表示机器语言定义:以助记符的形式表示机器语言 特点:速度快、体积小、但依赖于硬件体系特点:速度快、体积小、但依赖于硬件体系3)高级语言)高级语言独立于机器、面向过程的、接近于人的自然语言。独立于机器、面向过程的、接近于人的自然语言。语言:语言:FORTRAN、C语言、语言、JAVA特点:与硬件无关、易于交流和使用、运行效率低特点:与硬件无关、易于交流和使用、运行效率低X=X+1;X=X+1;编译器编译器链接器链接器X=X+1;程序员程序员1001001010110010高级语言程序高级语言程序机器码机器码单片机如何执行程序指令?单片机如何执
3、行程序指令?KeilKeil C51 C51语言是在标准语言是在标准C C的基础上,针对的基础上,针对5151单片机的硬件特点进行单片机的硬件特点进行扩展,并向扩展,并向5151单片机上移植的高效、简洁的实用高级语言。单片机上移植的高效、简洁的实用高级语言。与汇编语言相比的特点:与汇编语言相比的特点:(1)可读性好)可读性好。(2)可模块化开发。)可模块化开发。(3)可移植性好。)可移植性好。(4)生成的代码效率较低。)生成的代码效率较低。2 2、KeilKeil C51 C51语言简介语言简介对于对于5151单片机,目前广泛使用的是单片机,目前广泛使用的是KeilKeil C51 C51语言
4、,简称语言,简称C51C51语言。语言。3 3、C51C51与标准与标准C C的区别的区别(1 1)库函数的不同。库函数的不同。例如库函数例如库函数printfprintf和和scanfscanf,在标准,在标准C C中,这中,这两个函数通常用于屏幕打印和接收字符,而在两个函数通常用于屏幕打印和接收字符,而在KeilKeil C51 C51中,主要中,主要用于串行口数据的收发。用于串行口数据的收发。(3 3)C51C51的变量存储模式与标准的变量存储模式与标准C C中的变量存储模式不一样。中的变量存储模式不一样。标准标准C C是在通用计算机中只有一个程序和数据统一寻址的内存空间。是在通用计算机
5、中只有一个程序和数据统一寻址的内存空间。5151单片机存储区可分为内部数据存储区、外部数据存储区以及程序单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。存储区。(4 4)标准标准C C语言没有处理单片机中断的方法。语言没有处理单片机中断的方法。C51C51中有专门处理中断的中断函数。中有专门处理中断的中断函数。(2 2)数据类型有一定的区别。数据类型有一定的区别。在标准在标准C C的基础上又扩展了的基础上又扩展了4 4种类型。种类型。(5 5)头文件的不同。头文件的不同。5151头文件把单片机内部的硬件资源如定时器、中断、头文件把单片机内部的硬件资源如定时器、中断、I/OI/O
6、等所相等所相应的特殊功能寄存器写入头文件内。应的特殊功能寄存器写入头文件内。(6 6)程序结构的差异。程序结构的差异。由于由于5151单片机硬件资源有限,编译系统不允许太多的程序嵌套。单片机硬件资源有限,编译系统不允许太多的程序嵌套。其次,其次,C51C51语言不支持标准语言不支持标准C C的递归特性。的递归特性。4 4、KeilKeil C51 C51的开发工具的开发工具KeilKeil Vision2Vision2KeilKeil Vision2Vision2是德国是德国KeilKeil software software公司开发的公司开发的C51C51语言开发软件。语言开发软件。这个软件
7、集成了文件编辑处理、编译链接等功能。这个软件集成了文件编辑处理、编译链接等功能。3.2 C513.2 C51语言程序设计基础语言程序设计基础1 1、数据类型与存储类型、数据类型与存储类型1 1)数数据据类类型型画板书2)C51扩展的数据类型(扩展的数据类型(4种扩展的数据类型)种扩展的数据类型)(1 1)位变量)位变量bitbit bit bit的值可以是的值可以是1 1(truetrue),或),或0 0(falsefalse)。)。bit bit 变量名;变量名;格式:格式:例如:例如:bit flag;bit flag;flag=0flag=0;画板书(2 2)特殊功能寄存器)特殊功能寄
8、存器sfrsfr 地址单元地址单元80H 80H FFH FFH之间的片内数据存储区;之间的片内数据存储区;“sfrsfr”数据类型占用一个内存单元;数据类型占用一个内存单元;利用它可以访问利用它可以访问5151单片机内部的所有单片机内部的所有特殊功能寄存器特殊功能寄存器。sfrsfr P1=0 x90 P1=0 x90;/定义了定义了P1P1口寄存器,地址为口寄存器,地址为0 x900 x90;P1 =0 xffP1 =0 xff;/把把P1P1寄存器的值置为寄存器的值置为0 xff0 xff,/P1/P1口的所有口的所有输出输出引脚设置为高电平。引脚设置为高电平。例如例如sfrsfr 寄存
9、器变量名寄存器变量名 =字节地址常数;字节地址常数;格式:格式:重点、难点、熟练掌握重点、难点、熟练掌握画板书字节地址?字节地址?P10 x90变量名变量名地址地址0 xff存储器存储器sfrsfr P1=0 x90 P1=0 x90;/定义了定义了P1P1口寄存器,地址为口寄存器,地址为0 x900 x90;P1 =0 xffP1 =0 xff;/把把P1P1寄存器的值置为寄存器的值置为0 xff0 xff,/P1/P1口的所有口的所有输出输出引脚设置为高电平。引脚设置为高电平。画板书sfrsfr P2=0 xA0 P2=0 xA0;P2 =0 xA0P2 =0 xA0;思考:思考:sfrs
10、fr SBUF=0 x99 SBUF=0 x99;习题习题1:往串行发送数据缓冲寄存器往串行发送数据缓冲寄存器SBUF写入写入80SBUF=80SBUF=80;习题习题2:从从P0口寄存器口寄存器读取读取数据,存放到任意一个变量数据,存放到任意一个变量X。sfrsfr P0=0 x80 P0=0 x80;char xchar x;x=P0 x=P0;难点、掌握难点、掌握例如:例如:(3 3)特殊功能寄存器)特殊功能寄存器sfr16sfr16“sfr16sfr16”数据类型占两个内存单元;数据类型占两个内存单元;用于操作占两个字节的特殊功能寄存器。用于操作占两个字节的特殊功能寄存器。sfr16
11、DPTR=0 x82sfr16 DPTR=0 x82;/定义了片内定义了片内1616位数据指针寄存器位数据指针寄存器DPTRDPTR,/低低8 8位字节地址为位字节地址为82H82H,/高高8 8位字节地址为位字节地址为83H83H。DPTR=0 x1234;DPTR=0 x1234;sfr16 sfr16 寄存器变量名寄存器变量名 =字节地址常数;字节地址常数;格式:格式:字节地址为字节地址为82H、83H存放的数据分别是多少?存放的数据分别是多少?(4 4)特殊功能位)特殊功能位 sbitsbit 片内特殊功能寄存器的可寻址位。片内特殊功能寄存器的可寻址位。“”前是特殊功能寄存器的名字;前
12、是特殊功能寄存器的名字;“”的后面数字是特殊功能寄存器可寻址位在寄存器中的位置,的后面数字是特殊功能寄存器可寻址位在寄存器中的位置,取值必须是取值必须是0-70-7。sbitsbit 位变量名位变量名 =特殊功能寄存器特殊功能寄存器 位位置;位位置;格式:格式:sfrsfr PSW =0 xd0 PSW =0 xd0;/定义定义PSWPSW寄存器地址为寄存器地址为0 xd00 xd0sbitsbit FO =PSW 5 FO =PSW 5;/定义定义F0F0位为位为PSW.5PSW.5F0=0;F0=0;例如:例如:程序状态字寄存器程序状态字寄存器PSWPSW PSWPSW的不同位表明程序运行
13、的状态。的不同位表明程序运行的状态。习题习题3 3:片内:片内I/OI/O口口P1P1口的口的P1.0P1.0寻址位置成高电平寻址位置成高电平 sfrsfr P1 =0 x90 P1 =0 x90;sbitsbit P1_0=P10 P1_0=P10;P1_0 =1P1_0 =1;习题习题4:从从P2口的口的P2.7读取数据,存放到任意一个位变量读取数据,存放到任意一个位变量X。sfrsfr P2 =0 xA0 P2 =0 xA0;sbitsbit P2_7=P27 P2_7=P27;bit xbit x;x=P2_7x=P2_7;难点难点sbitsbit 位变量名位变量名=位地址常数;位地址
14、常数;sbitsbit CY =0 xD7 CY =0 xD7;/*CY CY位地址为位地址为0 xD70 xD7*/sbitsbit OV =0 xD2 OV =0 xD2;/*OV OV位地址为位地址为0 xD20 xD2*/ifif(CY=1CY=1)例如:例如:格式:格式:格式:格式:sbitsbit 位变量名位变量名 =字节地址字节地址 位位置;位位置;sbitsbit P1_0=0 x900 P1_0=0 x900;P1_0 =1P1_0 =1;习题习题5 5:片内:片内I/OI/O口口P1P1口的口的P1.0P1.0寻址位置成低电平寻址位置成低电平sbitsbit P1_0 =0
15、 x90 P1_0 =0 x90;P1_0 =0P1_0 =0;在头文件在头文件AT89X51.h AT89X51.h 或者或者reg1.hreg1.h中定义了常用的特殊功能寄存器中定义了常用的特殊功能寄存器和可寻址位。和可寻址位。#include#include sfrsfr P1 =0 x90 P1 =0 x90;sbitsbit P1_0=0 x90 P1_0=0 x90;两者区别?两者区别?数据类型区别、及其作用。数据类型区别、及其作用。bitbitsfrsfrsfr16sfr16sbitsbit讨论讨论第第7次课主要内容:次课主要内容:数据存储类型数据存储类型绝对宏及程序习题绝对宏及
16、程序习题_at_关键字及程序习题关键字及程序习题3 3)数据存储类型)数据存储类型 数据存储类型是指数据存放在数据存储类型是指数据存放在5151单片机的哪一个存储器空间,单片机的哪一个存储器空间,不同的存储器空间,寻址方式不同,访问速度不同。不同的存储器空间,寻址方式不同,访问速度不同。P46bdatadataidatapdataxdatacode画板书 重重点点、记记住住(1 1)DATADATA区。区。DATADATA区指片内区指片内RAMRAM的低的低128128字节的空间,可直接寻址;字节的空间,可直接寻址;寻址是最快的,应该把经常使用的变量放在寻址是最快的,应该把经常使用的变量放在D
17、ATADATA区。区。unsigned char unsigned char datadata system_statussystem_status=0;=0;unsigned unsigned intint datadata unit_id8;unit_id8;例如:例如:格式:格式:数据类型数据类型【存储类型存储类型】变量名;变量名;(2 2)BDATABDATA区。区。BDATABDATA区是内部区是内部RAMRAM可位寻址的可位寻址的1616字节存储区(字节地址为字节存储区(字节地址为20H20H 2FH2FH)中的)中的128128个位。个位。在这个区中声明变量就可进行位寻址。在这个
18、区中声明变量就可进行位寻址。例如:例如:unsigned char bdata status_byte;unsigned int bdata status_word;sbit stat_flag=status_byte4;if(status_word15 )stat_flag=1;(3 3)IDATAIDATA区。区。IDATAIDATA区是片内区是片内RAMRAM的的0-2560-256字节的存储区,只能间接寻址,字节的存储区,只能间接寻址,速度比直接寻址慢。速度比直接寻址慢。unsigned char idata system_status=0;float idata value;例如:例
19、如:(4 4)PDATAPDATA区和区和XDATAXDATA区。区。PDATAPDATA区和区和XDATAXDATA区位于片外存储区;区位于片外存储区;PDATAPDATA区指的是外部数据存储区区指的是外部数据存储区0 0256256字节。字节。XDATAXDATA区指的是外部数据区区指的是外部数据区64KB64KB内的任何地址。内的任何地址。unsigned char xdata system_status=0;unsigned int pdata uint_id8;例如:例如:(5 5)程序存储区)程序存储区CODECODE。CODECODE区是程序存储区,储存的数据是不可改变的。区是程
20、序存储区,储存的数据是不可改变的。unsigned char unsigned char codecode a9 a9=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;例如:例如:4 4)数据存储模式)数据存储模式C51C51编译器设定的存储模式:编译器设定的存储模式:SMALLSMALL、COMPACTCOMPACT和和 LARGELARGE三种模式。三种模式。若声明若声明 char var1char var1;在在SMAL
21、LSMALL模式下,模式下,var1var1被定位在被定位在datadata存储区;存储区;在在COMPACTCOMPACT模式下,模式下,var1var1被定位在被定位在idataidata存储区;存储区;在在LARGELARGE模式下,模式下,var1var1被定位在被定位在xdataxdata存储区中。存储区中。2 2、C51C51语言的绝对地址访问语言的绝对地址访问C51C51语言提供了两种比较常用的访问绝对地址的方法,语言提供了两种比较常用的访问绝对地址的方法,对片内对片内RAMRAM、片外、片外RAMRAM及及I/OI/O进行访问。进行访问。绝对地址绝对地址C51编译器提供了一组宏
22、定义对编译器提供了一组宏定义对code、data、pdata和和xdata空间空间进行绝对寻址。这组宏定义放在进行绝对寻址。这组宏定义放在absacc.h头文件中:头文件中:CBYTE 以以字节字节形式对形式对code区寻址;区寻址;CWORD 以以字字形式对形式对code区寻址;区寻址;DBYTE 以字节形式对以字节形式对data区寻址;区寻址;DWORD 以字形式对以字形式对data区寻址;区寻址;XBYTE 以字节形式对以字节形式对xdata区寻址;区寻址;XWORD 以字形式对以字形式对xdata区寻址;区寻址;PBYTE 以字节形式对以字节形式对pdata区寻址;区寻址;PWORD
23、以字形式对以字形式对pdata区寻址。区寻址。#define#define 变量名变量名 绝对宏绝对宏 字节地址字节地址 格式格式绝对宏绝对宏画板书 难点难点1)绝对宏)绝对宏例题,例题,片内片内RAMRAM、片外、片外RAMRAM定义的程序如下:定义的程序如下:#include#include#define PORTE XBYTE0 xFFC0#define PORTE XBYTE0 xFFC0 /*将将PORTEPORTE定义为外部定义为外部I/OI/O,地址为地址为0 xFFC00 xFFC0*/#define NRAM DBYTE0 x40#define NRAM DBYTE0 x40
24、 /*将将NRAMNRAM定义为片内定义为片内RAMRAM,地址为地址为0 x400 x40*/main()main()PORTE=0 x3D;PORTE=0 x3D;NRAM=0 x01;NRAM=0 x01;/*数据数据3DH3DH写入地址写入地址0 xFFC00 xFFC0的外部的外部I/O I/O PORTE PORTE*/*将数据将数据01H01H写入片内写入片内RAMRAM的的40H40H单元单元*/难点难点习题习题6 6 使用绝对宏使用绝对宏将片将片内内RAM 20HRAM 20H的字节地址单元全部置的字节地址单元全部置1 1。#include#include#define M
25、DBYTE0 x0020#define M DBYTE0 x0020/*将将M M定义为内部定义为内部RAMRAM,地址为地址为0 x00200 x0020*/main()main()M=0 xff;M=0 xff;习题习题7 7 使用绝对宏读取片外使用绝对宏读取片外RAM F000HRAM F000H字节地址单元的内容。字节地址单元的内容。#include#include#define WRAM XBYTE0 xF000#define WRAM XBYTE0 xF000 main()main()char x char x;x=WRAM;x=WRAM;使用关键字使用关键字_at_at_可对指定
26、的存储器空间的绝对地址进行访问。可对指定的存储器空间的绝对地址进行访问。格式:格式:存储类型存储类型 数据类型数据类型 变量名变量名 _at_ _at_ 地址常数;地址常数;地址常数:指定变量的绝对地址,位于存储器空间之内;地址常数:指定变量的绝对地址,位于存储器空间之内;使用使用_at_at_定义的变量必须为全局变量。定义的变量必须为全局变量。板书 重点重点2)_at_关键字关键字例题例题 使用关键字使用关键字_at_at_实现绝对地址的访问。实现绝对地址的访问。data unsigned char y1 _at_ 0 x50;/data unsigned char y1 _at_ 0 x5
27、0;/*在在data data 区定义字节变量区定义字节变量 y1y1,地址为,地址为50H50H*/xdataxdata unsigned unsigned intint y2 _at_ 0 x4000;/y2 _at_ 0 x4000;/*在在xdataxdata区定义字变量区定义字变量 y2y2,地址为,地址为4000H4000H*/void void main(voidmain(void)y1=0 xff;y1=0 xff;y2=0 x1234;y2=0 x1234;while(1);while(1);习题习题8 使用使用关键字关键字_at_at_读取读取 片内片内RAM 60HRAM
28、 60H单元的单元的内容。内容。data unsigned char M _at_ 0 x60;data unsigned char M _at_ 0 x60;void void main(voidmain(void)unsigned char y;unsigned char y;y=M y=M;例题例题使用关键字使用关键字_at_at_将将片外片外RAM 2000HRAM 2000H开始的连续开始的连续2020个字节单元清个字节单元清0 0。void void main(voidmain(void)unsigned char i;unsigned char i;for(ifor(i=0;i2
29、0;i+)=0;i20;i+)bufferibufferi=0=0;xdataxdata unsigned char buffer20 _at_ 0 x2000;unsigned char buffer20 _at_ 0 x2000;程序记忆程序记忆1 重点重点data unsigned char buffer8 _at_ 0 x40;data unsigned char buffer8 _at_ 0 x40;void void main(voidmain(void)unsigned char j;unsigned char j;for(jfor(j=0;j8;j+)=0;j y;R=x y;
30、3 3)逻辑运算符)逻辑运算符逻辑表达式逻辑表达式intint x=1;x=1;intint y=1;y=1;intint R=0;R=0;R=x&y;R=x&y;10 X 10010 X 100,编程语句。,编程语句。X100 X1000X1000,编程语句。,编程语句。判断判断 X X是否能被是否能被3 3整除的整数,编程语句。整除的整数,编程语句。(X10)&(X10)&(X100)(X1000)(X1000)0=0=(X%3)X%3)判断判断 X X是否能被是否能被3 3整除却不能被整除却不能被6 6整除的整数,编程语句。整除的整数,编程语句。(0=0=(X%3)X%3))&(0 0!
31、=(X%6)X%6))本次课暂不做,习题本次课暂不做,习题1111求求100100到到10001000之间,能被之间,能被100100整除不能被整除不能被3 3整除的整数,编程语句。整除的整数,编程语句。4)位运算符)位运算符01001000 01001000&11111111 1111111100001000 00001000 2 6 3 2 6 301001001 01001001|11111111 11111111char x=65;x=char x=65;x=x;x;重点重点00000001 00000001&00110111 0011011101000000 01000000|000
32、00001 0000000100001000 00001000 4 3 32 4习题习题1212(9 9 3 3)|(1 1 1 1)(1 1 4 4)|(1 1 2 2)|(1 1y)max=x;if(xy)max=x;比较变量比较变量x x和变量和变量y y,如果,如果xyxy,则把,则把 x x 赋给变量赋给变量maxmax。习题习题1313比较变量比较变量x x和变量和变量y y,如果,如果x x和和y y相等,则把相等,则把0 0赋给变量赋给变量maxmax。if(x=y)max=0;if(x=y)max=0;格式:格式:if(if(表达式表达式)语句语句1 1;else else
33、语句语句2 2;if(xy)max=x;else max=y;比较变量比较变量x x和变量和变量y y,如果如果xyxy,则把则把 x x 赋给变量赋给变量maxmax;否则把否则把 y y 赋给变量赋给变量maxmax。例题例题1414,说明下列语句的作用说明下列语句的作用if(xy)m =y;else m =x;比较变量比较变量x x和变量和变量y y,把二者最小值赋给变量,把二者最小值赋给变量m m习题习题1515如果变量如果变量x x满足关系满足关系10 x2010 x10)&(x10)&(x20))y=1 y=1;else else y=0;y=0;sfrsfr P2=0 xA0 P
34、2=0 xA0;sfrsfr P1=0 x90 P1=0 x90;sbitsbit P24=P24 P24=P24;sbitsbit P10=P10 P10=P10;综合习题综合习题1616如果读取如果读取P2P2口的口的P2.4P2.4位为位为1 1,则把,则把P1P1口的口的P1.0P1.0置成置成0 0。void main()void main()if(1=P24)if(1=P24)P10=0 P10=0;if(if(表达式表达式1)1)语句语句1 1;else if(else if(表达式表达式2)2)语句语句2 2;else if(else if(表达式表达式n)n)语句语句n n;
35、else else 语句语句n+1n+1;多分支多分支ifif语句语句0表达式表达式1 表达式表达式2 表达式表达式n语句语句n+100语句语句n 语句语句2 语句语句1 非非0 非非0 非非0 当成绩当成绩9090时,时,输出输出verygoodverygood,当当8080成绩成绩9090时,时,输出输出goodgood,当当6060成绩成绩8080时,时,输出输出passpass,当成绩当成绩60=90)if(score=90)printf(printf(“veryvery good);good);else if(score=80)else if(score=80)printf(prin
36、tf(“goodgood););else if(score=60)else if(score=60)printf(printf(“passpass););else else printf(printf(“failfail););注意注意 if else if else 配对问题配对问题第第9次课主要内容:次课主要内容:C51的多分支结构,的多分支结构,while、switch-casebreak语句和语句和continue 数组、函数数组、函数IO口编程口编程 学习方法:学习方法:背住背住C语言语法、执行流程、程序分析方法语言语法、执行流程、程序分析方法多分支多分支switchswitch语句
37、语句switch (switch (表达式表达式1 1)case case 常量常量表达式表达式1 1:语句语句1 1;break break;case case 常量常量表达式表达式2 2:语句语句2 2;break break;case case 常量常量表达式表达式n n:语句语句n n;break break;defaultdefault:语句语句n+1n+1;格式:格式:switchswitch表达式表达式1 1语句语句1 1语句语句2 2语句语句n n语句语句n+1n+1式式1 1式式2 2式式n ndefaultdefaultcasecase switch(key)switch(
38、key)case 1case 1:y=1y=1;breakbreak;case 2case 2:y=2;breaky=2;break;case 3case 3:y=4y=4;breakbreak;defaultdefault:;在单片机程序设计中,常用在单片机程序设计中,常用switchswitch语句作为键盘中按键的判别。语句作为键盘中按键的判别。当按下键的键号变量当按下键的键号变量key=1key=1,则变量,则变量y=1y=1;键号变量键号变量key=2key=2,则变量,则变量y=2y=2;键号变量键号变量key=4key=4,则变量,则变量y=3y=3;没有按下键,没有按下键,则变量
39、则变量y y不变。不变。板书key=2;key=2;switch(key)switch(key)case 1case 1:y=1y=1;case 2case 2:y=2;y=2;case 3case 3:y=4y=4;defaultdefault:;习题:读程序执行的结果习题:读程序执行的结果 y=y=?习题习题17y=y=x x(x1)(x1)2x-12x-1(1x10)(1x10)3x-113x-11(x10)(x10)思考:思考:多分支语句区别:多分支语句区别:if if else if else else if else 和和 switch case switch case 语句语句2
40、 2)循环结构控制语句)循环结构控制语句whilewhile(表达式)(表达式)循环体;循环体;格式:格式:表达式表达式循环体循环体假假(0)真真(非非0)先判断表达式,先判断表达式,后执行循环体后执行循环体。whilewhile语句语句画板书main()main()intint i=0;i=0;intint y;y;while while(i3i3)i+i+;y=i;y=i;i+i+执行几次?执行几次?y=y=?习题:读程序执行的结果习题:读程序执行的结果 y=y=?注意方法注意方法main()main()intint i=0;i=0;intint y;y;while while(i7i7)
41、i=i+3 i=i+3;y=i;y=i;y=y=?习题:读程序执行的结果习题:读程序执行的结果 y=y=?dodo 循环体;循环体;whilewhile(表达式);(表达式);格式:格式:表达式表达式循环体循环体假假(0)真真(非非0);不可省略!不可省略!切记!切记!先执行循环体,先执行循环体,后判断表达式后判断表达式。do-whiledo-while语句语句画板书main()main()intint i=0;i=0;intint y;y;do do i=i+2 i=i+2;while(i3);while(i3);y=i;y=i;i+i+执行几次?执行几次?y=y=?习题:读程序执行的结果习
42、题:读程序执行的结果 y=y=?main()main()intint i=0;i=0;intint y=0;y=0;do do i+i+;y=y+i;y=y+i;while(y7);while(y7);习题:读程序执行的结果习题:读程序执行的结果 y=y=?forfor(表达式(表达式1 1;表达式;表达式2 2;表达式;表达式3 3)语句;语句;格式:格式:forfor语句语句画板书 重点重点main()main()intint i,y;i,y;y=0;y=0;for(ifor(i=1;i4;i+)=1;i4;i+)y=y+i y=y+i;y =y =?习题:读程序执行的结果习题:读程序执行
43、的结果 y=y=?main()main()intint i,y;i,y;y=5;y=5;for(i=2;i6;i+)for(i=2;i6;i+)y=y+i y=y+i;y =y =?习题:读程序执行的结果习题:读程序执行的结果 y=y=?main()main()intint i,y;i,y;y=0;y=0;for(i=0;i20;i+)for(i=0;i20;i+)if if(0=0=(i%3)i%3))y=y+iy=y+i;y =y =?习题:读程序执行的结果习题:读程序执行的结果 y=y=?whilewhile语句语句 和和forfor语句语句 区别?区别?思考循环语句思考循环语句3 3)
44、breakbreak语句和语句和continuecontinue语句语句breakbreak功能:功能:跳出跳出switchswitch结构;结构;在循环语句中在循环语句中,终止并跳出终止并跳出本层本层循环循环。continuecontinue功能:功能:结束结束本次循环本次循环,跳过本层循环体中尚未执行的语句,跳过本层循环体中尚未执行的语句,执行循环体的判断。执行循环体的判断。#define PI 3.1415main()int r;float area;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);计算计算r=1r=1到到r=10r=1
45、0的圆面积,直到面积大于的圆面积,直到面积大于100100时停止。时停止。运行结果:运行结果:r=1,area=3.14r=2,area=12.57r=3,area=28.27r=4,area=50.26r=5,area=78.54结束整个结束整个for循环循环把把100100200200之间不能被之间不能被3 3整除的数输出整除的数输出 。main()main()intint n;n;for(nfor(n=100;n=200;n+)=100;n=200;n+)if(n%3=0)if(n%3=0)continue;continue;printf(printf(“%d%d ,n);,n);结束本
46、次循环结束本次循环,循环体的剩余语句被忽略循环体的剩余语句被忽略,执行表达式执行表达式3,进入下一循环。,进入下一循环。main()int n;for(n=100;n=200;n+)if(n%3=0)break;printf(“%d ,n);习题:读程序执行的结果?习题:读程序执行的结果?习题:循环检测习题:循环检测P1.0P1.0引脚,只有检测引脚,只有检测P1.0P1.0为低电平时,循环结束。为低电平时,循环结束。sfr P1=0 x90;sbit P10=P10;main()while(1)if(P10=0)break;5 5、数组、数组数组是用来存储一组相同数据类型的数据结构。数组是用
47、来存储一组相同数据类型的数据结构。一维数组格式:一维数组格式:数据类型数据类型变量名变量名 N;int a 10;intint a5=1 a5=1,2 2,3 3,4 4,5 5;初始化:初始化:char b 10;intint y y;y=a2+a4;y=a2+a4;求下列数组的和。求下列数组的和。intint a5=1,2,3,4,5 a5=1,2,3,4,5;main()main()intint a5=1,2,3,4,5;a5=1,2,3,4,5;intint i,sumi,sum;sum=0;sum=0;for(ifor(i=0;i5;i+)=0;i5;i+)sum=sum=sum+a
48、isum+ai;习题:求数组习题:求数组a5a5中能被中能被2 2整除的数的和。整除的数的和。intint a5=10,2,33,54,15 a5=10,2,33,54,15;main()main()intint a5=10,2,33,54,15;a5=10,2,33,54,15;intint i,sumi,sum;sum=0;sum=0;for(ifor(i=0;i5;i+)=0;i5;i+)if(sumi%2=0)if(sumi%2=0)sum=sum=sum+aisum+ai;习题习题1818:输入输出对应关系。输入输出对应关系。如果如果P0P0口只有口只有P00P00输入低电平,输入低
49、电平,则则P1P1口只有口只有P10P10输出高电平;输出高电平;如果如果P0P0口只有口只有P01P01输入低电平,输入低电平,则则P1P1口只有口只有P11P11输出高电平;输出高电平;如果如果P0P0口只有口只有P07P07输入低电平,输入低电平,则则P1P1口只有口只有P17P17输出高电平。输出高电平。输入二进制数输入二进制数00000001 00000001 输出输出 0 x10;0 x10;输入二进制数输入二进制数00000010 00000010 输出输出 0 x20;0 x20;输入二进制数输入二进制数00000100 00000100 输出输出 0 x40;0 x40;输入
50、二进制数输入二进制数00001000 00001000 输出输出 0 x80;0 x80;输入二进制数输入二进制数00010000 00010000 输出输出 0 x11;0 x11;输入二进制数输入二进制数00100000 00100000 输出输出 0 x21;0 x21;输入二进制数输入二进制数01000000 01000000 输出输出 0 x41;0 x41;输入二进制数输入二进制数10000000 10000000 输出输出 0 x810 x81。习题习题1919:将一组数中:将一组数中100100个数的值按逆序重新存放。个数的值按逆序重新存放。10,2,13,54,5 510,2