结构体和共用体教学文稿

上传人:yuzo****123 文档编号:139252718 上传时间:2020-07-20 格式:PPT 页数:93 大小:442.50KB
返回 下载 相关 举报
结构体和共用体教学文稿_第1页
第1页 / 共93页
结构体和共用体教学文稿_第2页
第2页 / 共93页
结构体和共用体教学文稿_第3页
第3页 / 共93页
结构体和共用体教学文稿_第4页
第4页 / 共93页
结构体和共用体教学文稿_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《结构体和共用体教学文稿》由会员分享,可在线阅读,更多相关《结构体和共用体教学文稿(93页珍藏版)》请在金锄头文库上搜索。

1、第8章 结构体和共用体,前面的章节中已经介绍了各种基本数据类型、数组和指针。但只有这些数据类型还难以处理一些比较复杂的数据结构。本章将以前面介绍的数据类型为基础,进一步介绍结构体类型、共用体类型和枚举类型。,8.1 结构体 8.2 动态内存分配与链表 8.3 共用体类型 8.4 枚举类型 8.5 用户自定义类型 8.6 程序举例,第8章 结构体和共用体,第 8 章,8.1 结 构 体,8.1 结构体,8.1.1 结构类型定义 在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。但这些显然不能

2、用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,语言中给出了另一种构造数据类型“结构体”。 “结构体”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构体既然是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。,8.1 结构体,在这个结构体定义中,结构体名为stu,该结构体由4个成员组成。第一个成员为num,整型变量;第二个成员为name,字符数组变量;第三个成员为sex,字符变量;第四个成员为score,实型变量。应注

3、意在括号“”后的分号是不可少的。结构体定义之后,即可进行变量说明。凡说明为结构体stu的变量都由上述4个成员组成。由此可见,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。,8.1 结构体,8.1.2 结构体类型变量的说明 说明结构体变量有以下三种方法。以上面定义的stu为例来加以说明。 (1)先定义结构体类型,再说明结构体变量 例如: struct stu int num; char name20; char sex; float score; ; struct stu boy1,boy2; 说明了两个变量boy1和boy2为stu结构类型。也可以用宏定义使用一个符号常量

4、来表示一个结构类型,例如: #define STU struct stu STU int num; char name20; char sex; float score; ; STU boy1,boy2;,8.1 结构体,(2)在定义结构体类型的同时说明结构体变量 例如: struct stu int num; char name20; char sex; float score; boy1,boy2; (3)直接说明结构体变量 例如: struct int num; char name20; char sex; float score; boy1,boy2;,8.1 结构体,第三种方法与第二

5、种方法的区别在于第三种方法中省去了结构体名,而直接给出结构体变量。三种方法中说明的boy1,boy2变量都具有相同的结构。说明了boy1,boy2变量为stu类型后,即可向这两个变量中的各个成员赋值。 在上述stu结构体定义中,所有的成员都是基本数据类型或数组类型。成员也可以又是一个结构体类型,即构成了嵌套的结构体。,8.1 结构体,例如: struct date int month; int day; int year; ; struct int num; char name20; char sex; struct date birthday; float score; boy1,boy2;

6、,首先定义一个结构体date,由month(月)、day(日)、year(年) 三个成员组成。在定义并说明变量 boy1 和 boy2 时,其中的成员birthday被说明为data结构体类型。成员名可与程序中其它变量同名,互不干扰。结构体变量成员的表示方法,在程序中使用结构体变量时,往往不把它作为一个整体来使用。,说明:结构体在内存中存储容量是各成员容量之和,这是与后面联合体的重要区别。,8.1 结构体,8.1.3 结构体变量的引用 一般情况下,不能对一个结构体变量作为整体引用,只能引用其中的成员。结构体变量中成员引用的一般形式为: 结构体变量名.成员名 其中,“.”是域成员运算符,是C语言

7、中优先级最高的运算符之一。 例如:boy1.num 即第一个人的学号,boy2.sex 即第二个人的性别。如果成员本身又是一个结构体,则必须逐级找到最低级的成员才能使用。 例如:boy1.birthday.month 即第一个人出生的月份。成员可以在程序中单独使用,与普通变量完全相同。,8.1 结构体,8.1.4 结构体变量的赋值 对于结构体变量,只有以下两种情况可以对结构体变量赋值。 (1)结构体变量整体赋值 例如: boy2=boy1; (2)取结构体变量地址 例如: 这些语句都是不允许的,只能对结构体成员进行输入/输出。,8.1 结构体,例8.1 给结构体变量赋值并输出其值。 #incl

