C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第9章 结构体与共用体

上传人:E**** 文档编号:89381969 上传时间:2019-05-24 格式:PPT 页数:42 大小:140KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第9章 结构体与共用体_第1页
第1页 / 共42页
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第9章 结构体与共用体_第2页
第2页 / 共42页
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第9章 结构体与共用体_第3页
第3页 / 共42页
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第9章 结构体与共用体_第4页
第4页 / 共42页
C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第9章 结构体与共用体_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第9章 结构体与共用体》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 路俊维 马雪松主编 第9章 结构体与共用体(42页珍藏版)》请在金锄头文库上搜索。

1、第9章 结 构 体,任务:学生信息的管理 有一个结构体数组stu5,每个元素都含有学号、姓名、三门课成绩,要求编写input()和output()函数,分别实现输入和输出5个学生的数据记录。,任务所需主要相关知识: 结构体类型 结构体变量 结构体数组 结构体指针,9.1 结构体概述,一种构造数据类型“结构(structure)”或叫“结构体”。“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。,定义一个结构的一般形式为:,struct 结构名 成员表列; 说明: 1struct是定义结构体类型的关键字,结构名由编程者按C语言标识符命名规则指

2、定。 2最后一个花括号外的分号不能省略。 3成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为: 类型说明符 成员名;,例如学生信息的结构体描述:,struct stud int num; char name20; char sex; float score; ;,在这个结构定义中,结构名为stud,该结构由4个成员组成。第一个成员为num,整型变量;第二个成员为name,字符数组;第三个成员为sex,字符变量;第四个成员为score,实型变量。应注意在括号后的分号是不可少的。结构定义之后,即可进行变量说明。凡说明为结构stud的变量都由上述4个成

3、员组成。由此可见, 结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。,9.1.1 结构类型变量的说明,1先定义结构,再说明结构变量 如: struct stud int num; char name20; char sex; float score; ; struct stud stud1, stud2; 说明了两个变量stud1和stud2为stud结构类型。也可以用宏定义使一个符号常量来表示一个结构类型。,9.1.1 结构类型变量的说明,例如: #define STU struct stud STU int num; char name20; char sex; flo

4、at score; ; STU stud1, stud2;STU与struct stud等价。,9.1.1 结构类型变量的说明,2在定义结构类型的同时说明结构变量 这种形式的说明的一般形式为: struct 结构名 成员表列 变量名表列;,例如: struct stud int num; char name20; char sex; float score; stud1, stud2; 定义了两个struct stud类型的变量stud1,stud2。,9.1.1 结构类型变量的说明,3直接说明结构变量 这种形式的说明的一般形式为: struct 成员表列 变量名表列;,例如: struct

5、int num; char name20; char sex; float score; stud1, stud2;,9.1.1 结构类型变量的说明,例如嵌套结构体的定义: struct date int month; int day; int year; ;,struct int num; char name20; char sex; struct date birthday; float score; stud1, stud2;,9.1.2 结构变量成员的表示方法,表示结构变量成员的一般形式是:结构变量名.成员名 例如: boy1.num 即第一个人的学号 boy2.sex 即第二个人的性

6、别,9.1.3 结构变量的赋值,结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来完成。 【例9.1】给结构变量赋值并输出其值。 【程序代码】 #include void main() struct stud int num; char *name; char sex; float score; stud1,stud2; stud1.num=102; stud1.name=“Zhang ping“; printf(“input sex and scoren“); scanf(“%c %f“, ,9.1.4 结构变量的初始化,和其他类型变量一样,对结构变量可以在定义时进行初始化赋值。 【例

7、9.2】对结构变量初始化。 【程序代码】 #include void main() struct stud /*定义结构*/ int num; char *name; char sex; float score; stud1, stud2=102,“Zhang ping“,M,78.5; stud1= stud2; printf(“Number=%dnName=%sn“, stud1.num, stud1.name); printf(“Sex=%cnScore=%fn“, stud1.sex, stud1.score); ,9.2 结构数组的定义,数组的元素也可以是结构类型的。因此可以构成结构

