《C程序设计》课教学方案教师:序号:16授课时间授课班级上课地点学习内容第8章善于利用指针课时2教学目标专业能力了解如何定义和使用结构体变量掌握如何用结构体数组和结构体指针了解什么是枚举类型和共用体类型方法能力学会有效的处理数据,使程序清晰明了社会能力提高逻辑思维能力目标群体普专教学环境多媒体教室教学方法理论教学与上机训练相结合,即学即练时间安排教学过程设计第一节9.6使用枚举类型如果一个变量只有几种可能的值,则可以定义为枚举类型所谓“枚举”就是指把可能的值一一列举出来,变量的值只限于列举出来的值的范围内声明枚举类型用enum开头。例如:enumWeekday{sun,mon,tue,wed,thu,fri,sat};声明了一个枚举类型enumWeekday然后可以用此类型来定义变量enumWeekdayworkday,weekend;workday=mon;正确weekend=sun;正确weekday=monday;不正确说明:(1)C编译对枚举类型的枚举元素按常量处理,故称枚举常量。不要因为它们是标识符(有名字)而把它们看作变量,不能对它们赋值。例如:sun=0;mon=1;错误(2)每一个枚举元素都代表一个整数,C语言编译按定义时的顺序默认它们的值为0,1,2,3,4,5…在上面定义中,sun的值为0,mon的值为1,…sat的值为6如果有赋值语句:workday=mon;相当于workday=1;也可以人为地指定枚举元素的数值,例如:enumWeekday{sun=7,mon=1,tue,wed,thu,fri,sat}workday,week_end;指定枚举常量sun的值为7,mon为1,以后顺序加1,sat为6。(3)枚举元素可以用来作判断比较。例如:if(workday==mon)…if(workdaysun)…枚举元素的比较规则是按其在初始化时指定的整数来进行比较的。如果定义时未人为指定,则按上面的默认规则处理,即第一个枚举元素的值为0,故monsun,satfri例9.12口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况。#includestdio.hintmain(){enumColor{red,yellow,blue,white,black};enumColori,j,k,pri;intn,loop;n=0;for(i=red;i=black;i++)for(j=red;j=black;j++)if(i!=j){for(k=red;k=black;k++)if((k!=i)&&(k!=j)){n=n+1;printf(“%-4d”,n);for(loop=1;loop=3;loop++){switch(loop){case1:pri=i;break;case2:pri=j;break;case3:pri=k;break;default:break;}switch(pri){casered:printf(“%-10s”,“red”);break;caseyellow:printf(%-10s,yellow);break;caseblue:printf(“%-10s”,“blue”);break;casewhite:printf(“%-10s”,“white”);break;caseblack:printf(%-10s,black);break;}}printf(\n);}}printf(\ntotal:%5d\n,n);return0;}第二节9.7用typedef声明新类型名1.简单地用一个新的类型名代替原有的类型名typedefintInteger;typedeffloatReal;inti,j;floata,b;与Integeri,j;Reala,b;等价2.命名一个简单的类型名代替复杂的类型表示方法(1)命名一个新的类型名代表结构体类型:typedefstruct{intmonth;intday;intyear;}Date;Datebirthday;Date*p;(2)命名一个新的类型名代表数组类型typedefintNum[100];Numa;(3)命名一个新的类型名代表一个指针类型typedefchar*String;Stringp,s[10];(4)命名一个新的类型名代表指向函数的指针类型typedefint(*Pointer)();Pointerp1,p2;归纳起来,声明一个新的类型名的方法是①先按定义变量的方法写出定义体(inti;)②将变量名换成新类型名(将i换成Count)③在最前面加typedef(typedefintCount)④用新类型名去定义变量说明:(1)以上的方法实际上是为特定的类型指定了一个同义字(synonyms)。例如①typedefintNum[100];Numa;Num是int[100]的同义词②typedefint(*Pointer)();Pointerp1;Pointer是int(*)()的同义词(2)用typedef只是对已经存在的类型指定一个新的类型名,而没有创造新的类型。(3)用tyoedef声明数组类型、指针类型,结构体类型、共用体类型、枚举类型等,使得编程更加方便。(4)typedef与#define表面上有相似之处(5)当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型。可以把所有的typedef名称声明单独放在一个头文件中,然后在需要用到它们的文件中用#include指令把它们包含到文件中。这样编程者就不需要在各文件中自己定义typefef名称了。(6)使用typedef名称有利于程序的通用与移植。有时程序会依赖于硬件特性,用typedef类型就便于移植。作业课后题第4题教学反馈(注:单元格可合并、拆分)