C语言从入门到精通 .ppt

上传人:wuy****n92 文档编号:79019230 上传时间:2023-03-19 格式:PPT 页数:33 大小:314.50KB
返回 下载 相关 举报
C语言从入门到精通 .ppt_第1页
第1页 / 共33页
C语言从入门到精通 .ppt_第2页
第2页 / 共33页
点击查看更多>>
资源描述

《C语言从入门到精通 .ppt》由会员分享,可在线阅读,更多相关《C语言从入门到精通 .ppt(33页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第 10 10 章章 共用体与枚举类型共用体与枚举类型10.1 10.1 共用体类型与共用体变量共用体类型与共用体变量返回C语言程序设计教程10.2 10.2 共用体变量的引用共用体变量的引用10.3 10.3 共用体变量的应用共用体变量的应用10.4 10.4 位运算与位段结构位运算与位段结构10.5 10.5 枚举类型枚举类型10.6 10.6 类型定义类型定义10.1 10.1 共用体类型与共用体类型与 共用体变量共用体变量 共用体是共用体是C的由用户定义的数据类型。共用体把的由用户定义的数据类型。共用体把不同类型的数据项组成一个整体,这些不同类型的数不同类型的数据项组成一个整体,这些

2、不同类型的数据项在内存中所占用的起始单元是相同的。据项在内存中所占用的起始单元是相同的。1.共用体类型的定义共用体类型的定义共用体类型定义用关键字共用体类型定义用关键字union标识,标识,形式为:形式为:下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页union 标识符标识符 成员说明列表成员说明列表;标识符给出共用体名,标识符给出共用体名,是共用体类型名的主体,是共用体类型名的主体,定义的共用体类型由定义的共用体类型由“union 标识符标识符”标识。标识。例如,定义一个共用体类型,例如,定义一个共用体类型,要求包含一个整型要求包含一个整型成员,一个字符型成员和一个单精度

3、型成员:成员,一个字符型成员和一个单精度型成员:union icfint i;char c;float f;下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页2 共用体变量的定义共用体变量的定义(1)先定义共用体类型,先定义共用体类型,再定义共用体变量:再定义共用体变量:union 共用体名共用体名 成员表成员表;union 共用体名共用体名 变量表;变量表;例如:例如:union data int i;char ch;float f;union data a,b,c;下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页(2)定义共用体类型的同时定义共用体变量定义

4、共用体类型的同时定义共用体变量例如:例如:union data int i;char ch;float f;a,b,c;下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页union 共用体名共用体名 成员表成员表 变量表;变量表;(3)定义共用体类型时,省略共用体类型名,同时定义共用体类型时,省略共用体类型名,同时定义共用体类型变量定义共用体类型变量union 成员表成员表 变量表;变量表;第 10章 共 用 体 与 枚 举 类 型例如:例如:union int i;char ch;float f;a,b,c;返回10.2 10.2 共用体变量的引用共用体变量的引用 共共用用体

5、体变变量量不不能能直直接接使使用用,只只能能使使用用里里面面的的某某个成员,其成员同样通过点运算描述。形式为:个成员,其成员同样通过点运算描述。形式为:共用体变量名共用体变量名.成员名成员名 例例如如,定定义义上上面面共共用用体体类类型型变变量量a,a占占有有4个个字字节节的的空空间间,a.i 表表示示其其整整型型成成员员,a.ch表表示示其其字字符符型成员,型成员,a.f表示其单精度型成员。表示其单精度型成员。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页(1)共共用用体体变变量量中中,可可以以包包含含若若干干个个成成员员及及若若干干种种类类型型,但但共共用用体体成成员员

6、不不能能同同时时使使用用。在在每每一一时时刻刻,只只有有一一个个成成员员及一种类型起作用,不能同时引用多个成员及多种类型。及一种类型起作用,不能同时引用多个成员及多种类型。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页说明(2)共用体变量中起作用的成员值是最后一次存放的成共用体变量中起作用的成员值是最后一次存放的成员值,即共用体变量所有成员共用同一段内存单元,后员值,即共用体变量所有成员共用同一段内存单元,后来存放的值将原先存放的值覆盖,故只能使用最后一次来存放的值将原先存放的值覆盖,故只能使用最后一次给定的成员值。如:给定的成员值。如:a.i=278,a.ch=D,a.f

7、=5.78;不能企图通过下面的不能企图通过下面的printf函数得到函数得到a.i和和a.ch的值:的值:printf(“%d,%c,%f”,a.i,a.ch,a.f);但能得到但能得到a.f的值。的值。(3)共用体变量的地址和它的各个成员的地址相同。共用体变量的地址和它的各个成员的地址相同。(4)不不能能企企图图引引用用共共用用体体变变量量名名来来得得到到某某成成员员的的值值。(5)共共用用体体变变量量不不能能作作函函数数参参数数,函函数数的的返返回回值值也也不不能是共用体类型。能是共用体类型。(6)共共用用体体类类型型和和结结构构体体类类型型可可以以相相互互嵌嵌套套,共共用用体体中成员可以

8、为数组,甚至还可以定义共用体数组。中成员可以为数组,甚至还可以定义共用体数组。下一页下一页第 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返回设有若干教师的数据,包含有教师编号、姓设有若干教师的数据,包含有教师编号、姓名、职

9、称,若职称为讲师,则描述他们的所讲课程,名、职称,若职称为讲师,则描述他们的所讲课程,若职称为教授,则描述他们所写论文数目。若职称为教授,则描述他们所写论文数目。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页10.3 10.3 共用体变量的应用共用体变量的应用例例10.2点击点击查看程序请查看程序请10.4 10.4 位运算与位段结构位运算与位段结构位是指二进制数的一位,其值为位是指二进制数的一位,其值为0或或1。位位段段以以位位为为单单位位定定义义结结构构体体(或或共共用用体体)中成员所占存储空间的长度。中成员所占存储空间的长度。含有位段的结构体类型称为位段结构含有位段的

10、结构体类型称为位段结构。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页10.4.1 10.4.1 位运算位运算 在用位运算符进行数的运算时,数是以补码在用位运算符进行数的运算时,数是以补码的形式参加运算的。的形式参加运算的。1.1.位运算位运算(主要有:主要有:&、|、)(1)&(按位(按位“与与”)运算规则为:运算规则为:0&0=0,0&1=0,1&0=0,1&1=1例例如如,-5&3的的值值为为3。其其中中-5的的补补码码(为为简简便便起起见见,用用8位位二二进进制制表表示示)为为1111 1011,3的的补补码码为为0000 0011,按位与的结果为,按位与的结果为0

11、000 0011,即值为十进制数,即值为十进制数3。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页(2 2)|(按位(按位“或或”)运算规则为:运算规则为:0|0=0,0|1=1,1|0=1,1|1=1例如例如,-5|3的值为的值为-5。-5与与3相位或后得相位或后得11111011,其真值为其真值为-0000101,即,即-5。(3 3)(按位(按位“异或异或”)运算规则为:运算规则为:00=0,01=1,10=1,11=0例如,例如,-53的值为的值为-8。(4 4)(按位(按位“取反取反”)运算规则为:运算规则为:0=1,1=0例如,例如,7的值为的值为-8。(5 5

12、)(“左移左移”)例例如如,3(“右移右移”)移移动动对对象象为为正正数数时时,高高位位补补0。为为负负数数时时,逻逻辑辑右右移移,高高位位补补0;算算术术右右移移,高高位位补补1。Turbo C采采用用的是算术右移,有的的是算术右移,有的C语言版本则采用逻辑右移。语言版本则采用逻辑右移。例例如如,-32,将将3右右移移2位位,左左边边(最最高高位位)补补1,结果为结果为-1。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页10.4.2 10.4.2 位段结构位段结构 位段结构也是一种结构体类型,只不过其中含有位段结构也是一种结构体类型,只不过其中含有以位为单位定义存储长度的

13、整数类型位段成员。采用以位为单位定义存储长度的整数类型位段成员。采用位段结构既节省存储空间,又可方便操作。位段结构既节省存储空间,又可方便操作。位段结构中位段的定义格式为:位段结构中位段的定义格式为:unsigned unsigned:例如:例如:struct bytedataunsigned a:2;/*位段位段a,占,占2位位*/unsigned:6;/*无名位段,占无名位段,占6位,但不能访问位,但不能访问*/unsigned:0;/*无无名名位位段段,占占0位位,表表下下一一位位段段从从下下一一字边界开始字边界开始*/unsigned b:10;/*位段位段b,占,占10位位*/int

14、 i;/*成员成员i,从下一字边界开始,从下一字边界开始*/data;下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页(1)一一个个位位段段必必须须存存储储在在同同一一存存储储单单元元(即即字字)之之中中,不不能能跨跨两两个个单单元元。如如果果其其单单元元空空间间不不够够,则则剩剩余空间不用,从下一个单元起存放该位段。余空间不用,从下一个单元起存放该位段。(2)可可以以通通过过定定义义长长度度为为0的的位位段段的的方方式式使使下下一一位位段从下一存储单元开始。段从下一存储单元开始。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页位段数据的引用,同结构体成员中

15、的数据引用一样,位段数据的引用,同结构体成员中的数据引用一样,但应注意位段的最大取值范围不要超出二进制位数定但应注意位段的最大取值范围不要超出二进制位数定的范围,否则超出部分会丢弃。的范围,否则超出部分会丢弃。例例如如:data.a=2;但但 data.a=10;就就超超出出范范围围(a占占2位位,最大最大3)关于位段数据,注意以下几点关于位段数据,注意以下几点(3)可以定义无名位段。)可以定义无名位段。(4)位段的长度不能大于存储单元的长度。)位段的长度不能大于存储单元的长度。(5)位段无地址,不能对位段进行取地址运算。)位段无地址,不能对位段进行取地址运算。(6)位段可以以)位段可以以%d

16、,%o,%x格式输出。格式输出。(7)位段若出现在表达式中,将被系统自动转换成)位段若出现在表达式中,将被系统自动转换成整数。整数。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页 编程将一个编程将一个1616进制整数(占进制整数(占2 2字节)的各位字节)的各位循环左移循环左移4 4个二进制位,如个二进制位,如2fe12fe1循环左移循环左移4 4个二进制位个二进制位后为后为fe12fe12。具体步骤为具体步骤为:(1)取出)取出16进制整数进制整数x的最高的最高4个二进制位至个二进制位至y:y=x(16-4)&0 xf。(2)将该整数)将该整数x(占(占2字节)左移字节)

