单片机C语言程序设计 教学课件 ppt 作者 侯殿有 2.6

上传人:E**** 文档编号:89354365 上传时间:2019-05-23 格式:PPT 页数:33 大小:119.50KB
返回 下载 相关 举报
单片机C语言程序设计 教学课件 ppt 作者  侯殿有 2.6_第1页
第1页 / 共33页
单片机C语言程序设计 教学课件 ppt 作者  侯殿有 2.6_第2页
第2页 / 共33页
单片机C语言程序设计 教学课件 ppt 作者  侯殿有 2.6_第3页
第3页 / 共33页
单片机C语言程序设计 教学课件 ppt 作者  侯殿有 2.6_第4页
第4页 / 共33页
单片机C语言程序设计 教学课件 ppt 作者  侯殿有 2.6_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《单片机C语言程序设计 教学课件 ppt 作者 侯殿有 2.6》由会员分享,可在线阅读,更多相关《单片机C语言程序设计 教学课件 ppt 作者 侯殿有 2.6(33页珍藏版)》请在金锄头文库上搜索。

1、第六章 C51构造数据类型,6.1 数组,1一维数组 一维数组只有一个下标,例如,下面是定义一维数组的两个例子。 unsigned char x5; unsigned int y3=1,2,3; 第一语句定义了一个无符号字符数组,数组名为x,数组中的元素个数为5。 第二语句定义了一个无符号整型数组,数组名为y,数组中元素个数为3,定义的同时给数组中的三个元素赋初值,初值分别为1、2、3。 需要注意的是,C51语言中数组的下标是从0开始的,因此上面第一句定义的5个元素分别是:x0、x1、x2、x3、x4。第二句定义的3个元素分别是:y0、y1、y2。赋值情况为:y0=1;y1=2;y2=3。 C

2、51规定在引用数组时,只能逐个引用数组中的各个元素,而不能一次引用整个数组。但如果是字符数组则可以一次引用整个数组。,数组的定义: 数据类型说明符 数组名常量表达式=初值,初值 各部分说明如下: (1)“数据类型说明符”说明了数组中各个元素存储的数据的类型。 (2)“数组名”是整个数组的标识符,它的取名方法与变量的取名方法相同。 (3)“常量表达式”,常量表达式要求取值要为整型常量,必须用方括号“”括起来。用于说明该数组的长度,即该数组元素的个数。 (4)“初值部分”用于给数组元素赋初值,这部分在数组定义时属于可选项。对数组元素赋值,可以在定义时赋值,也可以定义之后赋值。在定义时赋值,后面须带

3、等号,初值须用花括号括起来,括号内的初值两两之间用逗号间隔,可以对数组的全部元素赋值,也可以只对部分元素赋值。初值为0的元素可以只用逗号占位而不写初值0。,例6.1 用数组计算并输出Fibonacci数列的前20项 Fibonacci数列在数学中很有用,Fibonacci数列中第一个数是0,第二个数是1,之后每个数都是前面两个数字之和。设计时通过数组存放Fibonacci数列,从第三项开始可通过累加的方法得到。 程序如下: #include # include extern serial_init();/串口初始化,省略 main(), int fib20;/定义数组fib,数组中元素个数为2

4、0 int i; fib0=0; fib1=1; serial_init(); for (i=2;i20;i+) fibi= fibi-1+ fibi-2; for (i=2;i20;i+)/在屏上输出计算结果 if (i%5=0) printf(“n”)/ 输出时一行5个数 printf(“%6d”, fibi);/每个数宽度6位 while(1); ,程序执行结果: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4148 2字符数组,用来存放字符数据的数组称为字符数组,它是C语言中常用的一种数组。字符数组中的每一个元素

5、都用来存放一个字符,也可用字符数组来存放字符串。字符数组的定义与一般数组相同,只是在定义时把数据类型定义为char型。C语言中没有字符串数据类型,定义字符串,只能通过定义字符数组来实现,在数组中最后一项加“0”,就可以把该字符数组当成字符串使用。 就是说,字符数组有两种,最后一项有“0”,就是字符串;没有“0”就是普通字符数组。,例6.2 对字符数组输入输出 #include # include extern serial_init(); main() char string20; serial_init(); printf(“please type any character:”); sca

6、nf(“%s”,staing); printf(“%sn”,string); while(1); ,6.2 指针,指针是C语言中的一个重要概念。指针类型数据在C语言程序中使用十分普遍,正确地使用指针类型数据,可以有效地表示复杂的数据结构;可以动态地分配存储器,直接处理内存地址。 1指针的概念 了解指针的基本概念,先要了解数据在内存中的存储和读取方法。 在C语言中,可以通过地址方式来访问内存单元的数据,但C语言作为一种高级程序设计语言,数据通常是以变量的形式进行存放和访问的。在一个程序中定义了一个变量,编译器在编译时就在内存中给这个变量分配一定的字节单元进行存储。如对整型变量(int),分配2个

7、字节单元,对于浮点型变量(float)分配4个字节单元,对于字符型变量分配1个字节单元等。变量在使用时要分清两个概念:变量名和变量的值。前一个是数据的标识,后一个是数据的内容。变量名相当于内存单元的地址,变量的值相当于内存单元的内容。对于内存单元的数据访问方式有两种,对于变量也有两种访问方式:直接访问方式和间接访问方式。 直接访问方式。对于变量的访问,我们大多数时候是直接给出变量名。例如:printf(“%d”,a),直接给出变量a的变量名来输出变量a的内容。在执行时,根据变量名得到内存单元的地址,然后从内存单元中取出数据按指定的格式输出。这就是直接访问方式。,间接访问方式。例如要存取变量a中

