第05章复杂构造数据类型课件

上传人:我*** 文档编号:141161507 上传时间:2020-08-04 格式:PPT 页数:34 大小:208.50KB
返回 下载 相关 举报
第05章复杂构造数据类型课件_第1页
第1页 / 共34页
第05章复杂构造数据类型课件_第2页
第2页 / 共34页
第05章复杂构造数据类型课件_第3页
第3页 / 共34页
第05章复杂构造数据类型课件_第4页
第4页 / 共34页
第05章复杂构造数据类型课件_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《第05章复杂构造数据类型课件》由会员分享,可在线阅读,更多相关《第05章复杂构造数据类型课件(34页珍藏版)》请在金锄头文库上搜索。

1、复杂构造数据类型,2,复杂构造数据类型,结构体 共用体 枚举类型,3,引入,对于同种类型的数据可以用数组来描述。 在解决实际问题时,有时需要将多个不同数据类型的数据组合在一起表达一个整体的信息。如学生个人信息,包括姓名、学号、年龄等,就包含了字符数组和整型数据。,4,结构体,学生成绩表,在一条记录中既有整型数据(学号、分数等),又有字符串(姓名),像这样的数据是由几种不同类型的数据构成,是不能用前面学过的数组来表示的,因为数组的各个元素都是相同的数据类型。按照以前所学的数据类型是无法处理这种复杂数据的。 为了解决这种问题,C语言将几种不同类型的数据组合到一起,这就是我们下面要介绍的结构体类型。

2、,5,5.1.1 结构体的引出及使用,(1)结构体的定义: 由若干个不同类型的数据项组成的组合类型,在C语言中叫做结构体类型。,格式: struct 结构类型名 类型名1 成员名表1; 类型名2 成员名表2; 类型名n 成员名表n; ;,(1)结构体类型用struct关键字定义 (2)花括号里的每一项称为结构体成员 (3)结构体成员的类型可以是普通的数据类型(如int、char等),也可以是数组、指针或已经定义的结构体等任意的数据类型。,注意此处“;”不能省略,6,例如:职工的基本信息有以下几部分组成:编号、姓名、性别、年龄、班组、基本工资、奖金、保险、实发工资。 分析:可以将每个工人的信息定

3、义为一个结构体类型,设类型名是worker,struct worker int num; char name20; char sex; int age; char branch20; float pay; float bonus; float insurance; float realpay; ;,7,注意:,结构体类型的定义并没有在内存中为其分配空间,仅仅定义了数据的组织形式,创立了一种数据类型,可以理解为以前学过的int、char等基本数据类型。只有在定义了结构体类型的变量后,才会在内存中为该变量分配空间。 在为结构体变量分配存储空间时,每个结构体变量所占存储空间大小为其成员所占存储空间的

4、总和。 结构体类型在使用之前应先定义其类型结构,然后再定义该类型变量,才能使用。,struct worker int num; char name20; char sex; int age; char branch20; float pay; float bonus; float insurance; float realpay; ;,共占2+20+1+2+20+4+4+4+4=61个字节,8,(2)定义结构体类型变量的方法,前面定义的worker同int、char等一样只是类型的名字,不是结构体变量,不能直接使用,需由此类型继续定义结构体变量才能使用。 步骤:先定义一个结构体类型,再定义变量

5、。 struct 结构体类型名 变量名列表; 注意:关键字struct 与结构体类型标识符一起使用。 例: struct worker w1, w2,w50; 也可以在定义类型的同时定义结构体变量。 还可以直接定义结构体变量,struct worker int num; char name20; char sex; int age; char branch20; float pay; float bonus; float insurance; float realpay; w1,w2,w50;,struct int num; char name20; char sex; int age; ch

6、ar branch20; float pay; float bonus; float insurance; float realpay; w1,w2,w50;,注意:不出现类型名,9,定义了结构体变量后,系统为之分配内存单元,结构体的各成员在内存中是按顺序连续存放的,所以结构体变量在内存中占据的字节数是各个成员的长度和。 可用求类型长度运算符求出 sizeof(类型名) 如:sizeof(int)为2 sizeof(struct worker)为61; 定义结构体变量必须指明具体的类型名,不同于定义int等标准数据类型变量,因为不同的结构体类型具有不同的结构组成。,struct w1,w2;,

7、10,(3)结构体变量的引用,一般来说, 在程序设计中不直接引用结构体变量,而是引用结构体变量的某个成员变量。 成员的引用形式: 结构体变量名.成员名,struct student int num; char name10; char sex; int age; struct birth birthday; float score; char addr20; stu1;,stu1.num=9002; gets(stu1.name); stu1.sex=m ; printf(“%d,%c”,stu1.num,stu1.sex);,11,结构体变量使用说明:,结构体变量通常不能整体使用,不能整体输

