C语言第十一章课件.ppt

上传人:本田雅阁 文档编号:2143244 上传时间:2019-02-21 格式:PPT 页数:24 大小:152.51KB
返回 下载 相关 举报
C语言第十一章课件.ppt_第1页
第1页 / 共24页
C语言第十一章课件.ppt_第2页
第2页 / 共24页
C语言第十一章课件.ppt_第3页
第3页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C语言第十一章课件.ppt》由会员分享,可在线阅读,更多相关《C语言第十一章课件.ppt(24页珍藏版)》请在三一文库上搜索。

1、第十一章 结构体与共同体,本章要点:,1. 掌握结构和联合类型数据的定义方法和引用方法; 2. 了解枚举类型数据的定义方法和引用方法。,11.1 概述,有时,需将不同类型的数据组合成一个有机的整体,以便于引用。这些数据是相互联系的。如一个学生的有关信息:,可采用结构体数据结构描述上述信息。,例如:,struct student int num; char name20; char sex; int age; char addr30; ;,定义一个结构体类型的一般形式为:,struct 结构体名 成员表列;,对各成员都要进行类型说明; 成员名定名规则与变量名同。,是类型,不是变量名,11.2 定

2、义结构体类型变量的方法,方法一:先定义结构体类型再定义变量名 struct student int num; char name20; char sex; int age; char addr30; ; struct student student1, student2;,定义studet1和 sudent2为 struct student 类型变量,不能只指定一个变 量为“struct型”而不 指定结构体名,有时,可用符号常量代表一个结构体类型,如:,#define STUDENT struct student STUDENT int num; char name20; char sex;

3、int age; char addr30; ;,这样,可直接用STUDENT 定义变量,如: STUDENT student1, student2; 此时,不必再写关键字struct,方法二:在定义类型的同时定义变量,如:,struct student int num; char name20; char sex; int age; char addr30; student1, student2;,一般形式是: struct 结构体名 成员表列 变量名表列;,方法三:直接定义结构类型变量。,其一般形式是: struct 成员表列 变量名表列;,此时,不出现结构体名,几点说明:,1. 类型与变量

4、是不同概念,不要混淆; 2. 结构体中的成员,可以单独使用,其作 用与地位相当于普通变量; 3. 成员也可以是一个结构体变量;例如:,struct date int month; int day; int year; ;,Struct student int num; char name20; int age; struct date birthday; student1,student2;,4. 成员名可以与程序中的变量名相同,二者不代表同一对象。,11.3 结构体类型变量的引用,规则: 1. 不能将一个结构体变量作为一个整体进行赋值和输出;只能对其各个成员分别输出(引用形式为:结构体变量名

5、.成员名)。 printf(“”,student1); printf(“ %d”, student1.num); 输出 10010,错!,正确!,2 .若成员本身又属一个结构体类型,只能对最低级的成员进行赋值或存取以及运算。 如:student1.birthday.year (续),(接上片),3. 对成员变量可以象普通变量一样进行各种运算,如: sumage=student1.age+student2.age; 4. 可以引用成员的地址,也可以引用结构体变量的地址,如 scanf(“%d”,错!,输入student1.num的值,输出student1的首地址,11.4 结构体变量的初始化,(

6、一)对外部存储类型的结构体变量初始化: struct student long int num; char name20; char sex; char addr20; a=9801,”Wang hong”,W,”2 Linggong Road”; main( ) printf(“No.:%ldnname:%snsex:%cnaddress:%sn”,a.num,a.name,a.sex,a.addr); ,运行结果为: No.:9801 name:Wang hong sex:W address:2 Linggong Road,(二)对静态存储类型的结构体变量初始化,如:,main( ) st

7、atic struct student long int num; char name20; char sex; char addr20; a=9801,”Wang hong”,W,”2 Linggong Road”; printf(“No.:%ldnname:%snsex:%cnaddress:%sn” , a.num,a.name,a.sex,a.addr); ,11.5 结构体数组 (每个数组元素都是一个结构体类型的数据),(一)结构体数组的定义,如 struct student int num; char name20; char sex; int age; char addr30;

8、; struct studnt stu3;,也可直接定义,如 struct student int num; stu3; 或struct int num; stu3;,(二)结构体数组的初始化(只能对全局的或静态存储类别的数组初始化),struct student int num; char name20; char sex; int age; char addr30; stu3=111,”Li”,M,18,”Dalian”,; 也可采用:struct student int num; ; struct student stu=,;,结构体数组的初始化的一般形式是在 定义数组后面加上: =初值

9、表列;,例题:设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。 struct person char name20; int count; leader3=“Li”,0,”zhang”,0,”Liu”,0; main( ) int i, j; char leader_name20; for( i=1;i=10;i+) scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,leaderj.name)= =0)leaderj.count+); for(i=0;i3;i+) printf(“%5s:%dn

10、”,leaderi.name,leaderi.count); ,11.6 指向结构体类型数据的指针,结构体变量的指针:是该结构体变量所占居的内存段的起始地址。例如: main( ) struct student long int num; char name20; char sex; ; struct student stu_1; struct student *p; p=&stu_1;,stu.num=9901; strcpy(stu_1.name,”Li Min”); stu_1.sex=W; printf(“No.:%ldnname%sn sex:%cn”,stu_1.num,stu_1

11、.name, stu_1.sex); printf(“nNo.:%ldnname%sn sex:%cn”,(*p).num,(*p).name, (*p).sex); ,引用结构体成员的三种形式: 结构体变量名.成员名 (*p).成员名 p- 成员名,指向运算符。其优先级高于自增、自减运算符,试分析以下运算: p-n 得到p指向的结构体变量中的成员n的值 p-n+ 得到p指向的结构体变量中的成员n的值, 用完后使它加1; +p-n 得到p指向的结构体变量中的成员n的值 使其先加1,11.8 共用体,11.8.1 共用体的概念 共用体:使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结

