第08章结构体、共用体和枚举类型

上传人:re****.1 文档编号:590620139 上传时间:2024-09-14 格式:PPT 页数:37 大小:220.54KB
返回 下载 相关 举报
第08章结构体、共用体和枚举类型_第1页
第1页 / 共37页
第08章结构体、共用体和枚举类型_第2页
第2页 / 共37页
第08章结构体、共用体和枚举类型_第3页
第3页 / 共37页
第08章结构体、共用体和枚举类型_第4页
第4页 / 共37页
第08章结构体、共用体和枚举类型_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《第08章结构体、共用体和枚举类型》由会员分享,可在线阅读,更多相关《第08章结构体、共用体和枚举类型(37页珍藏版)》请在金锄头文库上搜索。

1、第第第第 8 8 章章章章第第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 结构体的定义及应用结构体

2、的定义及应用概念概念 行行: 对象。对象。列列: 属性。用具体属性值描述一个具体对象。属性。用具体属性值描述一个具体对象。 定义一种类型定义一种类型,用于描述一类对象,用于描述一类对象,第第第第 8 8 章章章章 struct stud int num; / 学号学号 char name20; / 姓名姓名 int age; / 年龄年龄 char sex; / 性别性别 int score; / 成绩成绩 ;保留字保留字 结构体名结构体名 一种新的数据类型,一种新的数据类型,类型标识符类型标识符为为 struct stud 或或 stud 构造类型构造类型:由:由基本类型基本类型派生派生出来

3、,如数组、结构体、共用体出来,如数组、结构体、共用体8.1.1 结构体类型的定义结构体类型的定义一般形式:一般形式:struct 结构体名结构体名 类型名类型名1 成员变量成员变量1; 类型名类型名2 成员变量成员变量2; . 类型名类型名n 成员变量成员变量n; ;5个个成成员员第第第第 8 8 章章章章说明:说明: (1)结构体类型是一种构造数据类型结构体类型是一种构造数据类型, 它与它与 int, char, float 等系统定义的等系统定义的 基本数据类型具有同等地位,基本数据类型具有同等地位, 是由用户自行定义的。是由用户自行定义的。(2)系统在使用用户自定义的数据类型的变量时系统

4、在使用用户自定义的数据类型的变量时, 会根据类型为其分配存储空间。会根据类型为其分配存储空间。第第第第 8 8 章章章章8.1.2 结构体类型变量的定义结构体类型变量的定义(三种方法)(三种方法)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;

5、int score; ; struct stud stud3, stud4; num(4字节字节)name(20字节字节)age(4字节字节)sex(1字节字节)score(4字节字节)变量变量 stud1的存储分配的存储分配占用占用33字节字节第第第第 8 8 章章章章3. 缺省缺省结构体名,直接定义结构体名,直接定义 struct int num; char name20; int age; char sex; int score; stud5, stud6;特点:只能定义一次此种类型的结构体变量,特点:只能定义一次此种类型的结构体变量, 之后该结构体类型定义就无用了,之后该结构体类型定义

6、就无用了, 除非重新定义结构体类型。除非重新定义结构体类型。 类型类型与与变量变量是完全不同的概念。是完全不同的概念。 类型类型:抽象概念,抽象概念,不可赋值、存贮、运算;系统不分配空间。不可赋值、存贮、运算;系统不分配空间。 变量变量:具体对象,具体对象,可赋值、存贮、运算;系统为其分配空间。可赋值、存贮、运算;系统为其分配空间。 应先定义结构类型,再定义该类型的变量。应先定义结构类型,再定义该类型的变量。第第第第 8 8 章章章章结构体变量的初始化结构体变量的初始化struct stud stud1= 1000, Wu, 19, M, 80, stud2= 2000, Li, 18, F,

7、 80;8.1.3 结构体变量及其成员的使用结构体变量及其成员的使用1.引用整体引用整体,如整体赋值,如整体赋值struct stud stud3, stud4;stud3 = stud1;2.引用成员引用成员, 对于一个具体的结构体变量来说对于一个具体的结构体变量来说 stud1.num - 相当于一个整型变量相当于一个整型变量 stud1.name - 字符串字符串 stud1.age - 整型变量整型变量 stud1.sex - 字符型变量字符型变量 stud1.score - 整型变量整型变量第第第第 8 8 章章章章整体赋值相当于整体赋值相当于成员逐个赋值成员逐个赋值 stud3.n

8、um = stud1.num strcpy(stud3.name,stud1.name )stud3 = stud1; stud3.age = stud1.age stud3.sex = stud1.sex stud3.score = stud1.score 3.使用结构体变量的成员,就象使用一个简单变量一样使用结构体变量的成员,就象使用一个简单变量一样cin stud3.num ; / 输入输入cout stud3.num stud3.name; / 输出输出stud3.age = stud2.age + 1; / 数学运算数学运算strcpy(stud3.name, Cheng); / 字

