C语言 第8章 结构体、共用体与枚举类型
第8章 结构体、共用体与枚举类型 本章要求 理解结构体类型的概念,掌握结构体变量的定义和使用 掌握结构体数组、结构体指针的定义和使用 理解共用体的概念,掌握共用体变量的定义和使用 了解枚举数据类型及自定义数据类型的使用 领会自定义数据类型标识符的意义 理解链表的概念,初步掌握动态链表的常见操作
本章重点 结构体变量的定义和使用 链表的概念
本章难点 动态链表的常见操作1
第8章 结构体、共用体与枚举类型 8.1 8.2 8.3 8.4 8.5 8.6 8.7 结构体类型与结构体变量 结构体数组 结构体与函数 共用体 枚举类型 自定义类型标识符 动态数据结构——链表
8.1 结构体类型与结构体变量 8.1.1 结构体概述 例8-1 通过建立表8-1的学生的信息表,要求从键盘输入学生 的信息,并将学生成绩小于平均成绩的学生信息输出。学 号1001 1002 1003 1004
姓 名Zhang Li Wang Zhao
性 别M M F M
年 龄19 18 20 19
成 绩88 90 89 83
8.1 结构体类型与结构体变量#include <stdio.h> #define N 4 void main() { int num[N]; /* 存放各学生的学号 */ char name[N][10]; /* 存放各学生的姓名 */ char sex[N]; /* 存放各学生的性别*/ int age[N]; /* 存放各学生的年龄*/ float score[N]; /* 存放各学生的成绩*/ int i; float sum=0,aver; /* 表示总成绩和平均成绩 */ for(i=0;i<N;i++) { scanf("%d %s %c %d %f",&num[i],name[i],&sex[i],&age[i],&score[i]); sum+=score[i]; } aver=sum/N; printf("\n");
8.1 结构体类型与结构体变量for(i=0;i<N;i++) if (score[i]<aver) printf("%d%s%c%d%f\n", num[i],name[i],sex[i],age[i], score[i]); }
由于程序num、name、sex、age、score分别定义为互 相独立的数组,难以反映它们之间的内在联系。
8.1 结构体类型与结构体变量#include <stdio.h> #define N 4 struct student { int num; char name[20]; char sex; int age; float score; }; void main() { struct student stu[N]; int i; float sum=0,aver;
/* 定义学生类型结构体 */ /* 学号成员 */ /* 姓名成员 */ /* 性别成员 */ /* 年龄成员 */ /* 成绩成员 */
/* 定义学生结构体数组 */
/* 表示总成绩和平均成绩 */ 6
8.1 结构体类型与结构体变量for(i=0;i<N;i++) { scanf("%d%s%c%d%f", &stu[i].num,stu[i].name,&stu[i].sex, &stu[i].age,&stu[i].score); sum+=stu[i].score; } aver=sum/N; printf("\n"); for(i=0;i<N;i++) if (stu[i].score<aver) printf("%d%s%c%d%f\n", stu[i].num,stu[i].name,stu[i].sex, stu[i].age,stu[i].score); } 7
8.1 结构体类型与结构体变量 说明: 使用结构体数据,可将一个学生的数据有机组合起来,例中
的stu是个结构体数组,stu[i]表第i个学生的数组,stu[i].num 表第i个学生的学号,stu[i].name表第i个学生的姓名等。 结构体的每一个成员都是通过其
名字来引用,引用形式如下:结构体变量名. 成员名
结构体的引入为处理复杂的数据结构提供了有力的手段(如 链表等),也为函数间传递一组不同类型的数据提供了方便。 特别是对于数据结构比较复杂的大型程序提供了方便。
8.1 结构体类型与结构体变量 8.1.2 结构体的声明 定义结构体类型的一般形式: struct 结构体名 { 结构成员1; 结构成员2; …… 结构成员n; }; 其中,struct为结构体定义的关键字,不能省略。 结构体名由用户给定,即是定义的结构体类型名。 结构体中的各个成员,每个成员又有自己的数据类型,它们 可以是整型、实型、字符型、指针或结构类型等,它们都应 进行类型说明。 9
8.1 结构体类型与结构体变量 有关结构体的几点说明:
结构体类型的定义只是说明了一种结构体的组织形式,在编 译时并不为它分配存储空间。只是在定义结构体类型变量后, 才为变量按照其组织形式分配内存空间。 当定义一个结构体的成员又是一个结构体类型,这称为结构 体的嵌套定义。 struct date struct student { int year; { int num; int month; char name[20]; int day; char sex; };struct date birthday; float score; };
8.1 结构体类型与结构体变量 结构体定义可以在函数内部,也可在函数外部。在函数内部 定义的结构体,只有在函数内部使用,在函数外部定义的结 构体,从定义点起到源文件尾之间的所有函数都可使用。 结构体成员的名字可以同程序中的其他变量名相同,两者的 意义不同,不会相混。
8.1 结构体类型与结构体变量 8.1.3 结构体变量的定义 先说明结构体类型,再定义变量 struct student { int num; char name[20]; char sex; int age; float score; }; struct student stu1, stu2;
8.1 结构体类型与结构体变量 在声明类型的同时定义变量 struct 结构体名 { 成员列表; }变量名列表; struct student { int num; char name[20]; char sex; int age; float score; }stu1,stu2; 13
8.1 结构体类型与结构体变量 直接定义结构类型变量 struct { 成员列表; }变量名列表; struct { int num; char name[20]; char sex; int age; float score; }stu1,stu2; 14
8.1 结构体类型与结构体变量 对结构体变量,系统要为其分配存储空间。一个结构体 变量所占存储空间的大小,是其所含结构体成员所占存 储空间的总和,这些结构体成员所占的存储空间是由一 组连续的存储空间所组成。 也可用sizeof运算来求得,一个变量或数据类型在内存 中所占内存空间的字节数,使用形式是: sizeof(变量名) 或 sizeof(类型标识符)
8.1 结构体类型与结构体变量 8.1.4 结构体变量的引用 C语言中除两个相同
类型结构体变量可以相互整体赋值外,不能对结构体 变量名直接引用,只能对结构体变量中的成员分别进行引用,即对结构变 量的操作,如赋值、输入、输出、运算等都是通过结构变量的成员来实现 的。 结构体变量的引用格式 结构体变量名.成员名 stu1.num=10001; strcpy(,"zhang"); /* 此处不能写成 ="zhang" */ stu1.sex='M'; stu1.age=19; stu1.score=88; 不能把结构变量作为整体进行输入输出,下面的引用方式是错误的: scanf("%d%s%c%d%f",stu1); 正确的引用方式可以是: gets(); scanf("%d%c%d%f", &stu1.num,&stu1.sex,&stu1.age,&stu1.score);
8.1 结构体类型与结构体变量 结构体嵌套时逐级引用struct date { int month; int day; int year; }; struct person { char name[20]; char sex; struct date birthday; }; struct person person1; person1.birthday.month 17
8.1 结构体类型与结构体变量 同类型结构体变量间的整体赋值 结构体变量可以通过整体赋值,将一个结构体变量中的所有数据,赋给另 一个结构体类型相同的结构体变量中对应的数据成员。 例8-2 建立一个学生的基本情况表,然后将其打印输出。 #include <stdio.h> #include <string.h> main() { struct student { int num; char name[20]; char sex; int age; float score; }stu1,stu2;
8.1 结构体类型与结构体变量stu1.num=10001; strcpy(,"zhang"); stu …… 此处隐藏:2488字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [专业资料]《蜜蜂之家》教学反思
- [专业资料]过去分词作定语和表语1
- [专业资料]苏州工业园区住房公积金贷款申请表
- [专业资料]保安管理制度及处罚条例细则
- [专业资料]2018年中国工程咨询市场发展现状调研及
- [专业资料]2015年电大本科《学前教育科研方法》期
- [专业资料]数字信号处理实验 matlab版 离散傅里叶
- [专业资料]“十三五”重点项目-虎杖白藜芦醇及功
- [专业资料]2015-2020年中国竹木工艺市场需求及投
- [专业资料]国际贸易理论与实务作业五:理论案例分
- [专业资料]财政部修订发布事业单位会计制度
- [专业资料]BCA蛋白浓度测定试剂盒(增强型)
- [专业资料]工程进度总计划横道图模板(通用版)
- [专业资料]七年级地理同步练习(天气与气候)
- [专业资料]X光安检机介绍火灾自动报警系统的组成
- [专业资料]衢州市人民政府办公室关于印发衢州市区
- [专业资料]经济全球化及其影响[1]
- [专业资料]质粒DNA限制性酶切图谱分析
- [专业资料]国家安全人民防线工作“六项”制度
- [专业资料]劳动力投入计划及保证措施
- 电子账册联网监管培训手册
- 人教版语文七年级上第1课《在山的那边
- 对我区担保行业发展现状的思考与建议
- 平面四边形网格自动生成方法研究
- 2016年党课学习心得体会范文
- 如何设置电脑定时关机
- 全球最美人妖排行榜新鲜出炉
- 社会实践调查报告及问卷
- Visual Basic习题集
- 《鱼我所欲也》课件2
- 浙江省会计从业资格考试试卷
- 全遥控数字音量控制的D 类功率放大器资
- 鞍钢宪法与后福特主义
- 电表的改装与校准实验报告(1)
- 2014年高考理科数学真题解析分类汇编:
- Windows 7 AIK 的使用
- 风电场全场停电事故应急处置方案
- 化工原理选填题题库(下)
- 关于产学研合作教育模式的学习与思考
- 西安先锋公馆项目前期定位报告




