第十五讲共用体与枚举类型.ppt

上传人:sccc 文档编号:6004615 上传时间:2023-09-13 格式:PPT 页数:44 大小:306.54KB
返回 下载 相关 举报
第十五讲共用体与枚举类型.ppt_第1页
第1页 / 共44页
第十五讲共用体与枚举类型.ppt_第2页
第2页 / 共44页
第十五讲共用体与枚举类型.ppt_第3页
第3页 / 共44页
第十五讲共用体与枚举类型.ppt_第4页
第4页 / 共44页
第十五讲共用体与枚举类型.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第十五讲共用体与枚举类型.ppt》由会员分享,可在线阅读,更多相关《第十五讲共用体与枚举类型.ppt(44页珍藏版)》请在三一办公上搜索。

1、-1,C+语言及编程技巧,主讲:匡纲要国防科技大学电子科学与工程学院湖南长沙,-2,第15讲 共用体、枚举类型,-3,第15讲 共用体、枚举类型及位运算(一),引述 7.1 共用体 7.2 枚举类型7.3 编译预处理,-4,引述,共用体(又称联合体或联合,union)一种派生的构造数据类型,但其成员共享同一存储空间。枚举类型(enum)一种由程序员定义的数据类型,它是用标识符表示的整数常量的集合。位运算所有数据在计算机内部都是用位序列表示。C提供了位运算、位运算符以及位域(或称位段)的功能,以便处理一些与机器硬件密切相关的操作。,本章主要内容,-5,7.1 共用体,与结构体类型一样,共用体类型

2、也是一种可由程序员定义的构造数据类型结构体中每一成员有各自的内存空间,而共用体中各成员共享同一内存空间共用体中的成员可以是任何数据类型用来存储共用体的字节数能足以存储其最大的成员多数情况下,共用体包含了两种以上数据类型,但同一时候只能引用一个成员,什么是共用体,-6,7.1 共用体,union 共用体名 共用体成员表;,共用体类型定义,其中共用体成员表,类型名1 共用体成员名1;类型名2 共用体成员名2;.类型名n 共用体成员名n;,-7,7.1 共用体,例1 共用体类型定义示例union intchar int num;char ch;共用体类型:union intchar,共用体类型定义示

3、例,-8,7.1 共用体,例2 下述共用体类型定义表明,共用体成员本身还可以是一个结构体union uni int num;struct char first;char second;str;,共用体类型定义示例,-9,7.1 共用体,说明共用体变量(简称共用体)可有多种形式。形式一 先定义共用体类型,再说明共用体变量例3 共用体变量说明示例一union mixed int num;char ch;float fl;union mixed m1,m2;,共用体变量说明,-10,形式二 在定义共用体类型的同时说明共用体变量例4 共用体变量说明示例二union mixed int num;char

4、 ch;float fl;m1,m2;形式三 利用匿名共用体类型说明共用体变量例5 共用体变量说明示例三union int num;char ch;float fl;m1,m2;,共用体变量说明,7.1 共用体,-11,7.1 共用体,形式四 利用typedef为共用体类型取一个别名,再利用此别名说明共用体变量例6 共用体变量说明示例四,共用体变量说明,typedef union mixed int num;char ch;float fl;MIXED;MIXED m1,m2;,-12,7.1 共用体,形式五 利用宏替换命令将共用体类型(即union 共用体名)重新起名,再用此新名说明共用体变

5、量例7 共用体变量说明示例五#define MIXED union mixedMIXED int num;char ch;float fl;MIXED m1,m2;,共用体变量说明,-13,7.1 共用体,共用体变量说明中可带初始化赋值。但C规定,在共用体变量的初始化中,只能用其第一个成员的类型的值进行初始化。例8 共用体变量初始化示例union mixed int num;char ch;float fl;union mixed m1=0,m2;若写union mixed m1=0.0;,共用体变量的初始化,int型值0,float型值0.0。,编辑时会出现警告信息!,-14,7.1 共用体

6、,例9 对于下述共用体变量初始化union com int num;char ch2;union com c1=0 x4241;十六进制整数1696110,共用体变量的初始化,num=16961,ch1=B ch0=A,存储单元内容示意如下,-15,7.1 共用体,引用共用体成员的两个运算符:“.”和“-”形式一 共用体变量.成员名形式二(*共用体指针变量).成员名形式三 共用体指针变量-成员名,对共用体成员的引用,-16,7.1 共用体,结构体和共用体常相结合使用。例11 在结构体类型中使用共用体类型示例struct int serialno;modelname model;color pa

7、int;date time;union struct carstyle style;car;struct cubicmeters capacity;tonnes load;van;vehiclekind;vehicle;,结构体和共用体结合使用,-17,7.1 共用体,例12 设有一个教师与学生通用的表格,教师数据有姓名、年龄、职业、教研室四项。学生数据有姓名、年龄、职业、班级四项。编程简要模拟输入人员数据,并以表格形式输出。/*program listinfo.cpp*/#include#include main()struct char name10;int age;char job;/*