9、符串赋值字符串赋值stud3.sex = F; / 字符赋值字符赋值注意:结构体变量不能进行整体输入输出,注意:结构体变量不能进行整体输入输出, 只能对其基本类型成员输入输出。只能对其基本类型成员输入输出。若要整体输入输出,需若要整体输入输出,需用到面向对象部分介绍用到面向对象部分介绍的运算符重载技术。的运算符重载技术。第第第第 8 8 章章章章#include struct complex double real; double image; ;void main(void) complex a=1.0, 2.0, b=1.0, 2.0, c ; couta=( a.real , a.ima

10、ge )n; coutb=( b.real , b.image )n; c.real = a.real + b.real; c.image = a.image + b.image; couta+b=( c.real , c.image )n;例例: 定义复数,实现复数加法定义复数,实现复数加法 (请记录请记录)结构体结构体类型的类型的变量也可以作为函数的参数及返回值。变量也可以作为函数的参数及返回值。改写本例,见下页改写本例,见下页 输出结果:输出结果:a=(1,2) b=(1,2) a+b=(2,4) 第第第第 8 8 章章章章#include struct complex double r

11、eal; 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 main(void) complex a=1.0, 2.0, b=1.0, 2.0, c ; couta=( a.real , a.image )n; coutb=( b.real , b.image )n; c=add(a,b); /注意:实参及调用形式注意:实参及调用形式 couta+b=( c

12、.real , c.image )n;例例: :定义复数,实现复数加法定义复数,实现复数加法 (请记录请记录)结构体类型的变量,可以结构体类型的变量,可以作为函数的参数和返回值。作为函数的参数和返回值。第第第第 8 8 章章章章 8.1.4 结构体数组结构体数组 1.定义结构体数组定义结构体数组 一个班一个班30个学生个学生 stud studs30; / stud 为已定义的结构体类型为已定义的结构体类型 含义:含义:30个元素,每个元素都是一个结构体变量个元素,每个元素都是一个结构体变量 studs0,studs1, studs292. 结构体数组的初始化结构体数组的初始化 stud st

13、uds30= 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; /* 成绩成绩 */ ;第第第第 8 8 章章章章studs12900“Cheng”M18802000“Li”F18901000“Wu”M1980studs0studs2.存储状况存储状况第第第第 8 8 章章章章3. 结构体数组元素

14、的引用结构体数组元素的引用(1)整体赋值整体赋值 stud stud1=, stud3=; stud studs30; studs0 = stud1; studsi = stud3;(2)对每个元素成员的引用对每个元素成员的引用 studs0.name, studs0.age studsi.num, studsi.sex第第第第 8 8 章章章章struct stud int num; char name20; int age; char sex; int score; ;void main(void) stud studs30= 1000, Wu, 19, M, 80 , 2000, Li,

15、 18, F, 90 , 2900, Cheng, 18, M, 80 ; int i, aver = 0; for(i=0; i30; i+) aver += studsi.score; aver /= 30; cout aver endl;例例: 求一个班学生的平均成绩求一个班学生的平均成绩第第第第 8 8 章章章章结构体类型结构体类型数组数组及及数组元素数组元素的使用:的使用:与一般数据类型相同,可以作为函数的参数及返回值。与一般数据类型相同,可以作为函数的参数及返回值。例:例:8.2 建立一个学生档案的结构体数组,建立一个学生档案的结构体数组,P127 输入并输出学生的数据。输入并输出

16、学生的数据。#include struct studentint num;char name20;float score;student Input( ) /返回结构体变量返回结构体变量student stud;coutstud.numstud.namestud.score;return stud;第第第第 8 8 章章章章void Output(student stud) /结构体变量做参数结构体变量做参数cout 学号为学号为 stud.numn 姓名为姓名为 stud.namen成绩为成绩为 stud.scoreendl;void main( )student studs3;for (i

17、nt i=0; i3; i+)studsi=Input( ); /返回结构体变量返回结构体变量for(i=0; i3; i+)Output(studsi); /结构体变量做参数结构体变量做参数coutendl;第第第第 8 8 章章章章改写改写 例例8.2 P128#include struct studentint num;char name20;float score;void Input(student &stud) /结构体变量的引用做参数结构体变量的引用做参数coutstud.numstud.namestud.score; /不需要不需要 return return 语句语句第第第第

18、 8 8 章章章章void Output(student &stud) /结构体变量的引用做参数结构体变量的引用做参数 cout 学号为学号为 stud.numn 姓名为姓名为 stud.namen 成绩为成绩为 stud.scoreendl; /不需要不需要 return return 语句语句void main( )student studs3;for (int i=0; i3; i+)Input(studsi); /注意实参注意实参for(i=0; i3; i+)Output(studsi); /注意实参注意实参coutendl;第第第第 8 8 章章章章#include struct

