第10章结构体(最终讲稿课件

上传人:我*** 文档编号:140981241 上传时间:2020-08-03 格式:PPT 页数:41 大小:394.50KB
返回 下载 相关 举报
第10章结构体(最终讲稿课件_第1页
第1页 / 共41页
第10章结构体(最终讲稿课件_第2页
第2页 / 共41页
第10章结构体(最终讲稿课件_第3页
第3页 / 共41页
第10章结构体(最终讲稿课件_第4页
第4页 / 共41页
第10章结构体(最终讲稿课件_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《第10章结构体(最终讲稿课件》由会员分享,可在线阅读,更多相关《第10章结构体(最终讲稿课件(41页珍藏版)》请在金锄头文库上搜索。

1、结构体、共用体及枚举类型,第 10 章,结构体类型和结构体变量,10.1,教学进程,10.1.1 结构体类型的定义,问题定义:,应当把它们组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。,教学进程,结构体类型,定义一个结构体类型的一般形式为:,其中struct是用于定义具体结构体类型的关键字,与结构体名共同组成结构体类型名。在“成员表列”中可以定义该类型中有哪些成员,各成员属于什么数据类型,由它们组成结构体。,教学进程,结构体类型,struct student int num; char name20; char sex; int age; float score

2、; char addr30; ;,结构体类型名,成员类型名,成员名,struct date int month; int day; int year; struct student int num; char neme20,sex; int age; struct date birthday; char addr30; student1,student2;,已定义的结构体类型可以像基类型一样使用。,教学进程,结构体类型的定义可以嵌套,在这个定义中,结构体“日期”类型date中又嵌套定义了结构体“时间”类型time。这就是结构体的嵌套定义。,结构体类型,(2) 当一个结构体类型定义在函数之外时,

3、它具有全局作用域;若定义在任一对花括号之内,则具有局部作用域,其作用范围是所在花括号构成的块。 (3) 结构体是一种复杂的数据类型,是数目固定、类型不同的若干成员的集合,结构体类型的定义只是列出了该结构的组成情况,编译系统并未因此而分配存储空间,当定义了结构体类型的变量或数组后,编译系统才会分配存储空间。 (4) 成员名可以与程序中的变量名相同,二者不代表同一个对象。例如,程序中可以定义一个变量num,它与struct stu中的num是两回事,互不干扰。 (5) 如果两个结构体的成员类型、名称、个数相同,但结构体名不同,也是两个不同的结构类型。,结构体类型,教学进程,要 强调 的是,结构体类

4、型名(如上例中的date)是定义的类型名,而不是变量名,就好像整型的类型名为int,双精度实型的类型名为double,字符型的类型名为char一样,只不过整型、双精度实型、字符型等基本数据类型是C编译系统已经定义的,用户可以直接用它们来定义相应类型的变量,而结构体类型是用户根据数据处理的需要临时定义的一种类型,一经定义就可以像系统定义的类型一样使用了。但系统并不为类型分配存储空间,为了能在程序中使用结构体类型的数据,必须定义结构体类型的变量。,定义结构体类型的变量,教学进程,结构体类型和结构体变量,10.1,10.1.2 结构体变量的定义,可以采取以下3种方法定义结构体变量:,(1) 先定义结

5、构体类型,再定义结构体变量,例如:struct student student1, student2; 结构体类型名 结构体变量名 定义了student1和student2为struct student类型(应事先已定义)的变量,即它们具有struct student类型的结构。,定义结构体类型变量,教学进程, 一般形式为: struct结构体名 成员表列 变量名表列;,(2) 在定义结构体类型的同时定义结构体变量,例如: struct student int num; char name20; char sex; int age; float score; char addr30; stud

6、ent1,student2;,它的作用与第一种方法相同,即定义了两个struct student 类型的变量student1, student2。 如果需要,在程序中还可以定义该种结构体类型的其它变量。,结构体类型变量的定义,教学进程,(3) 不指定类型名而直接定义结构体变量, struct 成员表 变量表;,例如: struct int num; char name10; char sex; int age; float score; studernt1, student2;,指定了一个无名的结构体类型,它没有名字,显然不能再以此结构体类型去定义其它变量了。,未出现结构体名,结构体类型变量的

7、定义,教学进程,注意 (1) 结构体类型与结构体变量是不同的概念,不能混同。 (2) 结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一对象。 (3) 对结构体变量中的成员,可以单独使用,它的作用与地位相当于普通变量。,教学进程,结构体变量中的每个成员与普通变量一样,可进行各种运算。 st.num=115; st.name0= z; st.name1= a; st.name2= 0; st.sex=M; st.age=19; st.score=95.0; scanf(d, 但不能将一个结构体变量作为一个整体进行输入和输出。 如: 已定义student1和student2为结构体变量

8、并已有值, printf(%d,%s,%c,%d,%f,%n,student1);,(2)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员,进行赋值或存取及运算。 如: 访问上面定义的结构体变量student1的各成员 student1.num student1.birthday.month,定义了结构体变量后,便可以引用这个变量。但应遵守以下规则:,引用结构体类型变量,教学进程,(3) 对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。 如: student2.score=student1.score; sum=studen

9、t1.score+student2.score; student1.age+; +student2.age;,(4) 可引用结构体变量成员的地址,也可引用结构体变量的地址。 如:scanf(%d, /输出变量student1的首地址 但不能用以下语句整体读入结构体变量 如: scanf(%d,s,c,d,f,s,student1); 结构体变量的地址主要用作函数参数,传递结构体变量的地址。,教学进程,与普通变量一样,在定义结构体类型变量的同时也可以对结构体类型变量赋初值。,结构体变量的引用和初始化,10.2,10.2.2 结构体变量的初始化,例10-1对结构变量初始化。 #include ma

10、in() struct stu int num; char name20; char sex; int age; float score; boy2,boy1=102,Zhang ping,M,20,78.5; boy2=boy1; printf(Number:%dnName:%sn,boy2.num,boy2.name); printf(Sex:%cnage:%dScore:%4.1fn,boy2.sex,boy2.age,boy2.score); 本例中,对结构体变量boy1作了初始化赋值,然后把boy1的值整体赋予boy2,最后用printf函数输出boy2各成员的值。,程序运行结果如下

11、: Number:102 Name:Zhang ping Sex:M Age:20 Score:78.5,结构体数组,10.3,10.3.1 定义结构体数组,教学进程,与整型数组、实型数组、字符型数组一样,在程序中也可以定义 结构体类型的数组,并且同一个结构体数组中的元素应为同一种结构 体类型。,与定义结构体变量的方法相似,只需说明其为数组即可。 如:struct student int num; char name20; char sex; int age; float score; char addr30;,; struct student stu3;, stu3; /*直接定义结构体数组

12、*/,定义了一个数组stu,数组有个元素,均为struct student类型数据。,结构体数组,10.3,10.3.2 结构体数组的初始化,教学进程,与其它类型的数组一样,对结构体数组可以初始化。,如: struct student int num;char name20; char sex; int age; float score; char addr30; stu3=10101,LiLin,M,18,87.5,103 BeijingRoad, 10102,Zhang Fun,M,19,99,130 Shanghai Road, 10104 ,Wang Min,F,20,78.5 ,10

13、10 Zhongshan Road ;,图9-4,定义结构体数组,教学进程,数组各元素在内存中连续存放,如图所示。,一个结构体数组的元素相当于一个结构体变量,引用结构体数组元素的一般形式为:数组名下标.成员名,10.3.3 结构体数组的引用,教学进程,【例10.2】 计算学生的平均成绩和不及格的人数。,#include struct stu int num; char name20; 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,

14、87, 105,Wang ming,M,58 ;,main() int i,c=0; float ave,s=0; for(i=0;i5;i+) s+=boyi.score; if(boyi.score60) c+=1; ave=s/5; printf(average=%fncount=%dn,ave,c); 本例程序中定义了一个结构体数组boy,共5个元素,并作了初始化赋值。在main函数中用for语句逐个累加各元素的score 成员值存于s之中,如果score的值小于60(不及格),那么计数器c加1,循环完毕后输出全班平均分及不及格人数。,程序运行结果如下: average=69.000000 count=2,结构体指针,10.4,10.4.1 指向结构体变量的指针变量,

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

最新文档


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

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