第11章 结构体与共用体课件

上传人:我*** 文档编号:140640013 上传时间:2020-07-31 格式:PPT 页数:57 大小:288KB
返回 下载 相关 举报
第11章 结构体与共用体课件_第1页
第1页 / 共57页
第11章 结构体与共用体课件_第2页
第2页 / 共57页
第11章 结构体与共用体课件_第3页
第3页 / 共57页
第11章 结构体与共用体课件_第4页
第4页 / 共57页
第11章 结构体与共用体课件_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《第11章 结构体与共用体课件》由会员分享,可在线阅读,更多相关《第11章 结构体与共用体课件(57页珍藏版)》请在金锄头文库上搜索。

1、第11章 结构体与共用体,概述 定义结构体类型变量的方法 结构体类型变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 用指针处理链表 共用体 枚举类型 用typedef定义类型,1. 概述,除数组外,前面介绍的数据类型都是简单类型: 整型、实型、字符型 数组是构造类型,但其所有的元素具有相同的数据类型。 本章将介绍另外一种构造类型:结构体,它的特点是内含的数据元素成员可以具有不同的数据类型。,例如: struct student unsigned int No; char name32; unsigned short age; float score; char addre

2、ss64; ;,“记录”结构体包含不同数据类型的“数据项”数据元素,每个记录作为整体进行考虑。,1. 概述,声明结构体类型的形式: struct 结构体名称 成员列表 ; 声明后的结构体类型就可以同其它的数据类型一样用来定义变量等。 结构体中的成员可以是一个简单的基本类型,也可以是复杂的构造类型。 类型与变量是不同的概念,这里只是定义了类型,尚未定义变量,因此未分配内存空间。,struct University char name32; struct School school50; ;,例如: struct School char name32; int num_staff; int typ

3、e; ;,2. 定义结构体类型变量的方法,先声明结构体类型再定义变量名 在声明类型的同时定义变量 直接定义结构体类型变量,不出现结构体名,struct student unsigned int No; char name32; unsigned short age; float score; char address64; ; struct student stu1, stu2; struct student *stu3;,struct student unsigned int No; char name32; unsigned short age; float score; char add

4、ress64; stu1, stu2, *stu3;,struct unsigned int No; char name32; unsigned short age; float score; char address64; stu1, stu2, *stu3;,2. 定义结构体类型变量的方法,说明: 类型与变量是不同概念; 结构体成员可以单独使用; 成员也可以是结构体变量; 成员名称可以与程序中的其它变量名称相同,是两个不同的对象。,sizeof(int) 4 sizeof(struct student) ? 结构体中所有成员占用字节的和。,sizeof(struct student) 10

5、6,2. 定义结构体类型变量的方法,说明: 类型与变量是不同概念; 结构体成员可以单独使用; 成员也可以是结构体变量; 成员名称可以与程序中的其它变量名称相同,是两个不同的对象。,struct student unsigned int No; char name32; unsigned short age; float score; struct data birthday; stu1, stu2;,struct data int month; int day; int year; ;,3. 结构体变量的引用,结构体变量中成员的引用: 结构体变量名.成员名 结构体指针变量中成员的引用: 结构体

