




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章 结构体等构造数据类型,本章需要掌握的知识点 结构体的类型说明 结构体变量的定义 结构体成员的引用 使用指针操作结构体数据,内容安排,8.1 结构体 8.2 结构体数组 8.3 结构体与指针 8.4 结构体与函数 *8.5 联合体 *8.6 枚举 8.7 类型定义,8.1 结构体,C语言提供结构体的目的 结构体类型说明 结构体变量的定义和初始化 结构体成员的引用,1. C语言提供结构体的目的,举例:编写一个学生成绩打印程序,要求:请求用户输入学生的基本情况,其中包括每位学生的学号、姓名和成绩,将每位同学的成绩添加5分,然后按照以下格式输出学生的成绩列表。 格式描述如下: 学号 姓名 成绩 1 张三 99 2 王五 60 。,实例的数据分析,数据特点: 描述学生基本信息的数据不是一个单独的数值、或者字符或者字符串。而是由学号、姓名和成绩等多个数据项一起构成的。,基于旧知识的数据对象描述,将学号、姓名和成绩分别定义为互相独立的简单变量。 缺点:难以反映它们之间的内在联系。从而导致数据难于理解和处理。,结构体的引入,在C语言中,专门提供结构体机制 来描述和处理这些由多个数据项组 成的数据。,2. 结构体类型的声明,结构体通常是由多个数据项所组成的集合体。构成结构体的数据项称之为结构体成员,每一个成员具有各自的名字,可以分别属于不同的数据类型。,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ;,成员类型可以是 基本型或结构体型,struct是关键字, 不能省略,合法标识符 可省:无名结构体,例 struct student int code; /学号 char name20; float score; ;,可换成 char code13;,3 结构体变量的定义和初始化,1、结构体变量的定义 2、结构体变量的初始化,1、结构体变量的定义,定义方法共3种 先声明结构体类型,再定义结构体变量 声明结构体类型的同时定义结构体变量 使用无名结构体类型直接定义 各种方法的适用情况?,a、先声明结构体类型再定义变量,例 struct student int code; char name20; float score; ; struct student stu1,stu2;,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名列表;,b、声明类型的同时定义变量,例 struct student int code; char name20; float score; stu1,stu2;,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 变量名列表;,c、使用无名结构体类型直接定义,例 struct int code; char name20; float score; stu1,stu2;,struct 类型标识符 成员名; 类型标识符 成员名; . 变量名列表;,各种方法的适用情况,结构体类型只需使用一次,可以使用c方法。 类型和变量的定义无法放置在一起的情况,必须使用a方法。 如果变量的定义和类型的声明能够放置在一起,a、b方法都合适。,结构体变量的初始化,例 struct student int code; char name20; float score; ; struct student stu1=2,“WangWu”,99;,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 结构体变量=初始数据列表;,注意事项,类型和变量是不同的概念,不要混同。变量是一个具体的数据对象,可以参与运算。而类型不是。 成员的类型也可以是一个结构体类型。,例 struct date int month; int day; int year; ; struct student int code; char name20; struct date birthday; stu;,4 结构体变量及其成员的引用,结构体变量的引用 结构体变量成员的直接引用 结构体变量成员的逐级引用,1、结构体变量的引用,可以将一个结构体变量作为一个整体赋值给另一个同类型的结构体变量。 struct student s1=1,”wangli”,90, s2; s2 = s1; 不能将一个结构体变量作为一个整体进行输入和输出。只能对结构体变量中的各个成员分别进行输入和输出。,2、结构体变量成员的引用,成员(分量)运算符,引用方式: 结构体变量名.成员名,例 struct student int code; char name20; float score; s1,s2; s1.code=10; s2.score=85.5; s1.score = s2.score 10; printf(“code=%d, score=%d”, s1.code, s1.score),3、结构体变量成员的逐级引用,结构体嵌套时需逐级引用,例 struct date int month; int day; int year; ; struct student int code; struct date birthday; stu; stu.birthday.month=12;,8.2 结构体数组,结构体数组的定义 结构体数组的初始化 结构体数组元素成员的引用,1、结构体数组的定义,类型说明符 数组名常量表达式; int a100; struct student stus20;,2、结构体数组的初始化,首先考虑数组的初始化。 然后考虑数组中每一个元素的初始化,也就是对每一个元素进行结构体的初始化。,struct student char number13; char name20; float Clanguage; ; struct student s3 = “01“,“Wang Xiao 2“,78, “02“,“Zhang 3“, 99, “03“,“Li 4“, 91 ,3、结构体数组元素成员的引用,先数组元素再结构体成员 假如有定义struct student stus20; 那么stus0.code就是引用stus数组中第1个元素中的code成员。,补充: 结构体基本应用举例,需求描述 数据结构描述 程序输入部分 程序处理部分 程序输出部分 程序的整体组合,1、需求描述,要求:请求用户输入学生的基本情况,其中包括每位学生的学号、姓名和C语言课程的成绩,将每位同学的成绩添加5分,然后按照以下格式输出学生的成绩列表。 格式描述如下: 学号 姓名 成绩 1 张三 99 2 王五 60 。,2、数据结构描述,#define NUM 20 struct student int code; char name20; int score; ; struct student stusNUM;,3、程序输入部分,int i=0; printf(“Please input code,name,score of student %d:n“,i+1); scanf(“%d“,for(i=0;iNUM;i+) ,4、程序处理部分,stusi.score = stusi.score + 5;,for(i=0;iNUM;i+) ,5、程序输出部分,printf(“n%-15s%-20s%-5sn”,“学号”,“姓名 “, “C语言成绩“); printf(“ %-15d “,stusi.code); printf(“%-20s“,); printf(“%-5d“,stusi.score); printf(“n“);,for(i=0;iNUM;i+) ,-代表左对齐,15代表显示数据用的域宽,6、程序的整体组合,#include void main() /* 数据结构描述部分 */ /* 程序输入部分 */ /* 程序处理部分 */ /* 程序输出部分 */ ,StuStructInput.c,8.3 结构体与指针,结构体指针 指向结构体数组的指针,1、结构体指针,定义:struct 结构体名 *结构体指针名;,如何通过指针访问结构体成员的值?,方法一:使用指针运算符*引用结构体成员形式,例 int n; int *p= n=10,struct student stu1; struct student *p= (*p).num=101,()不能省略,如何通过指针访问结构体成员的值?,方法二:使用指向运算符引用结构体成员,struct student long int num; char name20; char sex; float score; stu_1,*p; p=,访问p指向的结构体变量的sex成员,2、指向结构体数组的指针,struct student int num; char name20; char sex; int age; stu3=10101,“Li Lin“,M,18, 10102,“Zhang Fun“,M,19, 10104,“Wang Min“,F,20; void main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age); ,8.4 结构体与函数,用结构体变量作参数 用指向结构体变量的指针作参数,1、用结构体变量作函数参数,用结构体变量作为函数参数,可以从调用函 数向被调用函数完整地传递结构体变量中的 所有成员。,StruVarPara.c,1、用结构体变量作函数参数,for(i=0;iNUM;i+) ListStudents(stusi);/实参是结构体变量的名字,void ListStudents(struct student stu) printf(“%-15d“,stu.code); printf(“%-20s“,); printf(“%-5d“,stu.score); printf(“n“); ,StruVarPara.c,关键问题,结构体数据对象跟数组对象作为参数传递时有何不同?,2、用指向结构体变量的指针作函数参数,被调用函数获取调用函数数据对象的地址,从 而可以通过指针访问调用函数中的结构体对象。,StruPtVarPara.c,2、用指向结构体变量的指针作函数参数,StruPtVarPara.c,for(i=0;iNUM;i+) ListStudents(/实参是结构体变量的地址,void ListStudents(struct student *pStu) printf(“%-15d“,pStu-code); printf(“%-20s“,pStu-name); printf(“%-5d“,pStu-score); printf(“n“); ,关键问题,传递地址相比较于传递整个数据对象有何优点?,开销小,速度快!,类型定义的格式如下:,例2: typedef struct student STUDENT; STUDENT z3;,8.7 类型定义,typedef 原类型名 新类型名;,例1: typedef int COUNTER; COUNTER i;,使用类型定义可以提高程序的可读性,使用类型定义还可以简化变量的定义,struct student int code; char name20; int score; ; struct student zhangsan;,typedef struct student int code; char name20; int score; STUDENT; STUDENT zhangsan;,struct student ;,typedef struct student STUDENT;,STUDENT zhangsan;,小结,如何声明一个新的结构体类型? 定义结构体变量有哪些方法?分别适用什么情况? 如何初始化结构体变量? 如何引用结构体变量中的成员变量? 如何定义和使用结构体数组?,小结(续),如何定义结构体类型指针? 如何通过结构体指针访问结构体成员? 结构体实参采用什么方式向形参传递数据?,课堂作业,请求用户输入学生的基本情况,其中包括每 位学生的学号、姓名和两门课的成绩。然后 用下面的格式输出学生的成绩列表。 格式描
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 输煤运行安全培训需求课件
- 借调合同书:金融机构员工临时借调及业务协同协议
- 国际物流服务合同标的时效性与成本控制
- 股权托管与收购的股权激励计划调整与实施合同
- 工地内墙涂料施工与风险评估合同协议书
- 散装水泥罐购销合同及环保设备维护与升级服务协议
- 创始股东股权分配与公司治理结构协议
- 输气站安全管理培训课件
- 跆拳道培训课件
- 小班安全培训心得课件
- 信息可视化设计全套教学课件
- 口腔粘膜病课件
- 关于PedSQL-4.0儿童生存质量测定量表调查
- 年产62万吨甲醇制烯烃(MTO)项目初步设计说明书
- 联通创新人才认证(解决方案)考试题库(附答案)
- 全成本管理探索与实践
- ICU患者的早期活动
- 出纳课件 转账支票pptx
- TSZUAVIA 009.11-2019 多旋翼无人机系统实验室环境试验方法 第11部分:淋雨试验
- ps6000自动化系统用户操作及问题处理培训
- 商务礼仪情景剧剧本范文(通用5篇)
评论
0/150
提交评论