17、左移4个二进制位:个二进制位:x=(x(16-4)&0 xf;x=(x4)&0 xffff;/*16位位的的C语语言言程程序序不不需需要要“按按位位与与”0 xffff*/x=x|y;printf(“循环左移循环左移4个二进制位得:个二进制位得:%x”,x);请输入请输入16进制整数:进制整数:2fe1循环左移循环左移4个二进制位得:个二进制位得:fe12第 10章 共 用 体 与 枚 举 类 型(3)将先前取出的最高将先前取出的最高4个二进制位放入低个二进制位放入低4个二进个二进 制制位:位:x=x|y。运行结果运行结果返回10.5 10.5 枚举类型枚举类型 1.枚举类型的定义枚举类型的定

18、义 v枚举类型定义用关键字枚举类型定义用关键字enum标识,形式为:标识,形式为:enum 标识符标识符 枚举数据表枚举数据表;标识符用来区分不同的枚举类型,定义的枚举类标识符用来区分不同的枚举类型,定义的枚举类型用型用enum标识符标识符”标识。标识。v枚举数据(枚举常量)是一些特定的标识符,枚举数据(枚举常量)是一些特定的标识符,标识标识符代表什么含义,完全由程序员决定。数据枚举的顺符代表什么含义,完全由程序员决定。数据枚举的顺序规定了枚举数据的序号,从序规定了枚举数据的序号,从0开始,依次递增。开始,依次递增。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页(1)定义枚

19、举类型定义枚举类型status,包含复制与删除两种状态:包含复制与删除两种状态:enum statuscopy,delete;枚枚举举类类型型status仅仅有有两两个个数数据据,一一个个是是copy,一一个个是是delete,序号为序号为0、1,代表复制与删除。代表复制与删除。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页例如例如(2)定定义义枚枚举举类类型型color,包包含含红红、黄黄、蓝蓝、白白、黑黑五种颜色:五种颜色:enum color red,yellow,blue,white,black;枚枚举举类类型型color有有red、yellow、blue、whit

20、e、black五五个个数数据据,序序号号为为0、1、2、3、4,代代表表红红、黄、黄、蓝、蓝、白、白、黑五种颜色。黑五种颜色。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页 (3)定定义义枚枚举举类类型型weekday,包包含含一一周周的的七七天天:enum weekday sun,mon,tue,wed,thu,fri,sat;枚枚举举类类型型weekday有有sun、mon、tue、wed、thu、fri、sat七七个个数数据据,序序号号为为0、1、2、3、4、5、6,代代表表一一周周中中的的星星期期天天、星星期期一一、星星期期二二、星星期期三三、星星期期四四、星星期期

21、五五、星星期六。期六。在在定定义义枚枚举举类类型型时时,程程序序员员可可在在枚枚举举数数据据时时通通过过“=”号号自自己己规规定定序序号号,并并影影响响后后面面的的枚枚举举数数据据的的序序号号,后后继继序序号号以以此此递增。例如:递增。例如:enum status copy=6,delete;则则copy的序号为的序号为6,delete的序号为的序号为7。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页2.枚举类型变量的定义枚举类型变量的定义(1)先定义枚举类型,先定义枚举类型,再定义枚举类型变量:再定义枚举类型变量:enum 标识符标识符 枚举数据表枚举数据表;enum 标

22、识符标识符 变量表;变量表;(2)在在定定义义枚枚举举类类型型的的同同时时定定义义枚枚举举类类型型变变量量:enum 标识符标识符 枚举数据表枚举数据表 变量表;变量表;(3)直接定义枚举类型变量:直接定义枚举类型变量:enum 枚举数据表枚举数据表 变量表;变量表;下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页例如,例如,对枚举类型对枚举类型enum color,定义枚举变量定义枚举变量c1、c2:enum color red,yellow,blue,white,black;enum color c1,c2;或或enum color red,yellow,blue,whi

23、te,black c1,c2;或或enum red,yellow,blue,white,black c1,c2;下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页枚举类型数据可以进行赋值运算。枚举类型是有序枚举类型数据可以进行赋值运算。枚举类型是有序类型,类型,枚举类型数据还可以进行关系运算。枚举类型枚举类型数据还可以进行关系运算。枚举类型数据的比较转化成对序号进行比较,数据的比较转化成对序号进行比较,只有同一种枚举只有同一种枚举类型的数据才能进行比较。类型的数据才能进行比较。枚枚举举类类型型数数据据不不能能直直接接输输入入输输出出。枚枚举举类类型型数数据据输输入入时时,先先输

24、输入入其其序序号号,再再进进行行强强制制类类型型转转换换完完成成。输输出出时时,采采用用开开关关语语句句先先进进行行判判断断,再再转转化化成成对对应应字字符符串输出。串输出。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页使用强制类型转换,可将整数值(枚举值序号)使用强制类型转换,可将整数值(枚举值序号)转换成对应枚举值。转换成对应枚举值。例如:例如:c1=(enum color)2;/*c1得到枚举值得到枚举值blue*/将枚举型数据按整型格式输出,可得到整数值(枚将枚举型数据按整型格式输出,可得到整数值(枚 举变量值的序号)。举变量值的序号)。某某口口袋袋中中有有红红、黄

25、黄、蓝蓝、白白、黑黑五五种种颜颜色色的的球球若若干干个个,每每次次从从口口袋袋中中取取出出三三个个球球,问问得得到到三三种种不不同颜色的球有多少种取法,并输出每种组合结果。同颜色的球有多少种取法,并输出每种组合结果。不用枚举类型:不用枚举类型:第 10章 共 用 体 与 枚 举 类 型例例10.4点击点击请请采采用用枚枚举举类类型型来来描描述述数数据据。设设用用red表表示示红红色色球球,yellow表表示示黄黄色色球球,blue表表示示蓝蓝色色球球,white 表表示示白白色球,色球,black表示黑色球。表示黑色球。点击点击请请返回10.6 10.6 类型定义类型定义v在在使使用用标标准准

26、类类型型定定义义或或说说明明变变量量时时,可可只只写写标标准准类类型型名名指指明明变变量量数数据据类类型型。而而用用前前面面介介绍绍的的结结构构体体、共共用用体体、枚枚举举等等类类型型定定义义或或说说明明变变量量时时要要冠冠以以表表明明数数据据类型类别的关键字,如类型类别的关键字,如struct、union、enum等。等。v C语语言言提提供供了了用用typedef定定义义类类型型,为为类类型型命命名名的的机机制。制。v 用用typedef定定义义新新的的类类型型名名后后,对对于于结结构构体体、共共用用体体或或枚枚举举类类型型,使使用用它它们们定定义义或或说说明明变变量量时时不不必必再再冠冠

27、以类型类别关键字。以类型类别关键字。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页1.1.简单的名字替换简单的名字替换typedef int INTEGER;意意思思是是将将int型型定定义义为为INTEGER,这这两两者者等等价价,在在程程序序中中就就可可以以用用INTEGER作作为为类类型型名名来来定定义义变变量量了了。例如:例如:INTEGER x,y;相当于相当于int x,y;下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页2 2定义一个类型名代表一个结构体类型定义一个类型名代表一个结构体类型typedef struct long num;cha

28、r name20;float score;STUDENT;将一个结构体类型将一个结构体类型struct定定义义为为花花括括号号后后的的名名字字STUDENT。可可以以用用它它来来定定义变量。义变量。STUDENT student1,student2,*p;下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页例如例如v用用typedef定义一个新类型名的方法如下:定义一个新类型名的方法如下:(1)先按定义变量的方法写出定义体)先按定义变量的方法写出定义体 (如(如char a20;)。)。(2)将变量名换成新类型名)将变量名换成新类型名 (如(如char NAME20;)。)。(3

29、)在最前面加上)在最前面加上typedef (如如typedef char NAME20;)。(4)然后可以用新类型名去定义变量)然后可以用新类型名去定义变量 (如(如NAME c,d;)。)。下一页下一页第 10章 共 用 体 与 枚 举 类 型上一页上一页 用用typedef定义类型,只是为类型命令,或为已有定义类型,只是为类型命令,或为已有类型命名别名。作为类型定义,它只定义数据结构,类型命名别名。作为类型定义,它只定义数据结构,并不要求分配存储单元。并不要求分配存储单元。用用typedef定义的类型来定义变量与直接写出变量定义的类型来定义变量与直接写出变量的类型定义变量具有完全相同的效果。的类型定义变量具有完全相同的效果。例例10.4第 10章 共 用 体 与 枚 举 类 型返回

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com