W07章-结构体联合体与枚举类型 .ppt

上传人(卖家):hyngb9260 文档编号:6040723 上传时间:2023-05-23 格式:PPT 页数:32 大小:367.50KB
下载 相关 举报
W07章-结构体联合体与枚举类型 .ppt_第1页
第1页 / 共32页
W07章-结构体联合体与枚举类型 .ppt_第2页
第2页 / 共32页
W07章-结构体联合体与枚举类型 .ppt_第3页
第3页 / 共32页
W07章-结构体联合体与枚举类型 .ppt_第4页
第4页 / 共32页
W07章-结构体联合体与枚举类型 .ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、 本章介绍的数据类型是由各种基本数据类型的数本章介绍的数据类型是由各种基本数据类型的数据据组合而成的导出数据类型组合而成的导出数据类型:结构体结构体 共用体共用体 枚举类型枚举类型 但结构体、共用体和枚举类型各有不同的特点。但结构体、共用体和枚举类型各有不同的特点。第第7章章 结构体、共同体和枚举类结构体、共同体和枚举类型型第第7章章 结构体、共同体和枚举类型结构体、共同体和枚举类型7.1结构体的定义与应用结构体的定义与应用7.3共同体的定义与应用共同体的定义与应用7.4枚举类型枚举类型unsignedlong7.1结构体结构体7.1.1结构体类型的说明结构体类型的说明学号学号姓名姓名性别性别

2、年龄年龄成绩成绩籍贯籍贯lixin 18 M Nanjing87.5charname5charintfloatcharaddr7 要将这份档案组合成要将这份档案组合成一个一个数据项,那么,无论用前面介数据项,那么,无论用前面介绍的哪种类型的数据,包括数组都不可能。因为档案中不是绍的哪种类型的数据,包括数组都不可能。因为档案中不是同一种数据类型。同一种数据类型。2095105 但是,处理文档是计算机办公的特长。为此,但是,处理文档是计算机办公的特长。为此,c+设计设计了另一种导出类型的数据。它把各种类型的数据结合在一起,了另一种导出类型的数据。它把各种类型的数据结合在一起,成为一种数据类型,这种

3、类型称为成为一种数据类型,这种类型称为结构体结构体类型类型。如果有这样一份档案数据类型struct student unsigned long num;char name5;char sex;int age;float score;char addr7;s;定义结构体的指令标识符结构体的类型标识符与int,float等性质相同含6个成员的结构体家族全局量s被定义为结构体类型的变量unsignedlong学号学号姓名姓名性别性别年龄年龄成绩成绩籍贯籍贯lixin 18 M Nanjing87.5charname5charintfloatcharaddr72095105数据类型定义如下:7.1.1

4、 结构体类型的说明结构体类型的说明s系统怎样为变量系统怎样为变量 s 分配单元呢?请看分配单元呢?请看struct student unsigned long num;char name5;char sex;int age;float score;char addr7;s;numnamesexagescoreaddr定义定义了结构体类型了结构体类型后后,其变量也可这样定义其变量也可这样定义void main()student s;.编译结果一样编译结果一样;加分号7.1.1 结构体类型的说明结构体类型的说明void main()struct student unsigned long num;

5、char name5;char sex;int age;float score;char addr7;s;.s也可以这样定义numnamesexagescoreaddr因为没有类型名,无法再定义其它变量7.1.1 结构体类型的说明结构体类型的说明 结构体结构体是各种不同类型数据的组合,编程者可是各种不同类型数据的组合,编程者可按实际需要进行这种组合。按实际需要进行这种组合。如:图书馆的书有若干特点:如:图书馆的书有若干特点:char bname100;char author80;float price;int id;struct book ;book类型类型的成员变量的成员变量注意注意:boo