8、入、输出,只能对单个成员分别引用。 但当结构体变量作为函数参数或赋初值时,可以整体使用;或者两个相同类型的结构体变量,如果一个已经赋值,可以对另外一个整体赋值。,如果student1已被赋值,则可以: student2=student1;,12,结构体成员也可以是另一个结构体变量,如前面的birthday成员本身又是birth类型的结构体变量,这个成员也不能整体赋值,要用若干个成员运算符引用。,stu1.birthday.month=4; stu1.birthday.day=5; stu1.birthday.year=1998;,例如: struct birth int month; int

9、day; int year; ;,struct student int num; char name10; char sex; int age; struct birth birthday; float score; char addr20; stu1;,13,(4)结构体变量的初始化,可以在定义结构体变量的同时, 对其初始化 例:struct student long int num; char name20; char sex; char addr20; a=9001,曹名,m, 123 北京路 ;,相当于: a.num=9001; strcpy(a.name, “曹名”); a.sex=

10、m; strcpy(a.addr, “123 北京路” );,14,5.1.2结构体数组的引出及使用,结构体数组中每一个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项,例如一个班级的40名同学信息组成的数组,每一个同学的数据都是一个结构体类型。,例: struct student int num; char name20; char sex; float score; char addr20; ; struct student stu40;,struct int num; char name20; char sex; float score; char addr20; stu40;

11、,15,结构体数组各元素在内存中是连续存放的,各元素的成员也是按顺存放的。,16,结构体数组的初始化,例 struct student int num; char name20; char sex; float score; char addr20; stu3= 10101,”Li Lin”,M,87.5,”103 Beijing”, 10102,”Zu Feng”, F,98,”130 Shanghai”, 10103,”Wang Mi”,M,78,”104 Jinan” ;,17,5.1.4 结构体与指针,1.指向结构体变量的指针 struct student long num; char

12、 name20; char sex; float score; stu1, *p;,p= */,注: (1)此处*p相当于结构体变量 (2)(*p).表示成员引用,( )不能省略,因为成员运算符优先级最高。 (3)可以用指向运算符来引用成员,例如可以用p-num来代替(*p).num,18,3种引用结构体成员的方法 结构体变量.成员名 (*p).成员名 p-成员名 分析以下几种运算符: p-n p-n+ +p-n *p.num(错误!)应改为:(*p).num,19,2.指向结构体数组的指针,struct student int num; char name20; char sex; floa

13、t score; ; struct student stu3, *p; for(p=stu;pnum, p-name,p-sex,p-score);,stu0,stu1,stu2,p,p+后指向 什么位置?,注意:p是指向结构体数组的元素的,不能用来指向数组元素中的某一成员,如 p= char ch; float f; aa,bb,cc;,union,共用体类型名,类型标识符1 成员名1;,类型标识符2 成员名2; . . 类型标识符n 成员名n;,;,共用体类型的变量声明形式也有3种,同结构体类型。,24,例2: union data int i; char ch; float f; ; u

14、nion data aa,bb;,例3: union int i; char ch; float f; aa,bb,cc;,25,共用体变量所占内存的长度等于最长的成员的长度。而不是各成员的长度之和,这一点不同于结构体。 例如前面的例子data类型的变量aa,占据的内存空间为4个字节,而不是2+1+4=7个字节。,共用体变量所占的内存空间,26,3. 共用体变量的引用,共用体变量只能引用它的成员,不能引用共用体变量本身。,共用体变量.成员名,例如前例中的变量aa,可以引用它的成员 aa.i=56; aa.f=123.6432; aa.ch=A;,如下使用是错误的:printf(“%d”,aa)

15、;,27,4. 共用体类型数据的特点,(1)每一瞬时只能存放其中的一个成员,而不是同时存放几种,即其它成员不起作用。,(2)只有最后一个存放的成员的值有效,其他成员将失去原值。如上例中的变量aa 只有最后一个成员值aa.ch=A是有效的。,(3)共用体变量的地址和它的成员地址都是同一地址。即 char name20; char sex; char job; union int class; char position10; catagory; mem20;,31,5.3 枚举类型,所谓“枚举”,是指将变量的所有取值一一列举出来,变量的取值只限于列举出来的值的范围。该变量称之为枚举型变量。 所列

16、举的值叫做枚举元素(枚举常量)。,定义一个枚举类型名,再用它定义变量。 enum 枚举类型名 枚举元素,枚举元素,枚举元素n; enum 枚举类型名变量列表;,关键字,类型名和枚举元素名由用户自己命名,32,例1: enum weekdaysun,mon,tue,wd,thu,fri,dat ; enum weekday day;,例2: enum weekday sun,mon,tue,wd,thu,fri,dat day;,例3: enum sun,mon,tue,wd,thu,fri,dat day;,33,说明: 1、C语言中枚举元素按常量处理,它们是有值的。它们的值是系统按其定义顺序自动赋予的 0、1、2、3、4、。 因此上例中的枚举元素sun的值为0,mon的值为1

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

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

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