第6章结构体与枚举.ppt
第6章 结构体与枚举,61 结构体类型变量的定义、初始化方法及引用62 结构体数组 63 枚举类型 64 typedef,教学目标:1 掌握结构体及其变量的定义、初始化方法及引用;2 掌握枚举类型变量的定义及引用;3了解 typedef 的作用。教学重点:(1)结构体的基本概念、结构类型及变量的定义、结构数组;(2)枚举类型的基本概念、typedef 的基本概念.教学难点:枚举类型的使用,第6章 结构体与枚举,61 结构体类型变量的定义、初始化方法及引用,6.1.1 结构体类型变量的定义6.1.2 结构体类型变量的初始化6.1.3 结构体类型变量的引用,6.1.1 结构体变量的定义,一、结构体定义的一般形式:struct 结构体名 成员表列;成员表列的写法:类型标识符 成员名1.这只是定义一种类型的方法,尚未定义变量。2.struct 关键词(保留字),表示定义一种结构体类型。,二、结构变量的定义有三种方法可用来定义结构体变量:例:struct student int num;char name20;char sex;int age;float score;char addr30;struct student x1,x2;类型标识符,6.1.1 结构体变量的定义,2.在定义结构体类型的同时定义变量:定义形式 struct 结构体名 成员表列 变量名表列;例:struct student int num;char name20;char sex;int age;char addr30;x1,x2;,6.1.1 结构体变量的定义,3.直接定义结构类型变量定义形式 struct 成员表列 变量名表列;不出现结构体类型名如:struct int numchar name20;char sex;int age;char addr30;x1,x2;,6.1.1 结构体变量的定义,6.1.2 结构体变量的初始化,struct student x1=8906,Li Ming,M,85.5;,一、先定义结构,在定义结构变量时对每个成员赋初值,如:struct student,unsigned No;,char name20;,char sex;,float score;,;,若 x1 的起始地址为2000,则 x1 在内存中占有的存储单元为:,共用29个字节的连续单元,6.1.2 结构体变量的初始化,二、结构定义与变量定义及初始化合二为一:,struct exp,int a;,float b;,char yn8;,x=1234,56.7,test;,但不能这样写:,struct exp,int a=1234;,float b=56.7;,char yn8=test;,x;,6.1.2 结构体变量的初始化,6.1.3 结构体变量的引用,如:x1为struct student型变量,则 x1.No:表示x1的学号 x1.name:表示x1的名字,访问结构变量实质上是引用其成员,一、圆点运算符,有两种运算符可访问结构成员,1.只能用变量的成员,不可用结构变量名直接运算。,2.每一个成员的作用与其同类型的简单变量的引用相同。,6.1.3 结构体变量的引用,二、箭头运算符:,例:struct student,char name 10;,char sex;,int age;,float score;,char addr20;,x1;,struct student p;,6.1.3 结构体变量的引用,则p为结构指针变量,它可用来存放student型变量的地址,令 p=,则 p为x1的首地址.,访问结构成员:,pname 表示x1的姓名;,page 表示x1的年龄;,pname 等价于(*p).name,page 等价于(*p).age,6.1.3 结构体变量的引用,(2)用指针变量(p).成员名(p).num,(3)用指向运算符成员名 p num,(1)结构体变量名.成员名 x1.num,注意:指针变量p必须是结构指针型,,且有p=,引用结构变量中的成员有三种方法:,6.1.3 结构体变量的引用,6.2 结构体数组,例 struct int num;char name20;char sex;int age;stu=,;,结构体数组引用,引用方式:结构体数组名下标.成员名,6.3枚举类型,1.枚举类型的定义:“枚举”是指将变量所有可能的取值一一列举出来,变量的取值只限于列举出来的常量。枚举类型的声明的一般形式如下:枚举类型名以及枚举常量为标识符,遵循标识符的取名规则。在定义一个枚举类型时,定义了多个常量,供枚举类型变量取值,称此常量为枚举常量。当没给各枚举常量指定值时,其值依次默认为0、1、2、;在定义枚举类型时,也可使用赋值号另行指定枚举常量的值。,enum 枚举类型名 枚举常量1,枚举常量2,枚举常量n;,枚举!,6.3 枚举类型,枚举类型的定义:例1:enum weekday SUN,MON,TUE,WED,THU,FRI,SAT;定义了7个枚举常量以及枚举类型weekday。枚举常量具有默认的整数与之对应:SUN的值为0、MON的值为1、TUE为2、SAT为6。例2:enum city Beijing,Shanghai,Tianjin=5,Chongqing;枚举常量Beijing的值为0,Shanghai的值为1,Tianjin的值指定为5。对于指定值后面的没有指定值的枚举常量,编译器会将前一个常量值加1(下一个整数)赋给它,所以Chongqing的值为6。,6.3 枚举类型,枚举类型的定义说明:枚举类型定义了以后就可以使用枚举常量、使用用枚举类型来定义变量,定义枚举变量的方法与定义其它变量的方法一样。例如:enum city city1,city2;city city1,city2;用两种方法定义了city1、city2两个枚举类型的变量名。枚举类型变量也可以在定义枚举类型的同时定义 例 enum city Beijing,Shanghai,Tianjin=5,Chongqing city1,city2;在定义枚举类型的同时定义枚举类型变量可以省略枚举类型名.例如:enum Beijing,Shanghai,Tianjin=5,Chongqing city1,city2;,6.3 枚举类型,枚举类型的使用:用枚举类型建立枚举变量后就可以对枚举变量实施赋值以及进行其它运算了,对枚举变量进行赋值,其值要求为同一枚举类型。否则,在编译时出错。例如:weekday d1,d2,d3,d4;d1=SUN;d2=6;/错误 d3=Shanghai;/错误 其中对d2所赋之值是整数6,不是枚举常量;可以采用将一个整型值强制转换成同类型的枚举常量赋给枚举变量:枚举常量、枚举类型的变量可进行算术运算、关系运算。对枚举类型实施算术、关系运算时,枚举值转换成整型值参加运算,结果为整型值。所以,如果要将结果赋给枚举变量,还要将结果转换成枚举值。例如:d1=d1+2;/是错误的,因为结果为int型。需要将它强制转换成枚举型:d1=(weekday)(d1+2);,6.3 枚举类型,枚举类型的使用:枚举常量、枚举类型的变量可直接进行各种形式的关系运算。例如:if(city1=3);if(city2=Beijing);if(Shanghai=1);if(city1SUN);枚举类型变量不能直接进行输入 例如:cind1;/错误,注意:枚举常量是常量,不是变量,所以不能对枚举常量进行赋值。例如:在上例中不能进行赋值 Shanghai=Beijing;枚举常量的值不是列举的字符串,其值为整数。编译器对赋给枚举变量的对象(数)进行类型检查,如类型不相符则发出警告。当类型相 同,而值超出此类枚举类型枚举常量范围时,也是正常的。,【例7.1】输入城市代号,输出城市名称。,6.3 枚举类型,运行结果:Input a city number(-1 to exit):1Shanghai8Invalid city number!-1,6.3 枚举类型,6.4 typedef语句,为一个已有的数据类型另外命名语法形式typedef 已有类型名 新类型名表;例如typedef double area,volume;typedef int natural;natural i1,i2;area a;volume v;,小结:通过这界节课的学习,掌握结构体及其变量的定义、初始化方法及引用;掌握枚举类型变量的定义及引用.思考题:1、在下面的枚举类型中,blue的值是多少?Enum colorwhite,back=100,red,blue,green=300;作业题:1、编写程序,输入某学生的英语、语文、数学和物理4门课成绩,计算学生的总成绩和平均成绩并输出。,