C语言第9章结构体、共用体、枚举课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言第9章结构体、共用体、枚举课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 结构 共用 枚举 课件
- 资源描述:
-
1、第九章第九章 结构体、共用体、枚举结构体、共用体、枚举湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院湖南省普通高等学校省级精品课程湖南省普通高等学校省级精品课程C语言程序设计语言程序设计湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院目录目录问题提出问题提出 结构体结构体 共用体共用体 枚举类型枚举类型 程序应用综合举例程序应用综合举例 总结总结 湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院什么是结构?结构与数组有什么差别?什么是结构?结构与数组有什么差别?有几种结构的定义形式,它们之间有什么不同?有几种结构的定义形式,它们之间有什么不同?什么是结构的嵌套?什么是
2、结构的嵌套?什么是结构变量和结构成员变量,如何引用结构成员变量?什么是结构变量和结构成员变量,如何引用结构成员变量?结构变量如何作为函数参数使用?结构变量如何作为函数参数使用?什么是结构数组,如何定义和使用结构数组?什么是结构数组,如何定义和使用结构数组?什么是结构指针,它如何实现对结构分量的操作?什么是结构指针,它如何实现对结构分量的操作?*结构指针是如何作为函数的参数的?结构指针是如何作为函数的参数的?*如何建立单向链表并实现插入、删除以及查找操作?如何建立单向链表并实现插入、删除以及查找操作?什么是共用体?共用体与结构体有什么区别?什么是共用体?共用体与结构体有什么区别?什么是枚举类型?
3、枚举类型数据如何引用?什么是枚举类型?枚举类型数据如何引用?学习目标、重点学习目标、重点 、难点难点*湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院9.1 问题的提出问题的提出v 在程序里表示一个人(学号、姓名、各科成绩、在程序里表示一个人(学号、姓名、各科成绩、)?)?v 想表示多个人呢?想表示多个人呢?解决方案解决方案char studentId3010=01,02,03,04;char studentName3020=张三张三,李四李四,王五王五,刘娟刘娟;float scoreComputer30=88.5,86.5,75,68.5;float scoreEnglish30=
4、78,75.5,65.5,82;float scoreMath30=78,75.5,65,82.5;1.使用数组01020304张三张三李四李四王五王五刘娟刘娟88.586.57568.57888827286928578分配内存不集中,寻址效率不高分配内存不集中,寻址效率不高不能建立数组间的关系不能建立数组间的关系对数组进行赋初值时,容易发生错位对数组进行赋初值时,容易发生错位2.使用多维数组张三李四王五刘娟88.586.57568.5010203047888827286928578C 语言不允许一个数组语言不允许一个数组包含多种数据类型包含多种数据类型怎么解决呢?湖南工业大学计算机与通信学院
5、湖南工业大学计算机与通信学院希望的内存分配图希望的内存分配图 01张三张三88.5787802李四李四86.575.575.503王五王五7565.56504刘娟刘娟68.58282.5人们设想找到一种数据类型,把学生的信息当一个整体人们设想找到一种数据类型,把学生的信息当一个整体来存储,即这个整体中元素的数据类型可以不同。这个来存储,即这个整体中元素的数据类型可以不同。这个数据类型即结构体数据类型即结构体,可以将不同类型的数据组合成一个,可以将不同类型的数据组合成一个整体,用来表示简单类型无法描述的复杂对象,同时可整体,用来表示简单类型无法描述的复杂对象,同时可以用结构体来定义用户自己的数据
6、类型。以用结构体来定义用户自己的数据类型。扩展开来,在现实中,扩展开来,在现实中,几个数据之间有着密切联系,它几个数据之间有着密切联系,它们用来描述事物的几个方面,但它们不属于同一类型,们用来描述事物的几个方面,但它们不属于同一类型,这时可以用结构体数据类型。也就是说结构体为程序员这时可以用结构体数据类型。也就是说结构体为程序员提供了一种封装一组相关数据元素的简便方法。提供了一种封装一组相关数据元素的简便方法。湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院9.1 问题的提出问题的提出又如,在学生信息管理系统中填又如,在学生信息管理系统中填加个属性:是否是中共党员,如加个属性:是否是中
7、共党员,如果不是属性的值为果不是属性的值为0(int),如),如果是属性的值为入党的时间果是属性的值为入党的时间(char)。在某一时间,属性只有在某一时间,属性只有一种值,而且数据类型不同,一种值,而且数据类型不同,这这种情况用什么数据类型描述呢?种情况用什么数据类型描述呢?对于这种应用,对于这种应用,C C语言引入了共用体类型。语言引入了共用体类型。共用体是一种同一存储区域由不同类型变量共享的数据共用体是一种同一存储区域由不同类型变量共享的数据类型,它提供类型,它提供种方法能在同一存储区中操作不同类型种方法能在同一存储区中操作不同类型的数据,也就是说共用体采用的是覆盖存储技术,准许的数据,
8、也就是说共用体采用的是覆盖存储技术,准许不同类型数据互相覆盖。不同类型数据互相覆盖。湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院9.1 问题的提出问题的提出此时用整型数来表示这些变量的取值,其直观此时用整型数来表示这些变量的取值,其直观性很差,如在程序中使用性很差,如在程序中使用1,对于非编程者来说,对于非编程者来说,它是代表星期一呢?还是一月份?很难区分。它是代表星期一呢?还是一月份?很难区分。为提高程序的可读性,引入非数值量,即一些为提高程序的可读性,引入非数值量,即一些有意义的符号是非常必要的。有意义的符号是非常必要的。另外,在实际应用中,有些变量的取值另外,在实际应用中,有
9、些变量的取值范围是有限的,仅可能只有几个值范围是有限的,仅可能只有几个值。一个星期一个星期7天,一天,一年年12个月个月 一副扑克有一副扑克有4种花色,每种花色,每一花色有一花色有13张牌张牌 对于这种应用,对于这种应用,C语言引入语言引入枚举类型枚举类型,所谓,所谓“枚举枚举”,就是将变量可取的值一一列举出来。,就是将变量可取的值一一列举出来。湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院从基本数据类型、复合数据类型到抽象数据类型从基本数据类型、复合数据类型到抽象数据类型v计算机本身是没有数据类型的概念的计算机本身是没有数据类型的概念的n内存里存储的内容,你认为它代表什么,它就代表
10、什么v高级语言设计了基本数据类型:整型、浮点型、字高级语言设计了基本数据类型:整型、浮点型、字符型等。不同的语言也会定义不同的基本类型符型等。不同的语言也会定义不同的基本类型n基本数据类型并不能方便地解决所有问题v复合数据类型是基本数据类型迭代派生而来复合数据类型是基本数据类型迭代派生而来n典型的代表就是“结构”,数组、指针也可算作此类v抽象数据类型抽象数据类型(ADT)(ADT)在复合数据类型的基础上增加在复合数据类型的基础上增加了对数据的操作了对数据的操作v抽象数据类型进而进化为抽象数据类型进而进化为“类类”n这是一个跨时代的进步湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院 结
11、构成员;结构名structnodechar id20;char name20;float score3;C 语言中的有效数据类型9.2 9.2 结构体结构体9.2.1 结构体类型结构体类型上述学生基本信息(学号、姓名、各科成绩)的例子,上述学生基本信息(学号、姓名、各科成绩)的例子,C语言程语言程序可用结构体定义为:序可用结构体定义为:湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院9.2.1 9.2.1 结构体类型结构体类型结构体类型的定义structstruct 结构体名结构体名 类型标识符类型标识符 成员名成员名1 1;类型标识符类型标识符 成员名成员名2 2;struct是是关
12、键字关键字,不能省略不能省略合法标识符合法标识符可省略:无名结构体可省略:无名结构体成员类型可以是基本成员类型可以是基本类型或构造类型类型或构造类型必须有分号必须有分号湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院struct node char id20;char name20;float score3;idnamenodev结构定义并不预留内存v结构定义放置在程序的开始部分,位于头文件声明之后 scorev结构定义仅描述了一个结构的形式。如果要在程序里使用结构,需要声明结构变量。9.2.1 9.2.1 结构体类型结构体类型湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院s
13、truct address char city10;char street20;int code;int zip;嵌套结构嵌套结构struct nest_friendslist char name10;int age;struct address addr;char telephone13;在定义嵌套的结构类型在定义嵌套的结构类型时,必须先定义成员的时,必须先定义成员的结构类型,再定义主结结构类型,再定义主结构类型。构类型。姓名年龄通信地址联系电话城市街道门牌号邮编湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院9.2.29.2.2结构体类型变量结构体类型变量1.1.结构体类型变量的定
14、义结构体类型变量的定义 结构体变量的定义有以下几种形式:结构体变量的定义有以下几种形式:单独定义:单独定义:先先定义结构体定义结构体类型类型,后后定义结构体定义结构体变量变量 struct node char id20;char name15;int score3;struct node student1,student2;直接定义:直接定义:在定义结构体类型同在定义结构体类型同时定义结构体变量时定义结构体变量 struct node char id20;char name15;int score3;student1,student2;结构体类型名结构体类型名node可以不写可以不写湖南工业大
15、学计算机与通信学院湖南工业大学计算机与通信学院内存student1struct node student1=01,Yao Ming,80,90.5;结构体类型变量的初始化结构体类型变量的初始化01Yao Ming80注意:v赋值的顺序应与成员声明时的顺序一样v允许初始化语句中的值的数目比结构成员数目少90.5初始化一般形式:结构体类型名 结构体变量=初值表;湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院结构体变量的引用结构体变量的引用结构体变量的引用原则结构体变量的引用原则结构体变量不能整体输入输出,要通过成员运算符“.”,逐个访问其成员,且访问的格式为:struct date in
16、t year;int month;int day;struct date birth;printf(%d,%d,%dprintf(%d,%d,%d,birthbirth);printf(%d,%d,%dprintf(%d,%d,%d,birth.yearbirth.year,birth.month,birth.daybirth.month,birth.day);结构体变量.成员“.”是成员运算符,是成员运算符,优先级最高优先级最高湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院如果某成员本身又是一个结构类型,则只能通过多级的分量运如果某成员本身又是一个结构类型,则只能通过多级的分量运算
17、,对最低一级的成员进行引用。算,对最低一级的成员进行引用。引用结构变量引用结构变量studentstudent中的中的birthdaybirthday成员的格式分别为:成员的格式分别为:student.birthday.yearstudent.birthday.yearstudent.birthday.monthstudent.birthday.monthstudent.birthday.daystudent.birthday.day结构体变量的引用struct std_info int num;char name20;char sex;float score;struct date birt
18、hday;student;struct date int year;int month;int day;num name sex score birthdaystudent:对最低一级成员,可像同类型的普通变量一样,进行相对最低一级成员,可像同类型的普通变量一样,进行相应的各种运算。应的各种运算。结构变量结构变量.成员成员.子成员子成员.最低级子成员最低级子成员湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院student2student2.id=02;student2.name=Zhang Zi Liang;student2.score1=88;printf(请输入成绩:请输入成绩:
19、n);scanf(%f,&student2.score2);结构变量赋值结构变量赋值02Zhang Zi Liang 88用输入语句或赋值语句来给结构变量的各个成员赋值7878student3=student2;student302Zhang Zi Liang 8878结构变量的整体赋值湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院例例9-19-1学生的基本信息包括学号、姓名、学生的基本信息包括学号、姓名、3 3门成绩、平均分、总分。输入一门成绩、平均分、总分。输入一个学生的前个学生的前3 3项基本信息,计算平均分和总分并输出。项基本信息,计算平均分和总分并输出。printf(请输入
20、姓名:请输入姓名:);gets(stu1.name);for(int i=0;i3;i+)printf(请输入请输入%s 成绩成绩:,CLASSNAMEi);scanf(%f,&stu1.scorei);sum+=stu1.scorei;stu1.sum=sum;stu1.ave=sum/3;printf(学号学号:%s姓名姓名:%s总成绩总成绩:%f 平均成绩平均成绩%.2fn,stu1.id,stu1.name,stu1.sum,stu1.ave);for(i=0;i CLASS;i+)printf(%s 成绩成绩:%.2fn,CLASSNAMEi,stu1.scorei);分析分析 :定
21、义一个结构体类型对应于学生的基本信定义一个结构体类型对应于学生的基本信息。输入学生信息,即对结构体变量的各息。输入学生信息,即对结构体变量的各成员项逐个赋值,总分我们利用循环结构成员项逐个赋值,总分我们利用循环结构进行计算。输出学生信息,我们用进行计算。输出学生信息,我们用printf()格式控制输出。格式控制输出。#include#define CLASS 3struct node char id10;/学号学号 char name15;/姓名姓名 float score3;/成绩成绩 float sum;/总分总分 float ave;/平均分平均分;char CLASSNAMECLASS
22、30=计算机计算机,英语英语,数学数学;void main()struct node stu1;float sum=0;printf(请输入学号:请输入学号:);gets(stu1.id);湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院思考题思考题9-19-1:v在上面的程序中,考虑如果把在上面的程序中,考虑如果把gets(stu1.name)gets(stu1.name)语句语句改为改为scanf(%s,stu1.name)scanf(%s,stu1.name)有什么不同?有什么不同?v什么是结构体类型?什么是结构体变量?结构体类什么是结构体类型?什么是结构体变量?结构体类型与数组
23、类型有什么区别和联系?型与数组类型有什么区别和联系?湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院v一个结构变量只能表示一个实体的信息,如果一个结构变量只能表示一个实体的信息,如果有许多相同类型的实体,就需要使用有许多相同类型的实体,就需要使用结构数组结构数组。v结构数组是结构与数组的结合,与普通数组的结构数组是结构与数组的结合,与普通数组的不同之处在于不同之处在于每个数组元素都是一个结构类型每个数组元素都是一个结构类型的数据的数据,包括各个成员项。,包括各个成员项。9.2.3 9.2.3 结构数组结构数组 湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院1.1.结构体数组的
24、定义结构体数组的定义01Lilin808887.502Zhanghua92869903Wuli768078.5stu0stu1stu2结构数组的定义方法与结构变量相同结构数组的定义方法与结构变量相同单独定义:单独定义:先先定义结构体定义结构体类型类型,后后定义结构体定义结构体数组数组 struct node char id20;char name15;int score3;struct node stu30;直接定义:直接定义:在定义结构体类型同在定义结构体类型同时定义结构体数组时定义结构体数组 struct node char id20;char name15;int score3;stu
25、30;结构体类型名结构体类型名node可以不写可以不写湖南工业大学计算机与通信学院湖南工业大学计算机与通信学院struct node char id20;char name15;int score3;;struct node student10=01,Wang li,78.5,98.5,86.5,02,Zhang Fun,88.5,78.5,81.5,03,Li Ling,76.5,68.5,76.5;2.2.结构体数组的初始化结构体数组的初始化结构体类型名结构体类型名 结构体数组名结构体数组名n初值表初值表1,初值表初值表2,.,初值表初值表n;思考:思考:v结构体数组初始化时,红色的括号能
展开阅读全文