C程序设计 第11章 结构体、联合体与枚举类型课件

上传人:我*** 文档编号:144990154 上传时间:2020-09-15 格式:PPT 页数:61 大小:207.50KB
返回 下载 相关 举报
C程序设计 第11章 结构体、联合体与枚举类型课件_第1页
第1页 / 共61页
C程序设计 第11章 结构体、联合体与枚举类型课件_第2页
第2页 / 共61页
C程序设计 第11章 结构体、联合体与枚举类型课件_第3页
第3页 / 共61页
C程序设计 第11章 结构体、联合体与枚举类型课件_第4页
第4页 / 共61页
C程序设计 第11章 结构体、联合体与枚举类型课件_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《C程序设计 第11章 结构体、联合体与枚举类型课件》由会员分享,可在线阅读,更多相关《C程序设计 第11章 结构体、联合体与枚举类型课件(61页珍藏版)》请在金锄头文库上搜索。

1、第11章 结构体、联合体与枚举类型,结构体类型是C语言允许用户定义的又一重要的构造数据类型。,11.1 结构体的概念 11.2 结构体数组 11.3 结构体指针 11.4 链 表 11.5 联合体数据类型 11.6 枚举数据类型 11.7 自定义类型,11.1 结构体的概念 结构体类型是一种构造数据类型,是数目固定,类型不同的若干有序数据项的集合。每个数据项称为一个成员。每一个成员可以是一个基本数据类型或者是一个构造类型。结构体数据类型具有很强的数据描述能力,但C语言中并不提供现成的结构体类型。因此,用户在使用一个结构体类型之前,必须先定义它,也就是要在程序中构造所需要的数据类型。,11.1.

2、1 结构体类型的定义 结构体类型定义的一般形式为: struct 结构体类型名 类型标识符 成员名1; 类型标识符 成员名2; 类型标识符 成员名n; ;,例如,定义一个“学生信息”的结构体类型如下: struct student int num; char name10; char sex; int age; char addr50; int score; ;,11.1.2 结构体变量的定义、引用、初始化 1结构体变量的定义 (1)先定义结构体类型,再定义结构体类型变量。 这种定义的一般形式为: struct 结构体类型名 结构体变量名表; 如上面定义了“学生信息”的结构体类型struct

3、student后,就可以用它来定义结构体变量。,例如: struct student stul,stu2; 定义了stul和stu2为struct student类型的变量,编译系统为变量 stul与stu2分配存储空间时,其存储格式与结构体类型struct student所描述的保持一致,结构体中的各个成员按要求顺序存放。每一个struct student类型的变量占用的存储单元为67个字节。,(2)在定义结构体类型的同时定义结构体变量。 这种定义的一般形式为: struct 结构体类型名 类型标识符 成员名1; 类型标识符 成员名2; 类型标识符 成员名n; 结构体变量名表;,例如: st

4、ruct student int num; char name10; char sex; int age; char addr50; int score; stu1,stu2; 这种定义与前面的定义功能相同,都是既定义了结构体类型struct student,又定义了两个结构体变量stu1与stu2。,(3)直接定义结构体类型的变量。 其一般形式为: struct 类型标识符 成员名1; 类型标识符 成员名2; 类型标识符 成员名n; 结构体变量名表;,例如: struct int num; char name10; char sex; int age; char addr50; int sc

5、ore; stu1,stu2;,2结构体变量的引用 结构体成员引用的一般形式如下: 结构变量名.成员名 其中“.”为结构体成员运算符,所有C语言运算符中它的优先级最高,因此可以把上述引用形式作为一个整体来看待。 例如,stu1.name 、stu2.score分别表示结构体变量stu1的成员name与结构体变量stu2的成员score。,例11.1 定义有关职工工资信息的结构体类型变量(包括编号、姓名、基本工资、附加工资、水电费、实发工资),为结构体变量中的成员赋值并输出其值。 struct person int num; /* 职工编号*/ char *name; /* 姓名 */ floa

