C程序设计实例教程 教学课件 ppt 作者 金林樵第8章 构造数据类型

上传人:w****i 文档编号:92478305 上传时间:2019-07-10 格式:PPT 页数:69 大小:1.10MB
返回 下载 相关 举报
C程序设计实例教程 教学课件 ppt 作者 金林樵第8章 构造数据类型_第1页
第1页 / 共69页
C程序设计实例教程 教学课件 ppt 作者 金林樵第8章 构造数据类型_第2页
第2页 / 共69页
C程序设计实例教程 教学课件 ppt 作者 金林樵第8章 构造数据类型_第3页
第3页 / 共69页
C程序设计实例教程 教学课件 ppt 作者 金林樵第8章 构造数据类型_第4页
第4页 / 共69页
C程序设计实例教程 教学课件 ppt 作者 金林樵第8章 构造数据类型_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《C程序设计实例教程 教学课件 ppt 作者 金林樵第8章 构造数据类型》由会员分享,可在线阅读,更多相关《C程序设计实例教程 教学课件 ppt 作者 金林樵第8章 构造数据类型(69页珍藏版)》请在金锄头文库上搜索。

1、在前面的学习中,使用的变量是一些简单数据类型(整型、实型、字符型)或数组,这些数据类型的特点是它们都是单一数据类型的。而在现实生活中,很多数据的描述是由若干种不同类型的数据组成的。 1. 结构体的定义与使用 2. 共用体的定义与使用 3. 枚举类型的定义与使用 这些数据类型将大大提高C语言程序的数据处理能力,其中结构体更是实现许多高级算法所必须的,因此学好本章有利于提升程序设计的能力。,第8章 构造数据类型,8.1 学生批量数据的管理 8.2 结构体 8.3 使用结构体类型指针处理链表 8.4 共用体 8.5 枚举,目录,8.1 学生批量数据的管理,在学生成绩管理系统实例中,涉及的学生数据有学

2、号、姓名、性别、年龄、班级、个人密码、英语成绩、语文成绩、数学成绩和平均成绩等(如表1-1的学生成绩数据表),每个人一个记录,其中学号、姓名、性别、班级、个人密码属于字符串,年龄属于整型,英语成绩、语文成绩、数学成绩等既可以使用整型也可以使用实型,平均成绩又属于实型。 但前面已学过的数据类型只能表示单一的数据类型,无法用其中的任一种数据类型完全描述,所以学生数据只能分散存放在各自的数组中,给学生数据的管理带来了困难。 为解决不同类型数据的组合存放问题,C语言引入了一种能组合不同数据类型于一体的数据类型结构体类型。,8.2 结构体,结构体类型可以将若干个不同类型的数据组合起来组织成一个整体。结构

3、体是由若干成员组成的一种构造类型,其中的每一个成员可以是基本数据类型或构造类型。 8.2.1 结构体类型的定义 结构体类型必须先定义,后使用。结构体类型定义的一般形式为: struct 结构体名 类型标识符 成员变量名1; 类型标识符 成员变量名2; 类型标识符 成员变量名n; ; 其中,struct是定义结构体类型的关键字,后跟结构体名,这两部分构成了结构体类型的标识符。下面花括号内定义了组成该结构体的所有成员,每个成员由成员变量的数据类型(由类型标识符指定)及其变量名组成。结构体中的类型标识符可以是基本数据类型,也可以是其它已定义的构造类型,即允许嵌套定义。,有了结构体,就可以将学生成绩管

4、理系统中的学生数据定义成一个结构体类型,学生结构体类型的定义如下。 struct student /* 定义结构体类型struct student */ char stuid10; /* 学号 */ char stuname10; /* 姓名 */ char sex3; /* 性别 */ char classid12; /* 班级 */ char password12; /* 密码 */ int age; /* 年龄 */ int score3; /* 存放英语,语文,数学成绩的数组 */ float avg; /* 存放平均成绩的成员变量 */ ; struct student结构体类型拥有

5、8个成员变量stuid、stuname、sex、classid、password、age、score、avg,分别对应学生的学号、姓名、性别、班级、密码、年龄、3门课程成绩和平均成绩。,结构体中成员的数据类型还可以是其它已定义的结构体类型,例如: struct date /* 定义结构体类型struct date */ int year; /* 年 */ short month; /* 月 */ short day; /* 日 */ ; struct mystu /* 定义结构体类型struct mystu */ char stuid10; /* 学号 */ char stuname10; /

6、* 姓名 */ char sex3; /* 性别 */ char classid12; /* 班级 */ char password12; /* 密码 */ struct date birthday; /* 生日,是struct date结构体类型 */ int score3; /* 存放英语,语文,数学成绩的数组 */ float avg; /* 存放平均成绩的成员变量 */ ; struct mystu结构体类型中的成员birthday是另一个struct date结构体类型的变量。,8.2.2 结构体变量的定义,上面定义的结构体类型只不过是一种自定义的新数据类型,相当于前面已使用过的in

7、t、float、char等标准数据类型的角色。因此定义了结构体类型后,还需要在程序中定义该结构体类型的变量,相当于定义一个整型变量要使用“int x;”一样。 1. 先定义结构体类型,再定义结构体类型变量 struct 结构体名 类型标识符 成员变量名1; 类型标识符 成员变量名2; 类型标识符 成员变量名n; ; struct 结构体名 结构体变量名1,结构体变量名2,;,struct student /* 定义结构体类型struct student */ char stuid10; /* 学号 */ char stuname10; /* 姓名 */ char sex3; /* 性别 */

