3 结构体、共用体和枚举类型.ppt_第1页
3 结构体、共用体和枚举类型.ppt_第2页
3 结构体、共用体和枚举类型.ppt_第3页
3 结构体、共用体和枚举类型.ppt_第4页
3 结构体、共用体和枚举类型.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 用户自定义数据类型,教学目标,理解结构体引入的原因,掌握结构体类型、结构体变量的定义方法,熟悉结构体变量的初始化和引用; 熟悉结构体数组定义、初始化及使用; 熟悉共用体类型变量的定义、变量的引用方式,了解其数据特点; 熟悉枚举类型的定义和基本使用方法; 了解typedef的功能、最基本用法。 重点:结构体类型和结构体变量的定义,结构体变量的初始化和引用,结构体数组定义、初始化及使用,共用体类型、枚举类型定义和变量的使用; 难点:结构体、共用体、枚举三者的异同点,类型定义与变量定义的差别,变量的使用及有关说明,枚举类型与整型的比较。,第7章 用户自定义数据类型,7.1 结构体 7.2 共

2、用体 7.3 枚举类型 7.4 typedef的使用,数据类型,基本类型,整 型 字符型 浮点型,派生类型,指针类型 (*) 数组类型 () 结构体类型 (struct) 共用体类型 (union) 类类型,空类型 (void),枚举类型 (enum),C+的数据类型,概念:结构体(structure)是一种派生数据类型,由用户自己建立,由若干个类型不同数据项组成,是一种组合型数据结构。,现假设有如下资料:,行:包含几个数据项,反映的是一个学生的整体信息。,问题:用什么数据类型来存储由多个类型可能不同的数据项组成的“行”信息?,7.1.1为什么需要用结构体类型,7.1.1为什么需要用结构体类型

3、,C+语言提供了一些系统已定义好的数据类型,如int、float、char等供用户使用。我们可以通过这些类型来定义一些变量来存储学生的信息:,int num ; /定义学号 char name20;/定义姓名 char sex; /定义性别 int age; /定义年龄 float score; /定义成绩 char addr30; /家庭地址,包含int、char、float三种不同数据类型,还定义了两个数组。但这些变量之间无内在联系。,7,struct student int num ; /数据项学号 char name20;/数据项姓名 char sex; /数据项性别 int age;

4、 /数据项年龄 float score; /数据项成绩 char addr30; /数据项地址 ;,7.1.1为什么需要用结构体类型,如果这样定义一个结构体类型,数据项间就建立联系了。,7.1.1为什么需要用结构体类型,struct 结构体类型名 数据类型 成员1; 数据类型 成员2; 数据类型 成员n; ;,结构体标识,不能省略,定义结构体类型的一般形式,地位与int、char、float、double等类型名相同,通常首字母大写。,已有类型或已定义的“结构体”,每一个数据项可以是不同类型,数据项名称,又称“域 ”,struct Date int year; int month; int d

5、ay; ;,例:结构体类型名 Date,struct Student int num ; char name20; char sex; int age; float score; char addr30; ;,例:结构体类型名 Stduent,7.1.2结构体类型类型变量的定义方法 及初始化,1.定义结构体类型变量的方法,1)先声明结构体类型,再定义该类型变量,2)在定义类型的同时声明变量,例如: struct Student int num; char name20; char sex; int age; float score; char addr30; student1,student2

6、;,struct student int num ; /数据项学号 char name20;/数据项姓名 char sex; /数据项性别 int age; /数据项年龄 float score; /数据项成绩 char addr30; /数据项地址 ; student student1,student2;,结构体类型名,结构体变量名,结构体类型名,结构体变量名,3)不指定结构体类型名,直接定义结构体类型变量,struct 成员表列 变量名表列;,说明: (1)结构体类型与结构体变量是不同的概念。 只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。 在编译时,对类型是不分配空间的,