6、t base; /* 基本工资*/ float addition; /* 附加工资*/ float cost; /* 水电费*/ float salary; /* 实发工资*/ ; main() struct person employeea,employeeb; employeea.num=2086; employeea.name=Zhao xiwang;,printf(input base,addition,cost:n); scanf(f,f,f, ,程序运行结果为: input base,addition,cost: 805.85,376.57,123.52 Number=2086 N

7、ame= Zhao xiwang Base=805.85 Addition=376.57 Cost=123.52 Salary=1085.90,3结构体变量的初始化 结构体变量的初始化和对数组的初始化相类似。将各个成员的初值用一对花括弧括起来,括弧内各数据项的数据类型、顺序要和结构体类型说明中的成员类型相匹配,数据项间用逗号分隔。如果初值的个数少于结构中成员的个数,则余下的成员将自动初始化为0或NULL。 例如: struct student int num; char name10; char sex; int age; char addr50; int score; ;,main( ) s

8、truct student stu=1422,Lin Hui,M,18,Shang Hai,85; printf(Number=dnName=snSex=cn,stu.num,stu.name,stu.sex); printf(Age=dnAddress=snScore=dn,stu.age,stu.addr,stu.score); ,程序运行结果为: Number=1422 Name=Lin Hui Sex=M Age=18 Address=Shang Hai Score=85,11.1.3 结构体的嵌套 结构体类型定义时,其成员的类型也可以是结构体类型,即结构体类型定义是可以嵌套的。结构体

9、定义的嵌套可以是多重的。,例如,定义一个“职工信息”的结构体类型。每个职工包含编号(num)、姓名(name)、性别(sex)、出生日期(birthday)、家庭住址(addr)等信息。其中出生日期包括年(year)、月(month)、日(day)3个数据项,家庭住址包括城市(city)、街道(street)、门牌号码(streetnum)等信息。职工信息的逻辑结构如图11.3所示。,图11.3 职工信息逻辑结构,显然“职工信息”中的“出生日期”和“家庭住址”应该用结构体类型描述,首先定义结构体类型“日期”struct date和“住址”struct address如下。 struct dat

10、e int year; /*年 */ int month; /*月 */ int day; /*日 */ ; struct address char city50; /*城市*/ char street50; /*街道*/ int streetnum; /*门牌号码*/ ;,然后定义结构体类型“职工”struct employee如下。 struct employee int num; char name10; char sex; struct date birthday; struct address addr; ;,在结构体类型struct employee中,成员birthday是str

11、uct date结构体类型,它又有自己的成员year、month、day,成员addr是 struct address结构体类型,它又有自己的成员city、street、streetnum,这就是结构体类型的嵌套定义。 对于嵌套的结构体,引用时应按照从左到右,从外到内的方式,用“”一级一级地运算,直到找到最低一级的成员。,例如: struct employee emp; emp.num=1001; strcpy(emp.name,Liu Xiaomei); emp.sex=F; emp.birthday.year=1986; emp.birthday.month=5; emp.birthday

12、.day=18; strcpy(emp.addr.city,Bei Jing); strcpy(emp.addr.street,Changan street); emp.addr.streetnum=168;,定义了struct employee类型的变量emp,对其各个成员赋值。赋值后结构体变量emp在内存中的存储形式如图11.4所示。,图11.4 结构体变量emp,11.2 结构体数组,11.2.1 结构体数组的定义,结构体数组的定义方法与其他整型数组、实型数组和字符型数组的定义方法类似。例如: struct student int num; char name10; char sex;

13、int age; char addr50; int score; ; struct student stu40;,与结构体变量的定义类似,结构体数组的定义也可以采用以下的方式: struct student int num; char name10; char sex; int age; char addr50; int score; stu40;,或 struct int num; char name10; char sex; int age; char addr50; int score; stu40;,11.2.2 结构体数组的引用 例11.3 输入全班的学生的信息(包括学号、姓名、性别

14、、年龄、成绩和家庭住址),并按成绩由高到低的次序排序,输出排序后的全班学生信息登记表。 struct student int num; char name10; char sex; int age; char addr50; int score; ;,main() struct student stu40,temp; int i,j,k; for(i=0;i40;i+) printf(n学号:); scanf ( d, ,for(i=0;i39;i+) k=i; for(j=i+1;j40;j+) if(stuk.scorestuj.score) k=j; temp=stui; stui=st

15、uk; stuk=temp; printf(n学号t姓名t性别t年龄t家庭住址t成绩n); for(i=0;i40;i+) printf(dtstct, stui.num,stui.name,stui.sex); printf(dtsttdn, stui.age,stui.addr,stui.score); ,11.2.3 结构体数组的初始化,struct student int num; char name10; char sex; int age; char addr50; int score; ; struct student stu5= 6001,Zhao zhen ,F,18,Bei

16、jing,85, 6002, Lin ping ,F,19, Shanghai,70, 6003,He fang,F,18,Qingdao,92, 6004,Zhou ming,F,19,Jinan,87, 6005,Wang tao,M,18,Dalian,68;,11.3 结构体指针,11.3.1 指向结构体变量的指针 结构体变量所占内存单元的首地址称为结构体变量的指针。指向一个结构体变量的指针变量,称为结构体指针变量。结构体指针变量中的值是所指向的结构体变量的指针。 结构体指针变量定义的一般形式为: struct 结构体类型名 *结构体指针变量名,有了结构体指针变量后,就能更方便地访问结构体变量的各个成员。利用指针引用结构体成员的一般形式为: (*结构体指针变量).成员名 例如: (*pstu).num=6001; C语言中为了直观而方便地通过指针来引用结构体成员,专门

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

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

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