8、s-student;t-teacher*/union int class;char office10;depa;body2;,结构体和共用体结合使用,-18,7.1 共用体,int i;for(i=0;ibodyi.namebodyi.agebodyi.job;if(bodyi.job=s)cinbodyi.depa.class;else cinbodyi.depa.office;/*for i*/coutsetiosflags(ios:left)endl;coutsetw(16)“Name”setw(8)“Age”setw(8)“Job”setw(16)“class/office“endl;

9、,结构体和共用体结合使用,-19,7.1 共用体,for(i=0;i2;i+)if(bodyi.job=s)coutsetw(16)bodyi.namesetw(8)bodyi.age setw(8)bodyi.jobsetw(16)bodyi.depa.class endl;else coutsetw(16)bodyi.namesetw(8)bodyi.age setw(8)bodyi.jobsetw(16)bodyi.depa.office endl;/*for i*/,结构体和共用体结合使用,-20,7.1 共用体,例13 利用共用体的结构特性实现数据的有机分解/*program uni

10、ondemo.cpp*/#include main()union int i;struct char first;char second;half;number;,结构体变量的赋值操作,number.i=0 x4241;coutnumber.half.firstnumber.half.second endl;number.half.first=a;number.half.second=b;coutnumber.iendl;,AB6261,-21,7.2 枚举类型,枚举类型是C提供的一种可由程序员自行定义的数据类型枚举类型是一种简单类型,而不是构造类型枚举类型用关键字enum定义枚举类型定义了一

11、个用描述性标识符(称为枚举直接量)表示的整数常量的集合,枚举类型定义,-22,7.2 枚举类型,enum 枚举名 枚举值名表;其中枚举值名表标识符1,标识符2,.,标识符n,枚举类型定义,-23,7.2 枚举类型,示例 定义下列枚举类型enum colors RED,YELLOW,BLUE,WHITE,BLACK;enum sexes MALE,FEMALE;enum suits CLUB,DIAMOND,HEART,SPADE;enum months JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC;,枚举类型定义示例,-24,7.2 枚举类型,

12、具有枚举类型的变量称为枚举变量。枚举变量在使用前需先说明。说明枚举变量亦有多种形式。例14 枚举类型定义和枚举变量说明示例enum primarycolor/*形式一*/RED,YELLOW,BLUE;enum primarycolor myfavorcolor;enum sexes/*形式二*/MALE,FEMALE Wang,Zhang;enum/*形式三*/MON,TUE,WED,THU,FRI,SAT,SUN today,yesterday,tomorrow;,枚举变量说明,-25,7.2 枚举类型,例15 可以说明枚举数组变量,如enum months JAN,FEB,MAR,APR

13、,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC;enum months month12;枚举直接量是自动设置值的符号常量(常量标识符)。除非程序员自行指定起始值,否则系统将自动会置枚举直接量的起始值为0,以后的值依次递增1。,枚举变量说明示例,-26,7.2 枚举类型,enum 枚举名 标识符1 整型常量,标识符2 整型常量,.标识符n 整型常量;,枚举变量的初始化,-27,7.2 枚举类型,例16 enum colors RED,/*RED的值为0*/YELLOW=50,BLUE=100,WHITE,/*WHITE的值为101*/BLACK/*BLACK的值为102*/;e

14、num colors col1,col2;enum days MON=1,TUE,WED,THU,FRI,SAT,SUN;enum days thisday,thatday;,枚举类型的初始化示例,-28,7.2 枚举类型,枚举变量、枚举直接量可用于赋值运算、关系运算等。例17 承例16,下列诸语句均符合语法规则thisday=THU;thatday=SAT;thisday=thatday;if(thisday=SAT,枚举变量的运算,-29,7.2 枚举类型,对于枚举变量的赋值,可以使用强制类型转换将一整数值转换为具枚举类型的相应值,再赋予枚举变量。例19 设有下述枚举类型定义和枚举变量说明

15、enum days MON,TUE,WED,THU,FRI,SAT,SUN;enum days today,theotherday;问:已知今天是星期六,则大后天将是星期几?today=SAT;throtherday=(enum days)(int)today+3)%7);/*theotherday将有值TUE,即大后天是星期二*/,枚举类型强制转换,-30,7.2 枚举类型,示例 输出月份阿拉伯数字(1、.、12)与英文名称(January、.、December)对应表。#include#include enum months JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AU