12、构。 “共用体”类型变量的定义形式为: union 共用体名 成员表列 变量表列; 例如:union data int i; char ch; float f;a,b,c;,或 union data int i; char ch; float f; ; union data a,b,c;,或 union int i; char ch; float f; a,b,c;,直接 定义,先定义 类型,注意共用体类型变量与结构体类型变量的区别,结构体类型变量所占内存长度是各成员占的内存长度之和。 共用体类型变量所占内存长度等于最长的成员的长度。,11.8.2 共用体变量的引用方式,注意:只能引用共用体变

13、量中的成员,不能引用共用体变量本身。如: 可以引用 a .i(引用共用体变量中的整型变量i) a .ch(引用共用体变量中的字符变量ch) a .f(引用共用体变量中的实型变量f) 不能只引用共用体变量,如: printf(“%d”,a);,错啦!,11.8.3 共用体类型数据的特点,1.每一瞬时只有一个成员起作用 ; 2. 共用体变量中起作用的成员是最后一次存放的成员; 3.共用体变量的地址和它的各成员的地址都是同一地址; 4.不能对共用体变量名赋值,也不能企图引用变量名来 得到成员的值,又不能在定义共用体变量时对它初始化。 5. 不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但

14、可使用指向共用体变量的指针; 6. 共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。而结构体也可以出现在共用体类型定义中,数组也可以作为共用体的成员。,11.9 枚举类型,若一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。 定义方法: 先定义枚举类型 enum weekday sun, mon, tue, wed, thu, fri, sat; 再用此类型定义变量,如: enum weekday workday, week_end; 或直接定义枚举变量。如: enum weekday sun, mon, tu

15、e, wed, thu, fri, sat workday,week_end;,说明:,枚举元素为常量,不是变量,故不能对它们赋值 枚举常量有值。如上面定义中,sun 、 mon 、 tue sat的值依次为0、1、27 也可改变枚举元素的值,在定义时指出,如: enum weekdaysun=7,mon=1,tue,wed,thu,fri,sat; 枚举值可用来作判断比较,如: if(workday=mon) if(workdaysun) 一个整数不能直接赋值给一个枚举变量,应先进行强制类型转换才能赋值,如: workday=(enum weekday)2; (相当于将序号为2的枚举元素值赋给workday , 即:workday=tue;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1