第9章结构体共用体与枚举类型-西安交大.ppt
《第9章结构体共用体与枚举类型-西安交大.ppt》由会员分享,可在线阅读,更多相关《第9章结构体共用体与枚举类型-西安交大.ppt(36页珍藏版)》请在三一文库上搜索。
1、9.1 结构体 9.2 结构体数组 9.3 结构体与指针 9.4 共用体 9.5 枚举类型 9.6 用typedef定义类型,第9章 结构体、共用体与枚举类型,9.1 结构体,结构体是将不同类型的数据根据需要组合成一个有机的整体,以便于引用。 这个整体是一个构造数据类型结构体类型,其中的数据是相互联系的。 如要存储一个学生的有关信息(学号、姓名、性别、年龄、住址),可采用结构体数据结构描述上述信息。,struct student int num; char name20; char sex; int age; char addr30; ;,定义一个结构体类型的一般形式为:,struct 结构体
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 STUD
3、ENT int num; char name20; char sex; 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 成员表列
4、变量名表列;,此时,不出现结构体名,struct int num; char name20; char sex; int age; char addr30; student1, student2;,几点说明:,1.类型与变量是不同概念,不要混淆; 2.结构体中的成员,可以单独使用,其作用与地位相当于普通变量; 3.成员名可以与程序中的变量名相同,二者不代表同一对象。互不干扰。 4.在结构中,各成员都占有自己的内存空间,它们是同时存在的。一个结构变量的总长度等于所有成员长度之和。,Sizeof( )为一运算符,其功能是测试某种类型的变量在内存中所占用的字节数。,有: struct int i;
5、char c; float a; test; sizeof(test)的值是:7,struct date int month; int day; int year; ; Struct student int num; char name20; int age; struct date birthday; student1,student2;,Struct student int num; char name20; int age; struct int month; int day; int year; birthday; student1,student2;,5. 成员也可以是一个结构体变量
6、。例:,结构体类型变量的引用,引用一般形式为:结构体变量名.成员名 规则: 1. 不能将一个结构体变量作为一个整体进行赋值和输出;只能对其各个成员分别输出。 printf(“”,student1); printf(“ %d”, student1.num); 输出 10010,错!,正确!,2 .若成员本身又属一个结构体类型,只能对最低级的成员进行赋值或存取以及运算。 如:student1.birthday.year,3. 对成员变量可以象普通变量一样进行各种运算,如: sumage=student1.age+student2.age; 4. 可以引用成员的地址,也可以引用结构体变量的地址,如:
7、 scanf(“%d”,错!,输入student1.num的值,输出student1的首地址,Struct student int no; char name20; char sex; struct int year; int month; int day; birth; ; Struct student s;,设变量s中的“生日”是“1984年11月11日”,下列对“生日”的正确赋值方式是: A)year=1984;month=11;day=11; B)birth.year=1984;birth.month=11;birth.day=11 C)s.year=1984;s.month=11;s
8、.day=11 D)s.birth.year=1984;s.birth.month=11;s.birth.day=11;,练习:已知学生记录描述为:,结构体变量的初始化,在定义结构体类型变量的同时对其每个成员赋初值初始化。 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);,运行结
9、果为: No.:9801 name:Wang hong sex:W address:2 Linggong Road,9.2 结构体数组 (每个数组元素都是一个结构体类型的数据),结构体数组的定义: struct student int num; char name20; char sex; int age; char addr30; ; struct studnt stu3;,也可直接定义: struct student int num; stu3; 或struct int num; stu3;,结构体数组的引用,1结构体数组元素中某一成员的引用 stu0.name 表示stu的第1个元素的n
10、ame成员项 stu4.age 表示stu的第5个元素的age成员项 2结构体数组元素的赋值 可将一个结构体数组元素赋给同一结构体数组中的另一个元素,或者赋给同一类型的变量。 stu1 = stu2; Stu4 = stu5; 注意:结构体数组元素的输入和输出只能将单个成员项进行输入和输出,而不能把结构体数组元素作为一个整体直接进行输入和输出。,结构体数组的初始化,struct student int num; char name20; char sex; int age; char addr30; stu3=111,”Li”,M,18,”Dalian”,; 也可采用:struct stude
11、nt int num; ; struct student stu=,;,结构体数组的初始化的一般形式是在 定义数组后面加上: =初值表列;,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
12、=0;i3;i+) printf(“%5s:%dn”,leaderi.name,leaderi.count); ,判断是哪一位候选人,例题:设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。,计算学生的平均成绩和不及格的人数。,struct stu int num; char *name; char sex; float score; boy5= 101,“Li ping“,M,45, 102,“Zhang ping“,M,62.5, 103,“He fang“,F,92.5, 104,“Cheng ling“,F,87, 105,“Wang ming“,M,58, ;
13、,main() int i,c=0; float ave,s=0; for(i=0;i5;i+) s+=boyi.score; if(boyi.score60) c+=1; printf(“s=%fn“,s); ave=s/5; printf(“average=%fncount=%dn“,ave,c); ,9.3 结构体与指针,结构体变量的指针是该结构体变量所占据的内存段的起始地址 如: main( ) struct student long int num; char name20; char sex; ; struct student stu_1; struct student *p; p
14、=&stu_1;,stu.num=9901; strcpy(stu_1.name,”Li Min”); stu_1.sex=W; printf(“No.:%ldnname%snsex:%cn”, stu_1.num,stu_1.name,stu_1.sex); printf(“nNo.:%ldnname%sn sex:%cn”,(*p).num,(*p).name,(*p).sex); ,指针的定义,引用结构体成员的三种形式: 结构体变量名 . 成员名 (*p).成员名 p- 成员名,指向运算符。其优先级高于自增、自减运算符,试分析以下运算: p-n 得到p指向的结构体变量中的成员n的值 p-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 共用 枚举 类型 西安 交大
链接地址:https://www.31doc.com/p-2258266.html