16、G,SEP,OCT,NOV,DEC;main()enum months month;char*monthname=,January,February,March,April,May,June,July,August,September,October,November,December;,枚举类型简单应用示例,-31,7.2 枚举类型,for(month=JAN;month=DEC;month+)coutsetw(2)(int)monthsetw(16)monthnamemonthendl;,枚举类型简单应用示例,1 January 2 February 3 March 4 April 5 M

17、ay 6 June 7 July 8 August 9 September10 October11 November12 December,-32,7.2 枚举类型,例20 已知口袋中有红、黄、蓝、白、黑5种颜色的球若干个,如果每次从口袋中取出3个球,问得到3种不同颜色球的可能取法,并输出每种排列的三种颜色。分析 共有10种组合,60种排列。,枚举类型简单应用示例,自己上机编程实现,-33,7.2 枚举类型,具体编码/*program balls.cpp*/#include#include main()enum colors RED,YELLOW,BLUE,WHITE,BLACK;enum c

18、olors i,j,k,pri;int n,loop;n=0;for(i=RED;i=BLACK;i+)for(j=RED;j=BLACK;j+),枚举类型简单应用示例,-34,7.2 枚举类型,if(i!=j)for(k=RED;k=BLACK;k+)if(k!=i/*switch loop*/,枚举类型简单应用示例,-35,7.2 枚举类型,switch(pri)case RED:coutsetw(10)red;break;case YELLOW:coutsetw(10)yellow;break;case BLUE:coutsetw(10)blue;break;case WHITE:cou

19、tsetw(10)white;break;case BLACK:coutsetw(10)black;break;default:break;/*switch pri*/*for loop*/coutendl;/*if k*/*if i*/coutendltotal:”setw(5)n;,枚举类型简单应用示例,-36,7.2 枚举类型,1 red yellow blue2 red yellow white3 red yellow black4 red blue yellow5 red blue white6 red blue black.55 black blue red56 black blu

20、e yellow57 black blue white58 black white red59 black white yellow60 black white bluetotal:60,枚举类型简单应用示例,-37,7.3 编译预处理,常用C+编译预处理指令(1)文件包含#inlcude 包含(2)定义/取消定义宏替换#define 定义#undef 取消定义(3)条件编译#if 如果#ifdef 如果已定义#ifndef 如果未定义#elif 否则如果#else 否则#endif 结束如果(4)其它#line 设置行号#error 出错信息#pragma 编译状况设置,-38,文件包含命令

21、#include功能:将该指令所指定文件的内容包含进源文件中写该指令的当前点。#include指令的一般形式:#include 或#include“文件名”(或#include“文件标识”)例:#include#include#include#include,7.3 编译预处理,#include#include,#include#incdude using namespace std;,-39,定义/取消定义宏指令#define/#undef#define指令最基本的用途是在编译预处理期间作简单的字符串替换。其一般的形式是#define 标识符 字符序列例:#define GREETING“W

22、elcome to C+world!n”#define PI 3.1416,7.3 编译预处理,const char GREETING=“Welcome to C+world!n”;const double PI=3.1416,-40,7.3 编译预处理,定义/取消定义宏指令#define/#undef 宏指令也可以带参数。其一般形式为:#define 标识符(参数)字符序列例:#include#define PI 3.1416#define CIRCUMFERENCE(x)(2*PI*(x)#define AREA(x)(PI*(x)*(x)void main()int radius=10;

23、double circumference,area;circumference=CIRCUMFERENCE(radius);area=AREA(radius);,const double PI=3.1416;inline double circum(double x)return(2*PI*x);inline double carea(double x)return(PI*x*x);,circumference=circum(radius);circlearea=carea(radius);,-41,7.3 编译预处理,定义/取消定义宏指令#define/#undef#undef指令可以结束先

24、前宏替换指令(#define)作用。#define的作用域从其定义开始,到用#undef指令取消其定义或到源文件结束时为止。例:#define PI 3.1416#undef PI#define PI 3.1415926,-42,条件编译指令一般形式#if 常量表达式 程序段1#else 程序段2#endif#if、#else与if、else的区别:(1)、#if指令的求值发生在编译预处理期间,而if语句的求值发生在程序运行期间;(2)、#if指令中的表达式只能是常量表达式,而且可以不加圆括号;(3)、整个#if指令不加分号。,7.3 编译预处理,-43,1.结构体类型、共用体类型和枚举类型都是可由程序员自行定义的数据类型;2.共用体又称联合体或联合,它通常系由几种不同的成员组合而成,每个共用体成员有自己的名字。所有共用体成员共享由同一内存起始地址开始的一个存储区。一个共用体变量可被赋予各种类型的数据,但在某一确定的时刻仅能保存它的某一个共用体成员的值。3.枚举类型是简单类型。它定义了用描述标识符(称为枚举常量)表示的整数常量的集合。4.C+语言具有编译预处理功能,提供了一批编译处理指令。,7.4 小结,-44,欢迎进入第八章输入/输出流文 件,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号