版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、结构体,徐秋红 办公地点:主楼四层(信息学院)411室 办公电话:01062336516 E-mail:,主要内容,什么是结构体 如何定义一个结构体 如何声明结构体变量 如何引用结构体变量:结构体的输入、输出操作、结构体成员操作等 结构体数组,什么是结构体,除数组以外的又一个构造类型 为什么引入结构体的概念 例如:体检表,什么是结构体,例如:学生的成绩单,这些表格中数据的特点是什么?,含义上具有相关性 表现的形式上不完全相同,什么是结构体,表格的数据特点:表格中集合了各种类型的数据,无法用前面学过的任何单一种类的数据类型来完全描述 因此C语言引入了一种能集中不同的数据类型于一体的构造类型 -结
2、构体,什么是结构体,结构体是一个新的构造类型 是由编程者根据自己的需求而设计的一种结构形式(或称为由编程者自己设计的数据类型) 例如:,通过分析和整理要处理的数据内容,归纳需要哪些数据项,并指出每个数据项的表现形式(即它属于哪种数据类型)。 然后准备定义新的数据类型:结构体,定义结构体,定义结构体 定义两个内容,struct score char num10; char name20; int english; int math; ;,自定义了一个数据类型, 它的名字为score,结构体的内容是由多个数据项组成,每个数据项被称为该结构体的结构体成员,定义结构体,每个结构体必须先定义,后引用 定
3、义结构体其实是对结构体内部构成形式进行描述,即对其成员的声明,包括每个成员所具有的数据类型的描述。,定义结构体类型的语句格式: struct 结构体类型名 结构体的成员列表; ;,struct coordinate double x; double y; ;,对每个成员必须分别声明,无论他们是否具有相同的数据类型,通讯录每条记录的描述:,定义结构体类型,struct addr char name20; char depart30; /* 工作单位 */ char address30; /* 住址 */ int postcode; /* 邮编 */ char phone9; /* 电话号码 */
4、 char email30; /* E-mail */ ;,声明结构体变量,1)定义了结构体类型后,再声明结构体类型的变量 struct 结构体类型名 结构体成员表; ; struct 结构体类型名结构体变量名;,先定义结构体类型,再声明结构体类型的变量,声明结构体变量,struct singer int s_id; double s1; /* 参赛歌曲得分 */ double s2; /* 知识问答得分 */ double sum; /* 该选手的总得分 */ ;,struct singer a1, a2, a3, a4, a5, a6;,声明结构体变量,2) 在定义结构体类型的同时声明结构
5、体变量。即将结构体类型的定义和声明结构体变量放在同一个语句中. 其一般形式如下: struct 结构体类型名 结构体成员表; 结构体变量名表;,struct singer int s_id; double s1; double s2; double sum; a1,a2,a3,a4,a5,a6;,声明结构体变量,3)在定义结构体类型时省略结构体类型名,并直接声明结构体变量。 一般形式如下: struct 结构体成员表; 结构体变量名表; 即定义的结构体没有结构体类型名。,如果省略结构体类型名, 则称之为无名结构体, 这种情况常常出现在函数内部。使用这种结构体定义形式时,一定是在定义结构体类型的
6、同时,就声明结构体变量,struct singer int s_id; double s1; double s2; double sum; a1,a2,a3,a4,a5,a6;,结构体的长度,结构体类型的长度 一旦通过结构体类型定义语句定义了一个结构体类型,则这个结构体类型的长度也就被固定下来,. 一个结构体类型长度的计算 sizeof(结构体类型名) 一个结构体变量长度的计算 sizeof(结构体变量名),定义结构体类型,如 struct singer int s_id; double s1; double s2; stud1; 则结构体变量stud1的长度是多少?,sizeof(数据类型名
7、)返回“数据类型名”的类型长度。 sizeof(变量名)返回“结构体变量”的长度。,定义结构体类型,#include struct singer int s_id; double s1; double s2; stud1; int main(void) printf(nnt 长度: %d %d, sizeof(struct singer); printf(nnt 长度: %d %d, sizeof(stud1); return 0; ,s_long.c,结构体变量的初始化,结构体变量初始化的一般形式为: 方式1: struct 结构体类型名结构体变量名 = 初始化数据; 方式2: struct
8、 结构体类型名 结构体成员表; 结构体变量名 = 初始化数据 ; 方式3: struct 结构体成员表; 结构体变量名 = 初始化数据 ;,结构体变量的初始化,由于结构体类型变量汇集了各类不同数据类型的成员,所以结构体类型变量的初始化就略显复杂。 struct ach /*定义学生结构体类型*/ char name20; /* 学生姓名*/ char sex; /* 性别*/ int num; /* 学号*/ float score3; /* 三科考试成绩*/ stu1= Frank, M, 206110, 78.5, 91.5, 95.0 , stu2;,结构体变量的引用,C语言对结构体变量
9、的处理是通过对其成员的引用实现的。,“.”被称为成员(分量)运算符 它在所有的运算符中优先级最高。,引用结构体变量的成员的一般方式为: 结构体变量名.成员名,一个整体,结构体变量的引用,从键盘给a4赋值,然后输出: scanf(%d, ); scanf(%lf%lf, ); printf( n %d n, ); printf( %f, %f n, ); printf( %f n, );,struct singer int s_id; double s1; double s2; double sum; a1, a2 = 113045, 80, 78, 0, a3, a4;,例如:给变量a1赋值
10、a1.s_id = 102011; a1.s1 = 88.5; a1.s2 = 89; a1.sum = a1.s1+a1.s2;,声明结构体变量,例如: struct ach /* 定义学生结构体类型 */ char name20; /* 学生姓名 */ char sex; /* 性别 */ int num; /* 学号 */ float score3; /* 三门课程的考试成绩 */ ; struct ach stu1=Jonh,M,310,75,96,63, stu2=Lili,F,217,92,87,70;,(stu1.score0+ stu1.score1+ stu1.score2)
11、/3,int i; float avg_2, sum=0.0; avg_2= sum/3;,求每一位学生的平均成绩,avg_1=,for( i=0; i3; i+) sum=sum+stu2.scorei;,结构体数组,struct ach /* 定义学生结构体类型 */ char name20; /* 学生姓名 */ char sex; /* 性别 */ int num; /* 编号 */ float score3; /* 三门课程的考试成绩 */ stu0, stu1 ;,struct ach char name20; char sex; int num; float score3; st
12、u2 ;,stu2=John,M,310,75 96,63, Lili,F,217,92,78,70 ;,printf(n %s, %f , );,, stu0.score2,如果要输出第一位学生的名字和其最后一科的成绩?,如何初始化数组?,对结构体做一个说明,结构体类型是人们制造的一种类型,它与其他C的基本类型的特性一样 结构体变量是由结构体声明的变量。它与C的其他基本变量的特性一样 结构体的成员是由C的其他类型来定义的,为什么结构体的成员不能由其他已经定义的结构体来定义呢?!,结构体定义,再来看一张学生体检表:,Frank M 1.78 67.5,1.0 0.9,恐高症,
13、Mary F 1.61 58.5,0.7 0.8,青霉素过敏,结构体的嵌套,struct sight_table float left; float right; ; struct case_table char name20; char sex; float height; float weight; struct sight_table sight; char comment30; health2;,结构体的嵌套,对嵌套的结构体变量成员的引用:,strcpy(, Frank); health0.sex = M; health0.sight.left = 1.2; h
14、ealth0.sight.right = 1.0; printf(%.2f, %.2f n,health0.sight.left, health0.sight.right);,health0: 是结构体数组health的第1个元素,Frank,举例,#include struct date int year; int month; int day; ; struct good char name20; char place20; int number; float price; struct date deadline; ;,现有库存信息表,包括商品名称、存放地点、库存量、商品单价,入库日期,如 book,No.3,57000,202.5,2009,5,19 要求用结构体变量保存此信息,并输出。,st_proc.c,int main(void) struct good proc; strcpy(, book); strcpy(proc.place, No.3); proc.price = 202.5; proc.number = 57000; proc.deadline.year = 2009; proc.deadline.month = 5; proc.deadline.day = 19; printf(%s %s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部编版9下语文 12《词四首》教案+练习+说课稿
- 第9课 汉字的艺术魅力教学设计初中美术赣美版九年级下册-赣美版
- 2026年课程培训学员合同(1篇)
- 陕西省户县五竹初级中学道德与法治八年级下册 2.1 坚持依宪治国 教学设计
- 期末模拟试题(含答案)2025-2026学年七年级地理下学期人教版
- 二、鹏之徙于南冥教学设计初中信息科技泰山版2024九年级全一册-晋教版2017
- 安徽省芜湖市无为中学等校2026届高三下学期3月考试(三)语文试卷(含答案)
- 第3课 电梯超载可控制教学设计小学信息科技清华版新疆2024六年级下册-清华版(新疆)2024
- 瓶盘缸碗筒篮:传统中式插花器具与搭配艺术
- 高等教育课程设置与教学指南
- 肺癌诊治中心建设与管理指南
- 建筑工程起重吊装监理实施细则
- 房屋建筑维修保养方案
- GB/T 2829-2025周期检验计数抽样程序及表(适用于对过程稳定性的检验)
- 2026年及未来5年市场数据中国防粘连剂市场运行态势及行业发展前景预测报告
- 2025年重庆市初中生物学业水平考试试卷试题(含答案解析)
- 小儿肺炎的护理流程
- T∕GYJS 011-2025 智算中心设计规范
- 银饰专业基础知识
- GB/T 36935-2025鞋类鞋号对照表
- 一年级上册语文看图写话每日一练习题
评论
0/150
提交评论