6、指针变量名-成员名 不能将结构体变量作为一个整体进行输入/输出。只能对结构体变量中的各个成员分别进行输入和输出; 如果成员本身又是结构体类型,则要用若干个成员运算符,一级一级找到最低一级的成员。只能对最低级的成员进行运算; stu1.No stu1.birthday.month 结构体变量中的成员可以同其它变量一样进行运算; strcpy(stu1.name, “LiNa”); stu1.age+; 可以引用结构体变量中成员的地址,结构体变量的地址; scanf(“%d”, /输出stu1的首地址,用做函数参数,3. 结构体变量的引用,struct stu int num; char *nam

7、e; char sex; float score; ;,main() struct stu boy1,boy2; boy1.num=102; boy1.name=Zhang ping; printf(input sex and scoren); scanf(%c %f, ,4. 结构体变量的初始化,struct stu /*定义结构*/ int num; char *name; char sex; float score; ; main() struct stu boy2, boy1=102,Zhang ping,M,78.5; boy2=boy1; printf(Number=%dnName

8、=%sn,boy2.num, boy2.name); printf(Sex=%cnScore=%fn,boy2.sex, boy2.score); ,5. 结构体数组,定义: struct stu int num; char *name; char sex; float score; boy3; struct stu girl10;,定义: struct int num; char *name; char sex; float score; boy3;,5. 结构体数组,结构体数组的存储形态:,各个数组元素连续存放,5. 结构体数组,初始化: struct stu int num; char

9、*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 ;,可不写,struct stu int num; char *name; char sex; float score; ; struct stu boy5 = 101,Li ping,M,45, 102,Zhang ping,M,62.5, 103,He fang,F,92.5, 104,Cheng ling,F,87,

10、 105,Wang ming,M,58 ;,=初值列表,5. 结构体数组,【例】计算学生的总平均成绩 和统计大于90分的人数。 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,86 ;,main() int i, c=0; float ave, s=0; for(i=0; i90) c+=1; printf(s=%fn,s);

11、ave=s/5; printf(average=%fn“, ave); printf(“count=%dn, c); ,5. 结构体数组,【例】建立同学通讯录 #include #define NUM 3 struct mem char name20; char phone10; ;,main() struct mem manNUM; int i; for(i=0; iNUM; i+) printf(input name:n); gets(mani.name); printf(input phone:n); gets(mani.phone); printf(nametttphonenn); f

12、or(i=0;iNUM;i+) printf(%sttt%sn, mani.name,mani.phone); ,5. 结构体数组,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+; printf(n); for(i=0;i3;i+) printf(%s:%dn,leaderi.name,leaderi.count); ,【例】对候选人得票的统计程序 #

13、include #include #include struct person char name20; int count; leader3=Li,0,Zhang,0,Fun,0;,6. 指向结构体类型数据的指针,指向结构体变量的指针; 指向结构体数组的指针; 结构体变量和结构体指针变量作函数参数。,【例】 struct stu int num; char *name; char sex; float score; boy, *pboy; struct stu *pstu; pboy = ,结构体指针变量说明的一般形式为: struct 结构体名 *结构体指针变量名 结构体指针必须先赋值才能

14、使用 pboy = 有了结构体指针变量,就能更方便地访问结构变量的各个成员。其访问的一般形式为: (*结构指针变量).成员名 或为: 结构指针变量-成员名,6. 指向结构体类型数据的指针,指向结构体变量的指针; 指向结构体数组的指针; 结构体变量和结构体指针变量作函数参数。,struct stu int num; char *name, sex; float score; boy1=102, 李平,M,78.5, *pstu; main() pstu= ,注意: pstu-num pstu-num+ (pstu-num)+ +pstu-num +(pstu-num),6. 指向结构体类型数据的

15、指针,指向结构体数组的指针; 结构体变量和结构体指针变量作函数参数。,struct stu int num; char *name, sex; float score; boy5= 101,Zhou ping,M,45, 102,Zhang ping,M,62.5, 103,Liou fang,F,92.5, 104,Cheng ling,F,87, 105,Wang ming,M,58 ;,main() struct stu *ps; printf(NotNametttSextScoretn); for(ps=boy; psnum,ps-name,ps-sex,ps-score); ,ps=boy; = boy0 ps+1 = boy1 ps+4 = boy4 (+ps)-num ? (ps+)-num ? 二者区别,101,“Li ping”,M,45,102,“Zhang ping”,M,62.5,103,“Liou fang”,boy0,boy1,boy2,p,p+1,pstu是指向结构的指针,若要 指向 某个成员,必须强制类型 转换 pstu=(struct stu*)boy1.name; printf( Name=%sn,pstu); Name=Zhang ping,6. 指向结构体类型数据的指针,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号