6、k是一种是一种数据类型数据类型,而,而不是变量不是变量。书名(字符串)作者(字符串)定价(实数类型)编号(整型)7.1.1 结构体类型的说明结构体类型的说明7.1.2 结构体与数组间的区别结构体与数组间的区别 数组数组所有的元素都所有的元素都具有具有相同的相同的数据类型。数据类型。int array10;定义的是定义的是数组数组变量变量。数组元素用下标数组元素用下标 来访来访问。如:问。如:array1n结构体结构体它用它用各种不同各种不同数据类型的数据类型的成员变量成员变量来组来组成和描述一个对象或者一成和描述一个对象或者一个概念。个概念。n上例中定义的是表示上例中定义的是表示“教教材课本材

7、课本”的结构的结构。nbook Cpp;该语句用该语句用book类型定义类型定义变量,变量,Cpp是是book类型类型的的变量变量。n成员变量用成员变量用.”来访问来访问如:如:Cpp.author表示表示Cpp变量的变量的 作者作者 成员成员void main()student s;cins.name;cins.addr;s.score=87.5;s.age=19;s.sex=M;s.num=2095105;.snumnamesexagescoreaddrstruct student unsigned long num;char name6;char sex;int age;float sc

8、ore;char addr8;执行语句时,假如键入如下数据:lixinNanjing传递数据时,系统是这样寻址的:l i x i n7.1.3 结构体成员的使用结构体成员的使用void main()student s;cins.name;cins.addr;s.score=87.5;s.age=19;s.sex=M;s.num=2095105;.snumnamesexagescoreaddrstruct student unsigned long num;char name6;char sex;int age;float score;char addr8;执行语句时,假如键入如下数据:lixi

9、nNanjing传递数据时,系统是这样寻址的:l i x i nN a n j i n gvoid main()student s;cins.name;cins.addr;s.score=87.5;s.age=19;s.sex=M;s.num=2095105;.snumnamesexagescoreaddrstruct student unsigned long num;char name6;char sex;int age;float score;char addr8;显然,以下过程完全相同。访问时l i x i nN a n j i n g87.5s.addr变量名成员名分隔符main()

10、struct student unsigned long num;char name6;char sex;int age;float score;char addr8;s=2095105,“lixin”,M,19,87.5,“Nanjing”;.初始化定义数据次序不能乱,不可有空缺数据次序不能乱,不可有空缺snumnamesexagescoreaddrl i x i nN a n j i n g87.52095105M19编译时main()student s43;.struct student unsigned long num;char name6;char sex;int age;floa

11、t score;char addr8;结构体类型的数组编译系统给它分配43个结构体类型的元素7.1.4 结构体数组结构体数组S0numnamesexagescoreaddrS1numnamesexagescoreaddrS42numnamesexagescoreaddr.7.1.4 结构体数组结构体数组结构体类型变量进行输入结构体类型变量进行输入/输出时,不输出时,不可以作整体输入。即:可以作整体输入。即:cinbook1;而必须对成员变量分别输入而必须对成员变量分别输入/输出:输出:cinbook1.bname;cinbook1.author;等等 结构体变量各成员变量在内存结构体变量各成员

12、变量在内存中是中是连续存放连续存放的。的。struct book char bname100;char author80;float price;int id;book1;共共100字节字节共共80字节字节共共4字节字节bnameauthorprice共共4字节字节id可以用结构体类型定义数组,如:可以用结构体类型定义数组,如:book books10;结构体类型的成员变量可以含有数结构体类型的成员变量可以含有数组变量。组变量。问题:输入语句问题:输入语句cinbooks.price;有没有没有问题?为什么?有问题?为什么?结构体与数组结构体与数组答:因为这里books是数组名,不是变量名。结