7、只对变量分配空间 (2)对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。,(3)结构体成员可以属于另一个结构体类型。,struct Date int month; int day; int year; ;,struct Student int num; char name20; char sex; int age; struct Date birthday; char addr30; ;,例:,结构体变量的初始化:即在定义结构体变量时给它的各成员赋初值,2.结构体变量的初始化,例:把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生

8、的信息。,解题思路:建立一个结构体类型,包括有关学生信息的各成员,用它定义结构体变量,同时赋以初值,最后输出该结构体变量的各成员。,#include using namespace std; int main() struct student long int num; char name20; char sex; char addr20; a=10101,Li Lin,M,123 Beijing Road;/变量a初始化 coutNO.:a.numnname:nsex:a.sexnaddress:a.addr; return 0; ,7.1.3引用结构体变量引用,格式:结构体变量

9、名.成员名 (.是成员运算符,优先级最高),struct Student a; a=4102, Li Ping, F, 21,80,Beijing Road 11#;,错误!,(1)同类型的结构体变量可互相赋值,如:student1=student2;,(2)可以引用一个结构体变量中的一个成员的值。,struct student a; a.score=80; strcpy(a.addr, Beijing Road 11# );,正确!,不允许整体给结构体变量赋值,只能对各个成员逐一赋值;,(3)如果结构体的成员中又包含结构体,只能用多个.号逐级找到最底层的变量,进行赋值、存取及运算,如:stu

10、dent1.birthday.month=7;,a.num=10010;,正确!,(4)一般情况下不能对结构体变量整体使用,不能整体输入、输出,只能对各成员分别引用;,couta; (企图整体读入结构体变量),错误!,(5)结构体的成员可以象普通变量一样进行各种运算如:sum=student1.score+student2.score;,(6)可以引用结构体变量成员的地址,也可以引用结构体变量的地址,如: cout int main() struct student int num; char name20; float score; student1,student2;,coutstuden

11、student1.score; student2.score; coutstudent2.score) student1.score; else if (student1.scorestudent2.score) student2.score; else student1.score; coutstudent2.numstuden

12、student2.score; return 0; ,概念:顾名思义是数组中的每一个元素都是结构体变量,1.定义结构体数组一般形式:,格式1:struct 结构体名 成员表列 数组名数组长度;,格式2:先声明一个结构体类型,然后再用此类型定义结构体数组,即: 结构体类型 数组名数组长度;,7.1.4结构体数组,struct Student int num; char name20; char sex; int age; float score; char addr30; ; Student stu3;,struct Student int num; char name20; ch

13、ar sex; int age; float score; char addr30; stu3;,数组名,结构体类型名,结构体类型名,数组名,2. 结构体数组的初始化: 在定义数组的后面加上:初值表列;,7.1.4结构体数组,struct Student int num; char name20; char sex; int age; float score; char addr30; sty3= 10101,Li Lin,M,18,87.5,103 Beijing Road, 10102,Zhang Fun,M,19,99,130 Shanghai Road, 10104,Wang Min,

14、F,20,78.5,1010,Zhongshan Road ;,例:有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。,解题思路:定义一个包含三个元素的结构体数组,每个元素信息包括候选人姓名和得票数;输入被选人姓名;然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成员的值加1;,#include using namespace std; struct person / 声明结构体类型struct person char name20;/ 候选人姓名 int count; / 候选人得票数 leader3=Li,0

