当前位置:文档之家› 结构体、共用体与枚举类型

结构体、共用体与枚举类型


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