13、构体可以作为函数的参数,也可作为结构体可以作为函数的参数,也可作为函数的返回值函数的返回值 函数的参数为结构体类型函数的参数为结构体类型 形参与实参的结合属于值调用方式。形参与实参的结合属于值调用方式。要提高其运行效率要提高其运行效率,可采用,可采用引用类型引用类型的的结构体类型变量。(参见结构体类型变量。(参见P124例例7.4)结构体与函数结构体与函数7.1.5*结构体关于静态成员的使用#include iostream.hstruct dateint year,month,day;struct schar name10;int id;static date d;s1,s2;date s:

14、d=2000,1,1;void main()在结构体的所有变量中,编译系统在结构体的所有变量中,编译系统仅为静态成员分配一个存储空间。仅为静态成员分配一个存储空间。即:所有该结构类型变量的静态成员即:所有该结构类型变量的静态成员共享同一存储空间。共享同一存储空间。更改更改s1s1的的d d成员值,其他成员值,其他s s类型变量类型变量(如如s2)s2)的的d d成员值也会改变成员值也会改变(虽然我们虽然我们没有用额外的语句来改变他的值没有用额外的语句来改变他的值)。结构类型中的静态成员使用前必须结构类型中的静态成员使用前必须进行进行定义性定义性说明说明,可在文件作用域的可在文件作用域的某一个地

15、方,且仅允许一次某一个地方,且仅允许一次.格式中格式中使用使用作用域运算符作用域运算符:date date s:ds:d;含有静态成员的结构类型必须说明含有静态成员的结构类型必须说明为为全局全局的的7.1.6 一些要注意的问题 定义结构体的成员类型时除了定义结构体的成员类型时除了static存储类型外,不允许存储类型外,不允许有其它存储类型。而用有其它存储类型。而用static存储类型定义的成员变量仅存储类型定义的成员变量仅作特殊用途时使用作特殊用途时使用struct stru static int id;auto int eng;n结构体变量结构体变量的存储类型说明方法与以前讲的一样:sta

16、tic stru s1;extern stru s2;auto stru s3;问题:请解释上面各条变量定义语句中各标识符的含义,如static stru s1等。7.3 共同体共同体 union 计算机的容量随着科技的发展已越来越大计算机的容量随着科技的发展已越来越大,人们对存储器是否够,人们对存储器是否够用已较少关注。但是,十几年前却并不乐观。为此,人们想了许多用已较少关注。但是,十几年前却并不乐观。为此,人们想了许多办法来提高资源的利用率,采用共同体类型的数据就是一例。办法来提高资源的利用率,采用共同体类型的数据就是一例。我们知道,一个程序中有若干个语句,计算机在执行某个语句时,我们知道

17、,一个程序中有若干个语句,计算机在执行某个语句时,就要访问这个语句中的变量。而其它语句以及其中的其它变量却处就要访问这个语句中的变量。而其它语句以及其中的其它变量却处于临时静止状态。尽管是临时静止,如果不是寄存器变量,它占用于临时静止状态。尽管是临时静止,如果不是寄存器变量,它占用的资源却要等到所在函数执行结束才释放。的资源却要等到所在函数执行结束才释放。有没有办法这样做,当变量处于静止状态,哪怕是临时静止,也有没有办法这样做,当变量处于静止状态,哪怕是临时静止,也让它把资源让出来呢?比如说,把我们这个班级当作变量,这间教让它把资源让出来呢?比如说,把我们这个班级当作变量,这间教室当作存储器,

18、下一个小时我们不上课,就让出来。但这间教室却室当作存储器,下一个小时我们不上课,就让出来。但这间教室却不让它闲着,而是另一个班级上课。答案当然是肯定的,这种办法不让它闲着,而是另一个班级上课。答案当然是肯定的,这种办法就是就是C+中提供的共同体类型的数据。中提供的共同体类型的数据。我们的教材中又将共同体称为联合体。它的定义形式与结构体很我们的教材中又将共同体称为联合体。它的定义形式与结构体很相似,只不过把相似,只不过把struct改成改成union。例如:。例如:union data char a;int b3;float s;s;union data char a;int b3;float

