《C++程序设计基础》-陆勤-电子教案 第七章 共用体、枚举类型

上传人:E**** 文档编号:89399770 上传时间:2019-05-24 格式:PPT 页数:30 大小:89KB
返回 下载 相关 举报
《C++程序设计基础》-陆勤-电子教案 第七章  共用体、枚举类型_第1页
第1页 / 共30页
《C++程序设计基础》-陆勤-电子教案 第七章  共用体、枚举类型_第2页
第2页 / 共30页
《C++程序设计基础》-陆勤-电子教案 第七章  共用体、枚举类型_第3页
第3页 / 共30页
《C++程序设计基础》-陆勤-电子教案 第七章  共用体、枚举类型_第4页
第4页 / 共30页
《C++程序设计基础》-陆勤-电子教案 第七章  共用体、枚举类型_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《《C++程序设计基础》-陆勤-电子教案 第七章 共用体、枚举类型》由会员分享,可在线阅读,更多相关《《C++程序设计基础》-陆勤-电子教案 第七章 共用体、枚举类型(30页珍藏版)》请在金锄头文库上搜索。

1、1,第七章 共用体、枚举类型,2,7.1 共用体,union 共用体名 共用体成员表 ;,其中共用体成员表:,类型名1 共用体成员名1; 类型名2 共用体成员名2; 类型名n 共用体成员名n;,3,例 union intchar int num; char ch; ;,4,例 共用体成员本身还可以是一个结构体 union uni int num; struct char first; char second; str; ;,5,共用体变量定义中可带初始化赋值,在共用体变量的初始化中,只能用其第一个成员类型的值进行初始化。 例 union mixed int num; char ch; floa

2、t fl; ; union mixed m1=0,m2; 若写 union mixed m1=0.0;,int型值0,系统自动将0.0转换为整数0后赋值给变量m1.num,6,例 union com int num; char ch2; ; union com c1=0x4241; 十六进制整数(1696110),num=1696110,ch1=B ch0=A,存储单元内容示意如下,7,引用共用体成员的两个运算符:”.”和”-”: 形式一 共用体变量.成员名 形式二 (*共用体指针变量) . 成员名 / ” .” 运算符优先级别高于”*” 形式三 共用体指针变量-成员名,8,例 假定已定义了一

3、批数据类型,包括modelname, color,date,carstyle, cubicmeters,tonnes等。如下两个结构类型定义分别描述轿车和载重车的有关信息 struct car int serialno; / 系列编号 modelname model; / 产品型号 color paint; / 车身颜色 date time; / 出厂日期 carstyle style; / 流行式样 ;,9,struct van int serialno; / 系列编号 modelname model; / 产品型号 color paint; / 车身颜色 date time; / 出厂日期

4、 cubicmeters capacity; / 装载容积 tonnes load; / 载重吨位 ; 可将轿车结构体类型和载重车结构类型统一地用一个在交通工具结构体类型加以描述,在该结构体类型的成员中使用共用体类型。,10,struct int serialno; / 系列编号 modelname model; / 产品编号 color paint; / 车身颜色 date time; / 出厂日期 union struct carstyle style; / 流行式样 car; struct cubicmeters capacity; / 装载容积 tonnes load; / 载重吨位

5、van; / 可根据系列编号选用car或van vehiclekind; vehicle;,11,轿车,载重车,12,例13 设有一个教师与学生通用的表格,教师数据有姓名、年龄、职业、教研室四项。学生数据有姓名、年龄、职业、班级四项。编程简要模拟输入人员数据,并以表格形式输出。 #include void main() struct char name10; int age; char job; / s-student;t-teacher union int class1; char office10; depa; / 可根据职业选用class或office body2;,13,int i;

