收藏 分享(赏)

在C程序中使用结构体.ppt

上传人:myw993772 文档编号:8695628 上传时间:2019-07-08 格式:PPT 页数:29 大小:266KB
下载 相关 举报
在C程序中使用结构体.ppt_第1页
第1页 / 共29页
在C程序中使用结构体.ppt_第2页
第2页 / 共29页
在C程序中使用结构体.ppt_第3页
第3页 / 共29页
在C程序中使用结构体.ppt_第4页
第4页 / 共29页
在C程序中使用结构体.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

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; /* 电话号码 */char email30

4、; /* E-mail */ ;,声明结构体变量,1)定义了结构体类型后,再声明结构体类型的变量 struct 结构体类型名 结构体成员表; ; struct 结构体类型名 结构体变量名;,先定义结构体类型,再声明结构体类型的变量,声明结构体变量,struct singerint s_id;double s1; /* 参赛歌曲得分 */double s2; /* 知识问答得分 */double sum; /* 该选手的总得分 */;,struct singer a1, a2, a3, a4, a5, a6;,声明结构体变量,2) 在定义结构体类型的同时声明结构体变量。即将结构体类型的定义和声明

5、结构体变量放在同一个语句中. 其一般形式如下:struct 结构体类型名 结构体成员表;结构体变量名表;,struct singerint s_id;double s1;double s2;double sum; a1,a2,a3,a4,a5,a6;,声明结构体变量,3)在定义结构体类型时省略结构体类型名,并直接声明结构体变量。 一般形式如下:struct 结构体成员表; 结构体变量名表; 即定义的结构体没有结构体类型名。,如果省略结构体类型名, 则称之为无名结构体, 这种情况常常出现在函数内部。使用这种结构体定义形式时,一定是在定义结构体类型的同时,就声明结构体变量,struct singe

6、rint 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(数据类型名)返回“数据类型名”的类型长度。 sizeof(变量名)返回“

7、结构体变量”的长度。,定义结构体类型,#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;,&a4.s_id,&a4.s1, &a4.s2,a4.s_id,a4.s1, a4.s2,a

10、4.sum=a4.s1+a4.s2,给a3赋值: 将a2的值赋给a3 a3=a2;,例如:给变量a1赋值 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,21

11、7,92,87,70;,(stu1.score0+ stu1.score1+ stu1.score2)/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 ch

12、ar name20; char sex; int num; float score3; stu2 ;,stu2=“John“,M,310,75 96,63, “Lili“,F,217,92,78,70 ;,printf(“n %s, %f “, );,stu0.name, stu0.score2,如果要输出第一位学生的名字和其最后一科的成绩?,如何初始化数组?,对结构体做一个说明,结构体类型是人们制造的一种类型,它与其他C的基本类型的特性一样 结构体变量是由结构体声明的变量。它与C的其他基本变量的特性一样结构体的成员是由C的其他类型来定义的,为什么结构体的成员不能由其他已经定义的结构体来定义呢

13、?!,结构体定义,再来看一张学生体检表:,Frank M 1.78 67.5,1.0 0.9,恐高症,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(health0.name, “Frank

14、“); health0.sex = M; health0.sight.left = 1.2; health0.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 da

15、te deadline;,现有库存信息表,包括商品名称、存放地点、库存量、商品单价,入库日期,如 “book“,“No.3“,57000,202.5,2009,5,19 要求用结构体变量保存此信息,并输出。,st_proc.c,int main(void) struct good proc;strcpy(proc.name, “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 %d %.2f %d年%d月%d日n“, proc.name, proc.place, proc.number, proc.price,proc.deadline.year, proc.deadline.month,proc.deadline.day);return 0; ,st_proc.c,小结,为什么要引用结构体类型,其特点是什么? 如何定义结构体类型? 如何声明结构体变量? 如何声明结构体数组? 如何使用结构体变量? 结构体成员的表示方法和引用方法。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报