19、s;union char a;int b3;float s;s;定义联合体的指令标识符联合体的类型标识符联合体的成员联合体变量不定义联合体类型直接定义s为联合体变量7.3 共同体共同体 union 所谓共同体,本例中就是指下面三个成员共同享用所谓共同体,本例中就是指下面三个成员共同享用一个一个存储区。存储区。存储区的大小则由三者中用量最大者决定。在某一个时刻,当变量存储区的大小则由三者中用量最大者决定。在某一个时刻,当变量a使用存储区时,数组使用存储区时,数组s和变量和变量b就不能使用,要让出来。这样就使就不能使用,要让出来。这样就使该存储区的空间获得充分利用,达到节省资源的目的。该存储区的空

20、间获得充分利用,达到节省资源的目的。union data char a;int b3;float s;s;共同体的定义和用法与结构体基本相同,详细描述参阅共同体的定义和用法与结构体基本相同,详细描述参阅P128130。7.3 共同体共同体 union7.3.2 共用体与结构体区别共用体与结构体区别 union utype int i;char ch;struct stype int i;char ch;data.idata.chdata.idata.ch地址增加 人们在阅读程序,尤其是语句较多或者逻辑关系比较人们在阅读程序,尤其是语句较多或者逻辑关系比较复杂的程序时,就不象阅读文学作品那样轻松

21、。其中一个复杂的程序时,就不象阅读文学作品那样轻松。其中一个很重要的原因就是程序中的标识符不象文学作品那样可以很重要的原因就是程序中的标识符不象文学作品那样可以顾名思义。顾名思义。为了提高人们阅读兴趣和效率,为了提高人们阅读兴趣和效率,C+也与其它高级语言也与其它高级语言一样,构造了一种一样,构造了一种可以顾名思义可以顾名思义的数据类型的数据类型称为称为枚举枚举类型类型。例如。例如第第7.4 枚举类型枚举类型 enumenum weekdaysun,mon,tue,wed,thu,fri,sat;上面声明了一个枚举类型上面声明了一个枚举类型weekday,花括号中,花括号中sun,mon,sa

22、t等称为枚举元素或枚举常量。等称为枚举元素或枚举常量。表示这个类型的变量的值只能是以上表示这个类型的变量的值只能是以上7个值之一,它们个值之一,它们是用户自己定义的标识符。是用户自己定义的标识符。声明枚举类型的一般形式为声明枚举类型的一般形式为enum 枚举类型名枚举类型名 枚举常量表列枚举常量表列;在声明了枚举类型之后,可以用它来定义变量。如在声明了枚举类型之后,可以用它来定义变量。如weekday workday,week_end;这样,这样,workday和和week_end被定义为枚举类型被定义为枚举类型weekday的变量。的变量。7.4 枚举类型枚举类型根据以上对枚举类型根据以上对

23、枚举类型weekday的声明,枚举变量的的声明,枚举变量的值只能是值只能是sun到到sat之一。例如之一。例如workday=mon;week_end=sun;也可以直接定义枚举变量,如也可以直接定义枚举变量,如enumsun,mon,tue,wed,thu,fri,sat workday,week_end说明说明:(1)对枚举元素对枚举元素按常量处理按常量处理,故称,故称枚举常量枚举常量。(2)枚举元素作为常量,它们是有值的,枚举元素作为常量,它们是有值的,C+编译编译按定义时的顺序对它们赋值为按定义时的顺序对它们赋值为0,1,2,3,。也可以在。也可以在声明枚举类型时另行指定枚举元素的值。

24、声明枚举类型时另行指定枚举元素的值。枚举类型变量的使用枚举类型变量的使用 枚举变量可以与同类型的枚举变量做判断枚举变量可以与同类型的枚举变量做判断比较(关系运算)。比较(关系运算)。可将枚举常量赋值给枚举类型变量,也可可将枚举常量赋值给枚举类型变量,也可在同类型枚举变量间相互赋值。在同类型枚举变量间相互赋值。但一个整数不能直接赋给一个枚举变量。但一个整数不能直接赋给一个枚举变量。workday=6 workday=sun 枚举类型变量不能直接从键盘输入枚举类型变量不能直接从键盘输入 cinworkday;但可以直接输出。但可以直接输出。例例7.7 口袋中有红、黄、蓝、白、黑口袋中有红、黄、蓝、