8、的值时,可以先将变量a的地址放在另一个变量b中,访问时先找到变量b,从变量b中取出变量a的地址,然后根据这个地址从内存单元中取出变量a的值。这就是间接访问。在这里,从变量b中取出的不是所访问的数据,而是访问的数据(变量a的值)的地址,这就是指针,变量b称为指针变量。 关于指针,注意两个基本概念:变量的指针和指向变量的指针变量。变量的指针就是变量的地址。对于变量a,如果它所对应的内存单元地址为0x2000,它的指针就是0x2000。 指针变量是指一个专门用来存放另一个变量地址的变量,它的值是指针。上面变量b中存放的是变量a的地址,变量b中的值是变量a的指针,变量b就是一个指向变量a的指针变量。,

9、如上所述,指针实质上就是各种数据在内存单元的地址,在C51语言中,不仅有指向一般类型变量的指针,还有指向各种组合类型变量的指针。在本书中我们只讨论指向一般变量的指针的定义与引用,对于指向组合类型的指针,大家可以参考其它书籍学习它的使用。 2指针变量的定义 指针变量的定义与一般变量的定义类似,定义的一般形式为: 数据类型说明符 存储器类型 *指针变量名; 其中: “数据类型说明符”说明了该指针变量所指向的变量的类型。,“存储器类型”是可选项,它是C5l编译器的一种扩展如果带有此选项指针被定义为基于存储器的指针。无此选项时,被定义为一般指针,这两种指针的区别在于它们占的存储字节不同。 一般指针在内

10、存中占三个字节,第一个字节存存储器代码,具体如图6-1所示,第二和第三个字节存该指针存放的16位地址。,如想把某int型指针存放在data 0x0234中,可以定义:int 0x40234L *p; 3指针变量的引用 指针变量是存放另一变量地址的特殊变量,指针变量只能存放地址。指针变量使用时注意两个运算符:“&”和“*”。这两个运算符在前面已经介绍,其中:“&”是取地址运算符,“*”是指针运算符。通过“&”取地址运算符可以把一个变量的地址送给指针变量,使指针变量指向该变量;通过“*”指针运算符可以实现通过指针变量访问它所指向的变量的值。,例如: int x,*px,*py; px= main(

11、), int x,y; int *p,*p1,*p2; serial_init(); printf(“input x,yn”); scanf(“ %d,%d” , 程序结果: input x ,y 4,8 max=8,min=4,6.3 结构,结构是一种组合数据类型,它是将若干个不同类型的变量结合在一起而形成的一种数据的集合体。组成该集合体的各个变量称为结构元素或成员。整个集合体使用一个单独的结构变量名。,6.3.1结构与结构变量的定义,结构与结构变量是两个不同的概念,结构是一种组合数据类型,结构变量是取值为结构这种组合数据类型的变量,相当于整型数据与整型变量的关系。对于结构与结构变量的定义有

12、两种方法。 1先定义结构类型再定义结构变量 结构的定义形式如下: struct 结构名 结构元素表; 结构变量的定义如下:,struct 结构名 结构变量名1,结构变量名2,; 其中,“结构元素表”为结构中的各个成员,它可以由不同的数据类型组成。在定义时须指明各个成员的数据类型。 例6.4 结构的定义,先定义结构类型再定义结构变量 struct date int year; char month,day; ; struct date d1,d2;,2定义结构类型的同时定义结构变量名 这种方法是将两个步骤合在一起,格式如下: struct 结构名 结构元素表 结构变量名1,结构变量名2,; 例6

13、.5 定义结构类型的同时定义结构变量名 对于上面的日期结构变量d1和d2可以按以下格式定义: struct date int year; char month,day; d1,d2; 对于结构的定义说明如下:,(1)结构中的成员可以是基本数据类型,也可以是指针或数组,还可以是另一结构类型变量,形成结构的结构,即结构的嵌套。结构的嵌套可以是多层次的,但这种嵌套不能包含其自己。 (2)定义的一个结构是一个相对独立的集合体,结构中的元素只在该结构中起作用,因而一个结构中的结构元素的名字可以与程序中的其它变量的名称相同,它们两者代表不同的对象,在使用时互相不影响。 (3)结构变量在定义时也可以像其它变

14、量在定义时加各种修饰符对它进行说明。 (4)在C51中允许将具有相同结构类型的一组结构变量定义成结构数组,定义时与一般数组的定义相同,结构数组与一般变量数组的不同就在于结构数组的每一个元素都是具有同一结构的结构变量。,6.3.2 结构变量的引用,结构元素的引用一般格式如下: 结构变量名.结构元素名 或 结构变量名-结构元素名 其中,“.”是结构的成员运算符,例如:d1.year表示结构变量d1中的元素year,d2.day表示结构变量d2中的元素day等。如果一个结构变量中结构元素又是另一个结构变量,即结构的嵌套,则需要用到若干个成员运算符,一级一级找到最低一级的结构元素,而且只能对这个最低级

15、的结构元素进行引用,形如d1.time.hour的形式。 例6.6结构变量的引用,输入三个学生的语文、数学和英语成绩,分别统计总成绩并输出 #include # include extern serial_init(); struct student unsigned char name10 ; unsigned int chinese ; unsigned int math ; unsigned int english; unsigned int total ; p13; main(), unsigned char i ; serial_init(); printf(“input 3 stu

16、dent name and result:n”); for(i=0;i3;i+) printf(“input name :n”); scanf(“%s”,p1i. name); printf(“input result :n”); scanf(“%d,%d,%d”, ,程序执行结果: input 3 student name and result: input name:wang input result : 76,87,69 input name:yang input result : 75,77,89 input name:zhang input result : 72,81,79 wang total is 232 yang total is 241 zhang t

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号