6、for (i=0;ibodyi.namebodyi.agebodyi.job; if (bodyi.job=s) cinbodyi.depa.class1; else cinbodyi.depa.office; cout“nametage job class/officen“;,14,for (i=0;i2;i+) if (bodyi.job=s) coutbodyi.namebodyi.age bodyi.jobbodyi.depa.class1endl; else coutbodyi.namebodyi.age bodyi.jobbodyi.depa.officeendl; ,15,例 利

7、用共用体的结构特性实现数据的有机分解 #include #include void main() union int i; struct char first; char second; half; number;,number.i=0x4241; coutnumber.half.first number.half.secondendl; number.half.first=a; number.half.second=b; couthexnumber.iendl; ,AB 6261,当给共用体成员i赋整数值后,其低8位和高8位也就 是共用体中结构体成员first和second的值;,16,7.

8、2 枚举类型,枚举类型是一种可由程序员自行定义的数据类型 枚举类型是一种简单类型,而不是构造类型 枚举类型用关键字enum定义 枚举类型定义了一个用描述性标识符(称为枚举直接量)表示的整数常量的集合,17,enum 枚举名 枚举值名表 ; 其中枚举值名表 标识符1,标识符2,标识符n,枚举类型定义,18,示例 定义下列枚举类型 enum colors RED,YELLOW,BLUE,WHITE,BLACK ; enum sexes MALE,FEMALE ; enum months JAN,FEB,MAR,APR,MAY,JUN, JUL,AUG,SEP,OCT,NOV,DEC ;,19,例

9、可以说明枚举数组变量,如 enum months JAN,FEB,MAR,APR,MAY,JUN, JUL,AUG,SEP,OCT,NOV,DEC ; enum months month12; 枚举直接量是自动设置值的符号常量(常量标识符)。除非程序员自行指定起始值,否则系统将自动会置枚举直接量的起始值为0,以后的值依次递增1。,20,enum 枚举名 标识符1 整型常量, 标识符2 整型常量, 标识符n 整型常量 ;,枚举变量的初始化,21,例 enum colors RED, / RED的值为0 YELLOW=50, BLUE=100, WHITE, / WHITE的值为101 BLACK

10、 / BLACK的值为102 ; enum colors col1,col2; enum days MON=1,TUE,WED,THU,FRI,SAT,SUN ; enum days thisday,thatday;,22,枚举变量、枚举直接量可用于赋值运算、关系运算等。 例 承上例,下列诸语句均符合语法规则 thisday=THU; thatday=SAT; thisday=thatday; if (thisday=SAT ,23,对于枚举变量的赋值,可以使用强制类型转换将一整数值转换为枚举类型的相应值,再赋予枚举变量。 例 设有下述枚举类型定义和枚举变量说明 enum days MON,T

11、UE,WED,THU,FRI,SAT,SUN ; enum days today,theotherday; 问:已知今天是星期六,则大后天将是星期几? today=SAT; / today为 5 theotherday=(enum days)(int)today+3)%7); / theotherday为1,即值TUE,即大后天是星期二,24,例 输出月份阿拉伯数字(1、12)与英文名称(January、 、December)对应表。 #include enum months JAN=1,FEB,MAR,APR,MAY,JUN, JUL,AUG,SEP,OCT,NOV,DEC ; void m

12、ain() enum months month; char *monthname = “, “January“,“February“,“March“,“April“, “May“,“June“,“July“,“August“,“September“, “October“,“November“,“December“ ;,25,for (month=JAN;month=DEC;month+) cout (int)monthmonthnamemonth; ,1 January 2 February 3 March 4 April 5 May 6 June 7 July 8 August 9 Sept

13、ember 10 October 11 November 12 December,26,例 已知口袋中有红、黄、蓝、白、黑5种颜色的球若干个,如果每次从口袋中取出3个球,问得到3种不同颜色球的可能取法,并输出每种排列的三种颜色。 分析 共有10种组合,60种排列。,27,#include void main() enum colors RED,YELLOW,BLUE,WHITE,BLACK ; enum colors pri; int n,loop,i,j,k; n=0; for (i=RED;i=BLACK; i+) for (j=RED;j=BLACK;j+) if (i!=j) for

14、(k=RED;k=BLACK;k+) if (k!=i&k!=j),28, n=n+1; coutnt; for (loop=1;loop=3;loop+) switch (loop) case 1: pri=colors(i);break; case 2: pri=colors(j);break; case 3: pri=colors(k);break; default:break; ,29,switch (pri) case RED: cout“red “; break; case YELLOW:cout“yellow “;break; case BLUE: cout“blue “; br

15、eak; case WHITE: cout“white “; break; case BLACK: cout“black “; break; default: break; coutendl; cout“ntotal: “nendl; ,30,1 red yellow blue 2 red yellow white 3 red yellow black 4 red blue yellow 5 red blue white 6 red blue black 55 black blue red 56 black blue yellow 57 black blue white 58 black white red 59 black white yellow 6

展开阅读全文
相关资源
相关搜索

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

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