《C程序设计教案392课时——共用体和枚举类型.docx》由会员分享,可在线阅读,更多相关《C程序设计教案392课时——共用体和枚举类型.docx(7页珍藏版)》请在第一文库网上搜索。
1、教案序号039周次授课形式新授授课章节名称共用体和枚举类型教学目的理解和使用共用体和枚举类型教学重点理解和使用共用体和枚举类型教学难点理解和使用共用体和枚举类型使用教具机房课外作业课后体会授课主要内容9.5.1什么是共用体类型有时想用同一段内存单元存放不同类型的变量。使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构。定义共用体类型变量的一般形式为:union共用体名成员表列变量表列;例如:unionData(iti;charch;f1oatf;a,b,c;“共用体”与“结构体”的定义形式相似,但它们的含义是不同的。结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其
2、自己的内存单元。而共用体变量所占的内存长度等于最长的成员的长度。 9.5.2引用共用体变量的方式 只有先定义了共用体变量才能引用它,但应注意,不能引用共用体变量,而只能引用共用体变量中的成员。例如,前面定义了a,b,c为共用体变量,下面的引用方式是正确的:a.ia.cha.f 9.5.3共用体类型数据的特点 在使用共用体类型数据时要注意以下一些特点:(1)同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一个成员,而不是同时存放几个。 9.5.3共用体类型数据的特点 在使用共用体类型数据时要注意以下一些特点:(2)可以对共用体变量初始化,但初始化表中只能有一个常量。 9.5.
3、3共用体类型数据的特点 在使用共用体类型数据时要注意以下一些特点:(3)共用体变量中起作用的成员是最后一次被赋值的成员,在对共用体变量中的一个成员赋值后,原有变量存储单元中的值就取代。 9.5.3共用体类型数据的特点 在使用共用体类型数据时要注意以下一些特点:(4)共用体变量的地址和它的各成员的地址都是同一地址。(5)不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。 9.5.3共用体类型数据的特点 在使用共用体类型数据时要注意以下一些特点:(6)以前的C规定不能把共用体变量作为函数参数,但可以使用指向共用体变量的指针作函数参数。C99允许用共用体变量作为函数参数。 9.5.3共用体类
4、型数据的特点 在使用共用体类型数据时要注意以下一些特点:(7)共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型定义中,数组也可以作为共用体的成员。 9.5.3共用体类型数据的特点例9.11有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理。 解题思路:学生和教师的数据项目多数是相同的,但有一项不同。现要求把它们放在同一表格中解题思路:如果job项为s,贝IJ第5项为C1aSs。即1i是501班的。如果job项是3则第5项为POSition。Wan
5、g是PrOf(教授)。解题思路:对第5项可以用共用体来处理(将CIaSS和PoSitiOn放在同一段存储单元中)#inc1udestruct(intnum;charname10;charsex;charjob;unionintc1as;charposition10;(category;person2;#inc1udeunionCategintc1as;charposition10;1;struct(intnum;charname10;charsex;charjob;unionCategcategoryperson2;intmain()inti;for(i=0;i2;i+)scanff,%d%s
6、%c%c4t,(fepersoni.num,fcpersoni.name,&personi.sex,(fepersoni.job);if(personi.job=,s,)scanf(,%d4i,(fepersoni.category.c1as);e1seifpersoni.job=,tt)scanf(*%s,personi.category.position);e1sePrintf(Inputerror!,);)printf(n);for(i=0;i说明:(2)每一个枚举元素都代表一个整数,C语言编译按定义时的顺序默认它们的值为0,1,2,3,4,5也可以人为地指定枚举元素的数值,例如:enu
7、mWeekday(sun=7,mon=1,tue,wed,thu,fri,satworkday,week_end;指定枚举常量sun的值为7,mon为1,以后顺序加1,Sat为6。说明:(3)枚举元素可以用来作判断比较。例如:ifworkday=mon).ifworkdaysun).枚举元素的比较规则是按其在初始化时指定的整数来进行比较的。如果定义时未人为指定,则按上面的默认规则处理,即第一个枚举元素的值为0,故monsun,satfri例9.12口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况。A解题思路:A解题思
8、路:#inc1udeintmain()enumCo1orred,ye11ow,b1ue,white,b1ack;enumCo1orij,k,pri;intn,1oop;n=0;for(i=red;i=b1ack;i+)for(j=red;j=b1ack;j+)if(i!=j)for(k=red;k=b1ack;k+)if(k!=i)&(k!=j)n=n+1;Primfd%4,n);for(Ioop=I;1oop=3;1oop+)switch(1oop)case1:pri=i;break;case 2: Pri寸break;case 3: pri=k;break;defau1t:break;)switch(pri)casered:Primfr%-10s”,“red”);break;caseye1iow:printf(%-10s,ye11ow);break;caseb1ue:PrintR-10s”,“b1ue”);break;casewhite:Primf(-IOs,white);break;caseb1ack:printf(%-10s,b1ack);break;printf(,n);printf(ntotak%5dn,n);return0;