8、char classid12; /* 班级 */ char password12; /* 密码 */ int age; /* 年龄 */ int score3; /* 存放英语,语文,数学成绩的数组 */ float avg; /* 存放平均成绩的成员变量 */ ; struct student stu1, stu2;/* 定义2个结构体型变量 */,8.2.2 结构体变量的定义,2. 定义结构体类型的同时定义结构体类型变量 struct 结构体名 类型标识符 成员变量名1; 类型标识符 成员变量名2; 类型标识符 成员变量名n; 结构体变量名1,结构体变量名2,;,struct studen

9、t /* 定义结构体类型struct student */ char stuid10; /* 学号 */ char stuname10; /* 姓名 */ char sex3; /* 性别 */ char classid12; /* 班级 */ char password12; /* 密码 */ int age; /* 年龄 */ int score3; /* 存放英语,语文,数学成绩的数组 */ float avg; /* 存放平均成绩的成员变量 */ stu1, stu2;/* 定义2个结构体型变量 */,8.2.2 结构体变量的定义,3. 直接定义结构体类型变量 struct 类型标识符

10、 成员变量名1; 类型标识符 成员变量名2; 类型标识符 成员变量名n; 结构体变量名1,结构体变量名2,;,struct char stuid10; /* 学号 */ char stuname10; /* 姓名 */ char sex3; /* 性别 */ char classid12; /* 班级 */ char password12; /* 密码 */ int age; /* 年龄 */ int score3; /* 存放英语,语文,数学成绩的数组 */ float avg; /* 存放平均成绩的成员变量 */ stu1, stu2;/* 定义2个结构体型变量 */,8.2.2 结构体变

11、量的定义,4. 定义结构体类型变量的同时进行初始化 结构体类型变量与其它变量一样,允许在定义结构体类型变量时对其进行初始化。例如: struct student /* 定义结构体类型struct student */ char stuid10; /* 学号 */ char stuname10; /* 姓名 */ char sex3; /* 性别 */ char classid12; /* 班级 */ char password12; /* 密码 */ int age; /* 年龄 */ int score3; /* 存放英语,语文,数学成绩的数组 */ float avg; /* 存放平均成绩

12、的成员变量 */ stu1=“080502“,“陈明“,“男“,“计本031“,“54321“,19,86,85,90; 这是在定义结构体类型及该结构体类型变量的同时进行初始化的情况。也可以先允许定义结构体类型,再在定义结构体类型变量时对其进行初始化,例如: struct student stu1=“080502“,“陈明“,“男“,“计本031“,“54321“,19,86,85,90;,8.2.3 结构体变量的引用,在定义了结构体类型变量后,就可以在程序中引用结构体类型变量了。 (1) 对结构体类型变量进行赋值、存取等操作 例如,对于定义的stu1, stu2结构体变量: struct s

13、tudent stu1, stu2; 可以进行: stu1 = stu2; (2) 引用结构体中的成员变量 更多的情况下,是引用结构体中的成员变量,如下所示。 结构体类型变量名.成员变量 其中,“.”是结构体成员运算符,它在所有的运算符中优先级是最高的。例如,stu1.age表示引用stu1结构体变量的成员age,stu1.score0表示引用stu1结构体变量的数组成员score0。,8.2.3 结构体变量的引用,(3) 结构体中的成员变量的数据类型是另一个结构体类型时 当结构体成员变量的数据类型又是一个结构体时,应采用逐级访问的方式,直到要访问的成员变量为止。例如,对于如下的定义: /*

14、struct mystu结构在8.2.1中定义 */ struct mystu stu3; 则要引用该学生生日的年份时,要写成: stu3.birthday.year 例如: stu3.birthday.year = 1988; /* 该学生是1988年出生的 */,例8-1 对结构体变量进行初始化,void main() struct student /* 定义结构体类型struct student */ char stuid10; /* 学号 */ char stuname10; /* 姓名 */ char sex3; /* 性别 */ char classid12; /* 班级 */ c

15、har password12; /* 密码 */ int age; /* 年龄 */ int score3; /* 存放英语,语文,数学成绩的数组 */ float avg; /* 存放平均成绩的成员变量 */ ; int i; /* 循环变量 */ /* 定义结构体变量并进行初始化 */ struct student stu=“080502“,“陈明“,“男“,“计本031“,“54321“,19,86,85,90; int sum; /* 存放总成绩的变量 */ for(sum=0,i=0;i3;i+) sum += stu.scorei; /* 计算总成绩 */ stu.avg = sum / 3.0; /* 求平均成绩 */ printf(“n学号=%s,姓名=%s,性别=%s“,stu.stuid,stu.stuname,stu.sex); printf(“,班级=%s,密码=%s,年龄=%d“,stu.classid,stu.password,stu.age); printf(“n英语=%d,语文=%d,数学=%d“,stu.score0,stu.score1,stu.score2); printf(“,总成绩=%d,平均成绩=%.1fn“,sum, stu.avg); ,例8-2 结构体数据的输入与输出,void main() /* 结构

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号