8、ude void main() struct stu /* 定义结构体stu */ int num; char *name; char sex; float score; boy1,boy2; /* 定义stu类型的变量boy1、boy2 */ boy1.num=102; boy1.name=Zhang ping; printf (input sex and score:n); scanf(%c %f, ,8.1 结构体,程序运行结果: input sex and score: M 96 number=102 name=Zhang ping sex=M score=96.00,本程序中用赋值语

9、句给num和name两个成员赋值,name是一个字符串指针变量。用scanf()函数动态地输入sex和score成员值,然后把boy1的所有成员的值整体赋予boy2。最后分别输出boy2 的各个成员值。,8.1 结构体,8.1.5 结构体变量的初始化 如果结构体变量为全局变量或者静态变量,则可以对它做初始化赋值。对局部或自动结构体变量不能做初始化赋值。,8.1 结构体,例8.2 外部结构体变量初始化。 #include struct stu /* 定义结构体 */ int num; char *name; char sex; float score; boy2,boy1=102,Zhang p

10、ing,M,78.5;/*对变量boy1的成员初始化 */ void main() boy2=boy1; /* 把boy1整体赋给boy2 */ printf(number=%dnname=%sn,boy2.num,boy2.name); printf(sex=%cnscore=%6.2fn,boy2.sex,boy2.score); ,8.1 结构体,程序运行结果: number=102 name=Zhang ping sex=M score=78.50,本程序中,boy2,boy1均被定义为外部结构体变量,并对boy1作了初始化赋值。在main()函数中,把boy1的值整体赋予boy2,然

11、后用两个printf()语句输出boy2各成员的值。,8.1 结构体,例8.3 静态结构体变量初始化。 #include void main() static struct stu /* 定义静态结构体 */ int num; char *name; char sex; float score; boy2,boy1=102,Zhang ping,M,78.5; /*对变量boy1的成员初始化 */ boy2=boy1; printf(number=%dnname=%sn,boy2.num,boy2.name); printf(sex=%cnscore=%6.2fn,boy2.sex,boy2.

12、score); 本程序是把boy1,boy2都定义为静态局部的结构体变量,同样可以做初始化赋值。,8.1 结构体,8.1.6 结构体数组 一个结构体变量可以处理一个对象,如果有多个对象,则需要多个结构体变量,数组的元素也可以是结构体类型的,因此可以构成结构体数组。结构体数组的每一个元素都是具有相同结构体类型的下标结构体变量。在实际应用中,经常用结构体数组来表示具有相同数据结构的一个群体。如一个班的学生档案,一个车间职工的工资表等。 结构体数组的定义方法和结构体变量相似,也有三种方式: (1)先定义结构体类型,再定义结构体数组。 例如: struct stu int num; char *nam

13、e; char sex; float score; ; struct stu boy5; 定义了一个结构体数组boy,共有5个元素,boy0boy4。每个数组元素都具有struct stu的结构体形式。,8.1 结构体,(2)在定义结构体类型的同时定义结构体数组。 例如: struct stu int num; char *name; char sex; float score; boy5; (3)直接定义结构体数组。 例如: struct int num; char *name; char sex; float score; boy5;,8.1 结构体,对外部结构体数组或静态结构体数组可以做

14、初始化赋值。 例如: 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; 当对全部元素做初始化赋值时,也可不给出数组长度。,8.1 结构体,例8.4 计算学生的平均成绩和不及格的人数。 #include struct stu /* 定义结构体 */ int num; char *name; char sex; float sc

15、ore; 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; /* 对结构体数组元素初始化 */ void main() int i,c=0; float ave,s=0; for(i=0;i5;i+) s+=boyi.score; if(boyi.score60) c+=1; printf(s=%6.2fn,s); ave=s/5; /* 计算平均成绩 */ printf(average=%6.2fncount=%dn,ave,c); ,8.1 结构体,程序运行结果

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

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

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