




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章共用体与枚举类型,10.1共用体类型与共用体变量,返回,C语言程序设计教程,10.2共用体变量的引用,10.3共用体变量的应用,10.4位运算与位段结构,10.5枚举类型,10.6类型定义,10.1共用体类型与共用体变量,共用体是C的由用户定义的数据类型。共用体把不同类型的数据项组成一个整体,这些不同类型的数据项在内存中所占用的起始单元是相同的。,1.共用体类型的定义共用体类型定义用关键字union标识,形式为:,下一页,第10章共用体与枚举类型,上一页,union标识符成员说明列表;,标识符给出共用体名,是共用体类型名的主体,定义的共用体类型由“union标识符”标识。例如,定义一个共用体类型,要求包含一个整型成员,一个字符型成员和一个单精度型成员:unionicfinti;charc;floatf;,下一页,第10章共用体与枚举类型,上一页,2共用体变量的定义,(1)先定义共用体类型,再定义共用体变量:union共用体名成员表;union共用体名变量表;,例如:uniondatainti;charch;floatf;uniondataa,b,c;,下一页,第10章共用体与枚举类型,上一页,(2)定义共用体类型的同时定义共用体变量,例如:uniondatainti;charch;floatf;a,b,c;,下一页,第10章共用体与枚举类型,上一页,union共用体名成员表变量表;,(3)定义共用体类型时,省略共用体类型名,同时定义共用体类型变量,union成员表变量表;,第10章共用体与枚举类型,例如:unioninti;charch;floatf;a,b,c;,返回,10.2共用体变量的引用,共用体变量不能直接使用,只能使用里面的某个成员,其成员同样通过点运算描述。形式为:共用体变量名.成员名例如,定义上面共用体类型变量a,a占有4个字节的空间,a.i表示其整型成员,a.ch表示其字符型成员,a.f表示其单精度型成员。,下一页,第10章共用体与枚举类型,上一页,(1)共用体变量中,可以包含若干个成员及若干种类型,但共用体成员不能同时使用。在每一时刻,只有一个成员及一种类型起作用,不能同时引用多个成员及多种类型。,下一页,第10章共用体与枚举类型,上一页,说明,(2)共用体变量中起作用的成员值是最后一次存放的成员值,即共用体变量所有成员共用同一段内存单元,后来存放的值将原先存放的值覆盖,故只能使用最后一次给定的成员值。如:a.i=278,a.ch=D,a.f=5.78;不能企图通过下面的printf函数得到a.i和a.ch的值:printf(“%d,%c,%f”,a.i,a.ch,a.f);但能得到a.f的值。,(3)共用体变量的地址和它的各个成员的地址相同。(4)不能企图引用共用体变量名来得到某成员的值。(5)共用体变量不能作函数参数,函数的返回值也不能是共用体类型。(6)共用体类型和结构体类型可以相互嵌套,共用体中成员可以为数组,甚至还可以定义共用体数组。,下一页,第10章共用体与枚举类型,上一页,写出下列程序的执行结果,main()unionexxinta,b;structintc,d;lpp;e=10;e.b=e.a+20;e.lpp.c=e.a+e.b;e.lpp.d=e.a*e.b;printf(“%d,%dn”,e.lpp.c,e.lpp.d);,第10章共用体与枚举类型,例10.1,运行结果:60,3600,返回,设有若干教师的数据,包含有教师编号、姓名、职称,若职称为讲师,则描述他们的所讲课程,若职称为教授,则描述他们所写论文数目。,下一页,第10章共用体与枚举类型,上一页,10.3共用体变量的应用,例10.2,点击,查看程序请,10.4位运算与位段结构,位是指二进制数的一位,其值为0或1。位段以位为单位定义结构体(或共用体)中成员所占存储空间的长度。含有位段的结构体类型称为位段结构。,下一页,第10章共用体与枚举类型,上一页,10.4.1位运算在用位运算符进行数的运算时,数是以补码的形式参加运算的。,1.位运算(主要有:/*位段a,占2位*/unsigned:6;/*无名位段,占6位,但不能访问*/unsigned:0;/*无名位段,占0位,表下一位段从下一字边界开始*/unsignedb:10;/*位段b,占10位*/inti;/*成员i,从下一字边界开始*/data;,下一页,第10章共用体与枚举类型,上一页,(1)一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元空间不够,则剩余空间不用,从下一个单元起存放该位段。(2)可以通过定义长度为0的位段的方式使下一位段从下一存储单元开始。,下一页,第10章共用体与枚举类型,上一页,位段数据的引用,同结构体成员中的数据引用一样,但应注意位段的最大取值范围不要超出二进制位数定的范围,否则超出部分会丢弃。例如:data.a=2;但data.a=10;就超出范围(a占2位,最大3),关于位段数据,注意以下几点,(3)可以定义无名位段。(4)位段的长度不能大于存储单元的长度。(5)位段无地址,不能对位段进行取地址运算。(6)位段可以以%d,%o,%x格式输出。(7)位段若出现在表达式中,将被系统自动转换成整数。,下一页,第10章共用体与枚举类型,上一页,编程将一个16进制整数(占2字节)的各位循环左移4个二进制位,如2fe1循环左移4个二进制位后为fe12。,具体步骤为:(1)取出16进制整数x的最高4个二进制位至y:y=x(16-4)printf(“n请输入16进制整数:”);scanf(“%x”,请输入16进制整数:2fe1循环左移4个二进制位得:fe12,第10章共用体与枚举类型,(3)将先前取出的最高4个二进制位放入低4个二进制位:x=x|y。,运行结果,返回,10.5枚举类型,1.枚举类型的定义,枚举类型定义用关键字enum标识,形式为:enum标识符枚举数据表;标识符用来区分不同的枚举类型,定义的枚举类型用enum标识符”标识。枚举数据(枚举常量)是一些特定的标识符,标识符代表什么含义,完全由程序员决定。数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增。,下一页,第10章共用体与枚举类型,上一页,(1)定义枚举类型status,包含复制与删除两种状态:enumstatuscopy,delete;枚举类型status仅有两个数据,一个是copy,一个是delete,序号为0、1,代表复制与删除。,下一页,第10章共用体与枚举类型,上一页,例如,(2)定义枚举类型color,包含红、黄、蓝、白、黑五种颜色:enumcolorred,yellow,blue,white,black;枚举类型color有red、yellow、blue、white、black五个数据,序号为0、1、2、3、4,代表红、黄、蓝、白、黑五种颜色。,下一页,第10章共用体与枚举类型,上一页,(3)定义枚举类型weekday,包含一周的七天:enumweekdaysun,mon,tue,wed,thu,fri,sat;枚举类型weekday有sun、mon、tue、wed、thu、fri、sat七个数据,序号为0、1、2、3、4、5、6,代表一周中的星期天、星期一、星期二、星期三、星期四、星期五、星期六。在定义枚举类型时,程序员可在枚举数据时通过“=”号自己规定序号,并影响后面的枚举数据的序号,后继序号以此递增。例如:enumstatuscopy=6,delete;则copy的序号为6,delete的序号为7。,下一页,第10章共用体与枚举类型,上一页,2.枚举类型变量的定义,先定义枚举类型,再定义枚举类型变量:enum标识符枚举数据表;enum标识符变量表;(2)在定义枚举类型的同时定义枚举类型变量:enum标识符枚举数据表变量表;(3)直接定义枚举类型变量:enum枚举数据表变量表;,下一页,第10章共用体与枚举类型,上一页,例如,对枚举类型enumcolor,定义枚举变量c1、c2:enumcolorred,yellow,blue,white,black;enumcolorc1,c2;或enumcolorred,yellow,blue,white,blackc1,c2;或enumred,yellow,blue,white,blackc1,c2;,下一页,第10章共用体与枚举类型,上一页,枚举类型数据可以进行赋值运算。枚举类型是有序类型,枚举类型数据还可以进行关系运算。枚举类型数据的比较转化成对序号进行比较,只有同一种枚举类型的数据才能进行比较。,枚举类型数据不能直接输入输出。枚举类型数据输入时,先输入其序号,再进行强制类型转换完成。输出时,采用开关语句先进行判断,再转化成对应字符串输出。,下一页,第10章共用体与枚举类型,上一页,使用强制类型转换,可将整数值(枚举值序号)转换成对应枚举值。例如:c1=(enumcolor)2;/*c1得到枚举值blue*/,将枚举型数据按整型格式输出,可得到整数值(枚举变量值的序号)。,某口袋中有红、黄、蓝、白、黑五种颜色的球若干个,每次从口袋中取出三个球,问得到三种不同颜色的球有多少种取法,并输出每种组合结果。,不用枚举类型:,第10章共用体与枚举类型,例10.4,点击,请,采用枚举类型来描述数据。设用red表示红色球,yellow表示黄色球,blue表示蓝色球,white表示白色球,black表示黑色球。,点击,请,返回,10.6类型定义,在使用标准类型定义或说明变量时,可只写标准类型名指明变量数据类型。而用前面介绍的结构体、共用体、枚举等类型定义或说明变量时要冠以表明数据类型类别的关键字,如struct、union、enum等。C语言提供了用typedef定义类型,为类型命名的机制。用typedef定义新的类型名后,对于结构体、共用体或枚举类型,使用它们定义或说明变量时不必再冠以类型类别关键字。,下一页,第10章共用体与枚举类型,上一页,1.简单的名字替换,typedefintINTEGER;意思是将int型定义为INTEGER,这两者等价,在程序中就可以用INTEGER作为类型名来定义变量了。例如:INTEGERx,y;相当于intx,y;,下一页,第10章共用体与枚举类型,上一页,2定义一个类型名代表一个结构体类型,typedefstructlongnum;charname20;floatscore;STUDENT;将一个结构体类型struct定义为花括号后的名字STUDENT。可以用它来定义变量。STUDENTstudent1,student2,*p;,下一页,第10章共用体与枚举类型,上一页,例如,用typedef定义一个新类型名的方法如下:(1)先按定义变量的方法写出定义体(如chara20;)。(2)将变
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年社区医学社区卫生服务管理考试答案及解析
- 2025年皮肤科疑难疾病鉴别诊断试卷答案及解析
- 2025年妇科妊娠期高血压并发症处理方法判断题答案及解析
- 民族团结材料的课件模板
- 2025年眼科验光验配常见眼镜配制模拟考试卷答案及解析
- 2025年急重症抢救急救技术检测答案及解析
- 2025年康复治疗计划制定考核答案及解析
- 创新驱动:新质生产力的核心引擎
- 发展农业新质生产力的措施
- 2025年肿瘤学肿瘤生物学基础考核答案及解析
- 反三违培训课件
- 数据中心供配电设施建设工程施工方案与技术措施
- 宝安妇幼保健医院医用气体监理工作细则
- 严重创伤急救护理
- 校园设备投放管理制度
- 2026届新高考语文热点复习小说阅读
- 2024年中国大唐集团有限公司招聘考试真题
- JG/T 433-2014建筑幕墙用平推窗滑撑
- 机房日常巡检管理制度
- 家庭养老床位管理制度
- 2025-2030年中国水利工程行业市场发展分析及前景趋势与投融资研究报告
评论
0/150
提交评论