第08章结构体、共用体和枚举类型.ppt
《第08章结构体、共用体和枚举类型.ppt》由会员分享,可在线阅读,更多相关《第08章结构体、共用体和枚举类型.ppt(37页珍藏版)》请在三一文库上搜索。
1、第8章 结构体、共用体和枚举类型 问题的提出, 二维表格: 学号 姓名 年龄 性别 成绩1 成绩2 平均成绩 1 AA 19 M 80 90 85 2 BB 18 F 78 70 74 3 CC 17 M 81 75 73 4 DD 18 F 80 60 70 5 EE 19 M 76 88 82 ,每行的数据类型不相同,如何表示此二维数据? 如何交换两行值? 能否将一行看成一个整体?,8.1 结构体的定义及应用 概念 行: 对象。列: 属性。用具体属性值描述一个具体对象。 定义一种类型,用于描述一类对象,,struct stud int num; / 学号 char name20; / 姓名
2、 int age; / 年龄 char sex; / 性别 int score; / 成绩 ;,一种新的数据类型,类型标识符为 struct stud 或 stud,构造类型:由基本类型派生出来,如数组、结构体、共用体,8.1.1 结构体类型的定义,一般形式:,struct 结构体名 类型名1 成员变量1; 类型名2 成员变量2; 类型名n 成员变量n; ;,说明: (1)结构体类型是一种构造数据类型, 它与 int, char, float 等系统定义的 基本数据类型具有同等地位, 是由用户自行定义的。,(2)系统在使用用户自定义的数据类型的变量时, 会根据类型为其分配存储空间。,8.1.2
3、 结构体类型变量的定义(三种方法) 1. 在定义结构体类型的 同时 定义变量 struct stud int num; char name20; int age; char sex; int score; stud1, stud2;,2. 在结构体类型已定义 之后 定义变量 struct stud int num; char name20; int age; char sex; int score; ; struct stud stud3, stud4;,占用33字节,3. 缺省结构体名,直接定义 struct int num; char name20; int age; char sex;
4、int score; stud5, stud6;,特点:只能定义一次此种类型的结构体变量, 之后该结构体类型定义就无用了, 除非重新定义结构体类型。, 类型与变量是完全不同的概念。 类型:抽象概念,不可赋值、存贮、运算;系统不分配空间。 变量:具体对象,可赋值、存贮、运算;系统为其分配空间。 应先定义结构类型,再定义该类型的变量。,结构体变量的初始化 struct stud stud1= 1000, “Wu“, 19, M, 80, stud2= 2000, “Li“, 18, F, 80;,8.1.3 结构体变量及其成员的使用 1.引用整体,如整体赋值 struct stud stud3,
5、stud4; stud3 = stud1;,2.引用成员, 对于一个具体的结构体变量来说 stud1.num - 相当于一个整型变量 stud1.name - 字符串 stud1.age - 整型变量 stud1.sex - 字符型变量 stud1.score - 整型变量,3.使用结构体变量的成员,就象使用一个简单变量一样 cin stud3.num ; / 输入 cout stud3.num stud3.name; / 输出 stud3.age = stud2.age + 1; / 数学运算 strcpy(stud3.name, “Cheng“); / 字符串赋值 stud3.sex =
6、F; / 字符赋值,注意:结构体变量不能进行整体输入输出, 只能对其基本类型成员输入输出。,若要整体输入输出,需用到面向对象部分介绍的运算符重载技术。,#include struct complex double real; double image; ; void main(void) complex a=1.0, 2.0, b=1.0, 2.0, c ; cout“a=(“ a.real , a.image “)n“; cout“b=(“ b.real , b.image “)n“; c.real = a.real + b.real; c.image = a.image + b.image
7、; cout“a+b=(“ c.real , c.image “)n“; ,例: 定义复数,实现复数加法 (请记录),结构体类型的变量也可以作为函数的参数及返回值。 改写本例,见下页,输出结果:a=(1,2) b=(1,2) a+b=(2,4),#include struct complex double real; double image; ; complex add(complex a , complex b)/注意:形参及返回值 complex x; x.real = a.real+b.real; x.image = a.image+b.image; return x; void ma
8、in(void) complex a=1.0, 2.0, b=1.0, 2.0, c ; cout“a=(“ a.real , a.image “)n“; cout“b=(“ b.real , b.image “)n“; c=add(a,b); /注意:实参及调用形式 cout“a+b=(“ c.real , c.image “)n“; ,例:定义复数,实现复数加法 (请记录),结构体类型的变量,可以 作为函数的参数和返回值。,8.1.4 结构体数组 1.定义结构体数组 一个班30个学生 stud studs30; / stud 为已定义的结构体类型,含义:30个元素,每个元素都是一个结构体变
9、量 studs0,studs1, studs29,2. 结构体数组的初始化 stud studs30= 1000, “Wu“, 19, M, 80 , 2000, “Li“, 18, F, 90 , 2900, “Cheng“, 18, M, 80 ;,struct stud int num; /* 学号 */ char name20; /* 姓名 */ int age; /* 年龄 */ char sex; /* 性别 */ int score; /* 成绩 */ ;,存储状况,3. 结构体数组元素的引用 (1)整体赋值 stud stud1=, stud3=; stud studs30;
10、studs0 = stud1; studsi = stud3;,(2)对每个元素成员的引用 studs0.name, studs0.age studsi.num, studsi.sex,struct stud int num; char name20; int age; char sex; int score; ; void main(void) stud studs30= 1000, “Wu“, 19, M, 80 , 2000, “Li“, 18, F, 90 , 2900, “Cheng“, 18, M, 80 ; int i, aver = 0; for(i=0; i30; i+) a
11、ver += studsi.score; aver /= 30; cout aver endl; ,例: 求一个班学生的平均成绩,结构体类型数组及数组元素的使用:,与一般数据类型相同,可以作为函数的参数及返回值。,例:8.2 建立一个学生档案的结构体数组,P127 输入并输出学生的数据。,#include struct student int num; char name20; float score; ; student Input( ) /返回结构体变量 student stud; coutstud.numstud.namestud.score; return stud; ,void Ou
12、tput(student stud) /结构体变量做参数 cout “学号为 “stud.numn “姓名为 “stud.namen “成绩为 “stud.scoreendl; void main( ) student studs3; for (int i=0; i3; i+) studsi=Input( ); /返回结构体变量 for(i=0; i3; i+) Output(studsi); /结构体变量做参数 coutendl; ,改写 例8.2 P128,#include struct student int num; char name20; float score; ; void I
13、nput(student /不需要 return 语句,void Output(student ,#include struct student int num; char name20; float score; ; void Input(student studs , int n) /结构体数组做参数,注意形参的写法 for(int i=0; istudsi.score; /输入部分值 double Average(student studs , int n) /注意形参 double av=0; for(int i=0; in; i+) av+=studsi.score; return(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 08 结构 共用 枚举 类型
链接地址:https://www.31doc.com/p-2250616.html