15、,Zhang,0,Fun,0;/ 定义结构体数组并初始化 int main() int i,j; char leader_name20; / 定义字符数组 for (i=1;ileader_name;/ 输入所选的候选人姓名 for(j=0;j3;j+) if(strcmp(leader_name,)=0) leaderj.count+; coutnResoult:n; for(i=0;i3;i+) leaderi.countendl; return 0; ,1. 通过指向结构体变量的指针引用结构体变量中的成员,7.1.5指向结构体变量的

16、指针,#include #include using namespace std; int main() struct Student int num; string name; char sex; float score; ; Student stu; Student *p= ,2.用结构体变量和指向结构体变量的指针构成链表,7.1.5指向结构体变量的指针,#define NULL 0 #include using namespace std; struct Student long num; float score; struct Student *next; ; int main() S

17、tudent a,b,c,*head,*p; a. num=31001; a.score=89.5; b. num=31003; b.score=90; c. num=31007; c.score=85; head= ,第6章 指针和引用,7.1 结构体 7.2 共用体 7.3 枚举类型 7.4 typedef的使用,生活中的例子:学校聘请4位教师来任课,每位老师都要在学校住一个晚上,具体如下:,(1) 什么是共用体类型?,张老师 周一住宿,李老师 周二住宿,王老师 周三住宿,孙老师 周四住宿,现在,学校住房紧张,如何安排住宿才能最省?,把他们安排在同一个房间。因为他们住宿时间不同,互不影响。

18、前提条件:不同时住宿,这样才能共享一个房间。,这种共享空间的思想是“共用体”的基础。,使几个不同的变量共享同一段内存的结构,称为 “共用体” 类型的结构。,(2)如何使用共用体,union Data int i; char ch; float f; ,a.i a.ch a.f,1.声明共用体类型,union a,b,c;,2.定义公用体变量,3.引用公用体 成员,例:用同一表格处理学生和教师的数据。 学生的数据中包括:姓名、号码、性别、职业、班级。 教师的数据包括:姓名、号码、性别、职业、职务,struct int num; char name10; char sex; char job; u

19、nion int clas; char position10; category; person2;,分析: (1)学生和教师num,name,sex,job项相同 (2)第项比较特别,若job项是s,则第5项为 class。若job项是t,则第项为position (3)第5项可以用共用体来处理,#include #include using namespace std; struct int num; char name10; char sex; char job; union int clas; char position10; category; person2; int main()

20、 int i; for(i=0;i2;i+) ,personi.sexpersoni.job; if(personi.job = s) cinpersoni.category.clas; else if(personi.job = t) cin personi.category.position; else coutInput error!; coutn; coutNo. name sex job class/positionn; for(i=0;i2;i+) if (personi.job = s) coutpersoni.num per

21、 personi.sex personi.job personi.category.clas; else coutpersoni.num personi.sex personi.job personi.category.position; return 0; ,第6章 指针和引用,7.1 结构体 7.2 共用体 7.3 枚举类型 7.4 typedef的使用,(1)什么是枚举(enumeration)类型,如果一个变量只有几种可能的值,则可以定义为枚举类型;,所谓“枚举”就是指把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。,(2)如何使

22、用枚举(enumeration)类型,1)声明枚举类型格式:,enum 枚举名 枚举元素列表 枚举变量列表; enum Weekday sun, mon, tue, wed, thu, fri, sat;,enum Weekday workday,weekend; workday=mon; weekend=sun; weekday=mon;,正确!,正确!,错误(为什么?),枚举名 枚举变量名;,2)定义枚举变量,说明:(1)枚举类型的枚举元素按常量处理,故称枚举常量,(2)枚举元素可以用来作判断比较。例如: if(workday=mon),(3)每一个枚举元素都代表一个整数,例:设某次体育比

23、赛的结果有3种可能:胜(WIN)、负(LOST)、平局(TIE),编写程序顺序输出这3种情况。,30,#include using namespace std; enum game_resultWIN,LOST,TIE; int main( ) game_result res; int count; for (count=WIN;count=TIE;count+) res=(game_result)count; if(res=WIN) coutWINn; else if (res=LOST) coutLOSTn; else coutTIEn; return 0; ,例: 口袋中有红、黄、蓝、白

24、、黑5种颜色的球若干个。每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况。,解题思路:,#include #include using namespace std; int main() enum colorred,yellow,blue,white,black; enum color pri; int i,j,k,n,loop; n=0; for(i=red;i=black;i+) for(j=red;j=black;j+) if(i!=j) for(k=red;k=black;k+) if(k!=i) ,switch(pri) case red:coutsetw(8)red; break; case yellow:coutsetw(8)yellow;break; case blue:coutsetw(8)blue; b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论