25、白、黑5种颜色的球若干个。种颜色的球若干个。每次从口袋中任意取出每次从口袋中任意取出3个球,问得到个球,问得到3种不同颜色的球的种不同颜色的球的可能取法,输出每种排列的情况。可能取法,输出每种排列的情况。#include#include /在输出时要用到setw控制符using namespace std;int main()enum color red,yellow,blue,white,black;/声明枚举类型colorcolor pri;/定义color类型的变量priint i,j,k,n=0,loop;/n是累计不同颜色的组合数for(i=red;i=black;i+)/当i为某一

26、颜色时 for(j=red;j=black;j+)/当j为某一颜色时if(i!=j)/若前两个球的颜色不同 for(k=red;k=black;k+)/只有前两个球的颜色不同,才需要检查第3个球的颜色if(k!=i)&(k!=j)/3个球的颜色都不同n=n+1;/使累计值n加1coutsetw(3)n;/输出当前的n值,字段宽度为3for(loop=1;loop=3;loop+)/先后对3个球作处理switch(loop)/loop的值先后为1,2,3case 1:pri=color(i);break;/color(i)是强制类型转换,使pri的值为icase 2:pri=color(j);b

27、reak;/使pri的值为j case 3:pri=color(k);break;/使pri的值为k default:break;switch(pri)/判断pri的值,输出相应的“颜色”case red:coutsetw(8)red;break;case yellow:coutsetw(8)yellow;break;case blue:coutsetw(8)blue;break;case white:coutsetw(8)white;break;case black:coutsetw(8)black;break;default :break;coutendl;couttotal:nendl;

28、/输出符合条件的组合的个数return 0;运行结果如下:1 red yellow blue2 redyellow white3 red yellow black58 blackwhitered59black whiteyellow60 black whitebluetotal:60不用枚举常量不用枚举常量,而用常数而用常数0代表代表“红红”,1代表代表“黄黄”也也可以。但显然用枚举变量更直观,因为枚举元素都选用了可以。但显然用枚举变量更直观,因为枚举元素都选用了令人令人“见名知意见名知意”的标识符,而且枚举变量的值限制在定的标识符,而且枚举变量的值限制在定义时规定的几个枚举元素范围内,如果赋

29、予它一个其他的义时规定的几个枚举元素范围内,如果赋予它一个其他的值,就会出现出错信息,便于检查。值,就会出现出错信息,便于检查。#includeenum grademath,phy,eng,com,d;void main()grade scor;int i;int score6d;for(i=1;i=5;i+)for(scor=math;scorscoreiscor;for(i=1;i=5;i+)for(scor=math;scor=com;scor=(grade)(int)scor+1)coutscoreiscor=scoreiscort;coutendl;7.4 枚举类型枚举类型应用应用例:叙述程序的功能,注意枚举类型成员:例:叙述程序的功能,注意枚举类型成员:d的使用。的使用。定义枚举类型定义枚举变量枚举常数定义数组下标 习题:P135 4,5,6,7第第7章章 结构体、共同体和枚举类型结构体、共同体和枚举类型第第7章章 结构体、共同体和枚举类型结构体、共同体和枚举类型学习要求学习要求 了解了解struct结构体类型的特点;结构体类型的特点;了解共同体特点;了解共同体特点;了解枚举类型的语法和语义;了解枚举类型的语法和语义;理解自定义数据类型的用途和定义方法,理解自定义数据类型的用途和定义方法,掌握自定义类型的使用方法掌握自定义类型的使用方法。

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(W07章-结构体联合体与枚举类型 .ppt)为本站会员(hyngb9260)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|