第05章复杂构造数据类型.ppt
《第05章复杂构造数据类型.ppt》由会员分享,可在线阅读,更多相关《第05章复杂构造数据类型.ppt(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.
10、sex=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; st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 05 复杂 构造 数据类型
链接地址:https://www.31doc.com/p-3417582.html