资源描述:
《结构体、共用体与枚举类型》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章结构体、共用体与枚举类型本章要求为什么要引入结构体,结构体与数组有什么本质不同?如何定义结构体,有几种定义形式?结构体变量与结构体指针变量有何区别,它们如何各自引用结构体成员?结构体数据如何作为函数的参数?为什么要引入链表,如何利用链表对内存进行动态管理?本章重点结构体变量的定义和使用链表的概念本章难点动态链表的常见操作第9章结构体、共用体与枚举类型9.1问题的提出与示例9.2结构体类型的说明与变量定义9.3结构体指针变量9.4结构体数组9.5结构体与函数9.6链表与动态内存管理9.7结构体综合应用举例9.1问题的提出与示例9.1.1结构
2、体概述例如,描述一个学生的数据实体包含学号、姓名、性别、出生年月、课程成绩、家庭住址、联系电话等数据项。各个数据项的类型是不同的,学号可为整型或字符串形式;性别为字符型;出生年月又分为年,月,日,它们可以分别为整型表示;课程成绩可以是整型或实型;家庭住址应为字符串;电话号码可以是整型或字符串形式。对于这样一个实体,不能统一用数组来描述,因为数组中各元素的类型、长度必须一致。如果用独立的简单数据项或数组分别表示它们,就不能体现一个实体数据的整体性和相互关联性,也难以操作。对于这种由多种不同类型的数据组成的数据实体,C语言专门用结构体数据类型来描述
3、,结构体中所包含的数据项称为结构体的成员,结构体由用户根据实际来定义。9.1问题的提出与示例下表是一张100个学生成绩管理表,要求计算并打印出每个学生的平均成绩。学号姓名性别出生年月联系电话家庭地址数学英语C程序平均成绩84773801陈云男1989.287500341浙江宁波8089769.1问题的提出与示例如果按照以前学过的数组方法,可以定义如下的多个数组并赋初值如下:intstu_id[100]={84773801,84773802,84773803,84773804,84773805,84773806};/*定义一维数组存放每个学生的学
4、号*/charstu_name[100][8]={“陈云”,“沈栋栋”,“易婷婷”,“谢浩杰”,“郑强”};/*定义字符串数组存放每个学生的姓名*/charstu_sex[100]={‘m’,‘m’,‘f’‘m’,‘m’};/*定义字符数组存放每个学生的性别*/intstu_year[100]={1989,1989,1990,1988,1988};/*定义一维数组存放每个学生的出生年份*/……..这些数组的数据在内存中的存储顺序是:先存储所有学生的学号、再接着存储所有学生的姓名、接着性别、出生年份、出生月份、联系电话、课程成绩、平均成绩。也就是
5、把所有学生的同一个类别(上表中某一列)以定义某一个数组的形式单独放在一起,相当于所有学号放在一个数组里里,所有姓名放在另一个数组里,依次类推,要处理某一个学生的信息如计算平均值并打印某个学生的信息,要分别查询所有不同的数组,很容易出错且效率不高。这样为每一项内容分别定义变量或数组的方法导致存储结构零乱,处理过程非常繁琐,一般不采用这种方法。未了解决这个问题,C语言定义了一种可由用户自定义的数据类型,根据实际问题,将不同数据类型集中一起,把内在有联系的不同类型的数据统一成一个整体,设计符合要求的新的数据类型,称为结构体类型。这样利用结构体的特性可
6、以把某一个学生的所有相关的不同类型的数据项都顺序存储在一起,便于一个个学生的处理。如针对上述要求,可以定义为如下的学生的结构体:structstudent{intstu_id;/*学生的学号*/charstu_name[8];/*学生的姓名*/charstu_sex;/*学生的性别*/struct{intyear;/*学生的出生年份*/intmonth;/*学生的出生月份*/}birthday;intstu_phone;/*学生的联系电话*/charstu_address[30];/*学生的家庭地址*/intstu_course[3];/*学生
7、的三门课成绩*/floatstu_average;/*学生的平均成绩*/};声明了一种新的数据类型structstudent。这个数据类型仅相当于一种结构模式,与int,float,char等类型具有同等地位,也就是用户自定义了一种新的数据类型,但并没有为structstudent分配相应的存储空间,就像系统并没有为int分配存储空间一样,而是需要定义一个整型变量,为这个整型变量分配存储空间。同样的,也需要一个结构体变量,为这个结构体变量分配存储空间。【例9-1】按表9-1的形式从键盘依次输入每个学生的学号,姓名,出生年月,三门课的成绩,计算并
8、打印出每个学生的平均成绩。分析:这里首先要定义一个描述学生学号,姓名,出生年月,三门课,平均成绩的结构体类型,再定义一个结构体变量,通过循环语句对这个