8、型数组,结构数组的每一个元素都是具有相同结构类型的下标结构变量。 构造结构数组的方法和构造结构变量相似,只需说明它为数组类型即可。 例如: struct stud int num; char *name; char sex; float score; stu5;,9.3 结构指针变量的说明和使用,9.3.1 指向结构变量的指针 结构指针变量说明的一般形式为: struct 结构名 *结构指针变量名 例如,在前面的例题中定义了stu这个结构,如要说明一个指向stu的指针变量pstu,可写为: struct stu *pstu;,9.3.1 指向结构变量的指针,有了结构指针变量,就能更方便地访问结

9、构变量的各个成员。其访问的一般形式为: (*结构指针变量).成员名 或为: 结构指针变量-成员名 例如: (*pstu).num 或者: pstu-num 应该注意(*pstu)两侧的括号不可少,因为成员符“.”的优先级高于“*”。如去掉括号写作*pstu.num则等效于*(pstu.num),这样,意义就完全不对了。,9.3.2 指向结构数组的指针,指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址。,9.3.3 结构指针变量作函数参数,即用指针变量作函数参数进行传送。这时由实参传向形

10、参的只是地址,从而减少了时间和空间的开销。 【例9.7】计算一组学生的平均成绩和不及格人数。用结构指针变量作函数参数编程。,【例9.7】计算一组学生的平均成绩和不及格人数。,【程序代码】 #include 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, ;,【例9.7】计算一组学生的平均成绩和不及格人数

11、。,void main() struct stu *ps; void ave(struct stu *ps); ps=boy; ave(ps); ,【例9.7】计算一组学生的平均成绩和不及格人数。,void ave(struct stu *ps) int c=0,i; float ave,s=0; for(i=0;iscore; if(ps-score60) c+=1; printf(“s=%fn“,s); ave=s/5; printf(“average=%fncount=%dn“,ave,c); ,9.4 动态存储分配,常用的内存管理函数有以下三个: 1分配内存空间函数malloc 调用形

12、式: (类型说明符*)malloc(size) 功能:在内存的动态存储区中分配一块长度为“size“字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符“表示把该区域用于何种数据类型。 (类型说明符*)表示把返回值强制转换为该类型指针。 “size”是一个无符号数。 例如: pc=(char *)malloc(100);,9.4 动态存储分配,2分配内存空间函数 calloc calloc 也用于分配内存空间。 调用形式: (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。 (类型说明符*)用于

13、强制类型转换。 calloc函数与malloc函数的区别仅在于一次可以分配n块区域。例如: ps=(struet stu*)calloc(2,sizeof(struct stu);,9.4 动态存储分配,3释放内存空间函数free 调用形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。,9.5 链表的概念,每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个结点 。 在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三

14、个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为0。这样一种连接方式,在数据结构中称为“链表”。,9.5 链表的概念,例如,一个存放学生学号和成绩的结点应为以下结构: struct stu int num; int score; struct stu *next; ; 前两个成员项组成数据域,后一个成员项next构成指针域,它是一个指向stu类型结构的指针变量。,链表的基本操作对链表的主要操作有以下几种: 1建立链表; 2指定结点的查找与输出; 3插入一个结点; 4删除一个结点;,9.6 共用体类型,共用体又称联合体,是一种类似于结构体的构造型数据结构

15、,它准许不同类型和不同长度的数据共享同一块存储空间。共用体实质上采用了覆盖技术,在程序设计中,采用共用体要比采用结构体节省空间,但共用体的访问速度比结构体慢。,9.6.1 共用体类型定义,1共用体类型定义 union 共用体类型名 数据类型 成员名1; 数据类型 成员名2; 数据类型 成员名n; ;,例如:union tag int bh; float jg; char xm;,9.6.2 共用体变量的说明,1先定义共用体类型,再说明共用体变量。 如: union tag int bh; float jg; char xm; ; union tag data1, data2; 说明了两个变量d

16、ata1和data2为tag共用体类型。,2在定义共用类型的同时说明共用体变量。 例如: union tag int bh; float jg; char xm; data1,data2; 定义了两个union tag类型的变量data1,data2。 这种形式的说明的一般形式为: union 共用体类型名 成员表列 变量名表列;,3直接说明共用变量。 例如: union int bh; float jg; char xm; data1,data2; 这种形式的说明的一般形式为: union 成员表列 变量名表列; 共用体类型名 共用体变量名,9.6.3 共用体变量成员的引用,共用体变量成员的引用类似于结构体变量成员的引用,也是利用运算符“-”

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

最新文档


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

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