第10章共用体与枚举.ppt

上传人:sccc 文档编号:5889800 上传时间:2023-08-30 格式:PPT 页数:24 大小:180.54KB
返回 下载 相关 举报
第10章共用体与枚举.ppt_第1页
第1页 / 共24页
第10章共用体与枚举.ppt_第2页
第2页 / 共24页
第10章共用体与枚举.ppt_第3页
第3页 / 共24页
第10章共用体与枚举.ppt_第4页
第4页 / 共24页
第10章共用体与枚举.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

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

1、1,第10章 共用体与枚举,C语言程序设计,华北电力大学计算机科学系C语言课程组,2,学习目标,理解共用体概念以及在编程中的作用掌握结构体类型和共用体类型的差别理解枚举概念以及在编程中的作用掌握使用typedef定义新类型的方法及作用,3,10.1共用体,10.1.1 共用体概念【例】教师和学生填表问题,职业:“教师”或“学生”单位:学生 班级编号 整型量表示 教师 某系某教研室 字符数组类型表示问题:如何把这两种类型不同的数据都填入“单位”这个变量中呢?语言提供了一种称为共用体(联合)的类型。,4,如要求“班级”和“教研室”这两种类型不同的数据都填入“单位”这个变量中,就必须把“单位”定义为

2、包含整型和字符型数组这两种类型的“共用体”,如下:union perdata int class;char office10;,5,1、共用体类型定义union 共用体名类型说明符 成员名1;类型说明符 成员名2;.类型说明符 成员名n;,关键字,6,第2种:union perdata int class;char office10;a,b;,第3种 union int class;char office10;a,b,7,2、共用体变量的声明,以perdata类型为例,声明如下:第1种union perdata int class;char officae10;union perdata a,

3、b;/*声明a,b为perdata类型*/,8,说明,共用体变量和结构体变量含义不同:结构体变量所占内存长度是各成员的内存长度之和共用体变量所占内存长度是最长成员的长度。如perdata类型的变量a和b都为10个字节,即office数组的长度。a,b变量如赋整型数据时,只使用了2个字节,而赋字符数组时,可用10个字节。,9,3、共用体的引用 先定义共用体变量后才可以引用它。不能引用共用体变量本身,只能引用其中的成员。例如:printf(d,a);是错误的 printf(d,aclass);是正确的,10,4共用体类型特点(1)同一内存段可放几种不同类型的成员,但每一瞬间只能存放一种。例:uni

4、on data int i;char ch;float f;a,b,c;ai1;ac=a;af2.1;printf(f,af);是可以的。printf(c,ac);无效,11,(2)共用体变量地址及其各成员地址都是同一地址。即&a,&ai,&ac,&af值相同。(3)不能对共用体变量名赋值。也不能定义时进行初始化。(4)不能把共用体变量作为函数参数,也不能使函数返回共同体变量,但可以使用指向共用体的指针。(5)允许定义共用体数组。,12,10.1.2 人员管理,【例10-1】设有一个教师与学生通用的表格,教师数据有姓名,年龄,职业,教研室四项。学生有姓名,年龄,职业,班级四项。编程输入人员数据

5、,再以表格输出。,#include#include struct personchar name10;int age;char job10;unionint mclass;char office20;depa;,13,void main()struct person body2;int n,i;for(i=0;i2;i+)printf(input name,age,job and departmentn);scanf(%s%d%s,bodyi.name,14,10.2 枚举,10.2.1 枚举概念1枚举类型的定义,例如:enum weekday sun,mou,tue,wed,thu,fri,

6、sat;一般形式enum 枚举名 枚举值表;enum是关键字,定义枚举类型必须用enum开头。在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。,15,2.枚举变量的声明先定义,后声明 enum weekday.;enum weekday a,b,c;或者为:enum weekday,16,10.2.2枚举类型应用,【例10-2】星期枚举类型定义#include enum weekday sun,mon,tue,wed,thu,fri,sat a,b,c;main()a=sun;b=mon;c=tue;printf(%d,%d,%dn,a,b,c);,运行结果0,1,2Press any

7、key to continue,17,10.2.3 星期几的计算,【例10-3】编写程序,要求输入当天是星期几,就可以计算并输出n天后是星期几。例如,今天是星期六,若求3天后是星期几,则输入6,3,即输出“3天后是星期2”。源程序如下:,18,#include enum weeksun,mon,tue,wed,thu,fri,sat;enum week day(enum week w,int n)return(enum week)(int)w+n)%7);void main()enum week w0,wn;int n;printf(输入当天为星期几和过的天数:n);scanf(%d%d,19

8、,枚举类型在使用中有以下规定,1.枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值:sun=5;mon=2;sun=mon;都是错误的。2.枚举元素值从0 开始顺序定义为0,1,2。如在weekday中,sun值为0,mon值为1,sat值为6。3.只能把枚举值赋予枚举变量,不能把整型数值直接赋予枚举变量。如:a=sum;b=mon;是正确的。而:a=0;b=1;是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换,如:a=(enum weekday)2;其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于:a=tue;还应该说明的是枚

9、举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。,20,10.3 用typedef定义类型,【例】定义变量a,b:int a,b;采用如下方法定义:typedef int INTEGERINTEGER a,b;两种方法完全等效,关键字,为int类型定义的别名,21,定义一个新的类型名,typedef定义的一般形式为:typedef 原类型名 新类型名,步骤如下:1、按定义变量的方法写出定义体(如:int data);2、将变量名换成新类型名(如data 换成DATATYPE);3、在前面加上typedef(如:typedef int DATATYPE);3、然后可以用新类型名去定义

10、变量(如:DATATYPE md1);,22,例:定义结构体类型typedef struct stu char name20;int age;char sex;STU;STU body1,body2;,23,例:定义数组类型typedef char NAME20;NAME a1,a2,s1,s2;完全等效于:char a120,a220,s120,s220,24,小结,(1)共用体是一种构造类型,各成员不能同时存在。同一时刻,只有一个成员存在于内存中,共用体变量长度是最长的成员的长度。(2)共用体变量不能作为函数的参数,函数也不能返回指向共用体的指针。(3)枚举是一种基本数据类型。枚举变量的取值是有限的,枚举元素是常量,不是变量。枚举元素和整数属于不同类型。(4)类型定义typedef向用户提供了一种自定义类型说明手段,可以给任何类型取一个符合习惯的可读性强的别名。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号