19、studentint num;char name20;float score;void Input(student studs , int n)/结构体数组做参数,注意形参的写法结构体数组做参数,注意形参的写法for(int i=0; in; i+)cout请输入学生请输入学生istudsi.score; /输入部分值输入部分值double Average(student studs , int n) /注意形参注意形参double av=0;for(int i=0; in; i+) av+=studsi.score;return(av/n);结构体类型结构体类型数组数组做函数的参数:做函数的

20、参数:第第第第 8 8 章章章章void Output(student studs , int n) /注意形参注意形参for(int i=0; in; i+)coutstudsi.numtstudsi.namet studsi.scoreendl;void main( )student studs4=101,“Wang”, /初始化部分值初始化部分值 102,Zhang,103,Cheng,104,Liu ;double aver;Input(studs, 4); /结构体数组做参数,注意实参的写法结构体数组做参数,注意实参的写法aver=Average(studs, 4);Output(s

21、tuds, 4); coutAverage=aver 4 其长度是其占用字节数其长度是其占用字节数 最长的成员最长的成员 的长度。的长度。(3)结构体和公用体可以互相嵌套。)结构体和公用体可以互相嵌套。union data short i; char c; float f; x, y;(4)作为一种数据类型,)作为一种数据类型, 公用体变量也可以作为函数的参数及返回值。公用体变量也可以作为函数的参数及返回值。第第第第 8 8 章章章章定义共用体的目的有两个:定义共用体的目的有两个:节省空间;节省空间;特殊效果,比如分特殊效果,比如分别取出一个整数的四个字节。别取出一个整数的四个字节。例例8.4

22、分别取出一个整数的四个字节。分别取出一个整数的四个字节。#include void main( ) union int i;char c4; a; cout a.i; cout =0; k-) cout(int)a.ckt; / 一个整数的四个字节分别对应一个整数的四个字节分别对应 / 字符数组的每个元素字符数组的每个元素 coutendl;第第第第 8 8 章章章章运行情况如下:运行情况如下:请输入一个整数请输入一个整数:511整数的四个字节中的数分别为整数的四个字节中的数分别为:001-1第第第第 8 8 章章章章例例:#include void main(void) union exam

23、 struct int x; int y; in; int a, b; e; e.a = 1; e.b = 2; e.in.x = e.a * e.b; e.in.y = e.a + e.b; cout sizeof(exam); cout e.in.x , e.in.y day2; / 此行错此行错 cout Sun t Sat endl; day1 = Tue; cout day1 n;输出?输出?062第第第第 8 8 章章章章P132 例例8.6:穷举法,结果有:穷举法,结果有60种情况种情况#include 此此算法较好算法较好!enum color red, yellow, blu

24、e, white, black ;void Print(color col)switch(col) case red: cout red t; break; case yellow: cout yellow t; break; case blue: cout blue t; break; case white: cout white t; break; case black: cout black t; break; default: break;第第第第 8 8 章章章章void main( ) color i, j, k; int n=0; /计数器:记录共有几种取法计数器:记录共有几种取

25、法 for(i=red; i=black; i=(color)(int(i)+1) ) for(j=red; j=black; j=(color)(int(j)+1) for(k=red; k=black; k=(color)(int(k)+1) if(i!=j & j!=k & k!=i) cout +n t; Print(i); Print(j); Print(k); cout x.real x.image; return x; void output(complex x) . .void main( )complex a, b, c;coutPlease input complex nu

26、mber a and b: ;a=input( ); b=input( );c=add(a,b);cout”c=; output(c); .第第第第 8 8 章章章章实验八实验八 第第3题题 程序总体结构程序总体结构 提示:提示:struct point.;point input(point &p) /引用做参数引用做参数.void output(point &p) /引用做参数引用做参数.double distance(point a, point b).void main( )point a, b;double len;提示并输入提示并输入a、b两点坐标。两点坐标。求出求出a、b两点间距离

27、两点间距离len。输出输出a、b两点坐标及其两点间的距离两点坐标及其两点间的距离len。第第第第 8 8 章章章章实验八实验八 第第4题题 程序总体结构程序总体结构 提示:提示:struct student . ;void input(student studs , int n)/只输入三门课成绩只输入三门课成绩 . void average(student studs , int n) . .void main( ) student studs10= wang, 99011 , /初始化姓名、学号初始化姓名、学号 liu, 99021 ,; int n; cout n; input(studs, n);average(studs, n); sort(studs, n);output(studs, n);

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

最新文档


当前位置:首页 > 办公文档 > 工作计划

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