第8章结构体程序设计.ppt
《第8章结构体程序设计.ppt》由会员分享,可在线阅读,更多相关《第8章结构体程序设计.ppt(53页珍藏版)》请在课桌文档上搜索。
1、C语言程序设计第8章 结构体程序设计,第8章 结构体程序设计,8.1 结构体数据概述 8.2 结构体类型和结构体变量8.3 结构体数组 8.4 结构体指针变量8.5 使用链表存储数据8.6 链表的基本操作8.7 结构体应用举例,8.1 结构体数据概述,结构体数据是由多个数据项组合而成的数据,如表8-1所示的学生信息表,当把每一行视为一个完整数据时,该数据就是一个结构体数据。为了有效地处理这样一类组合数据,C语言提供了“结构体”技术,它可以把多个数据项组合起来,作为一个数据整体进行处理。,8.1 结构体数据概述,8.2 结构体类型和结构体变量,8.2.1 使用结构体变量存储学生信息 8.2.2
2、定义结构体数据类型 8.2.3 结构体变量的定义及使用,8.2.1使用结构体变量存储学生信息,例8-1 利用结构体变量存储表8-1中第1行的学生信息,并输出其姓名和成绩。,#includestruct student/*定义结构体数据类型*/int num;char name20;char sex;int score;int main()struct student stu=9011,liujia,M,87;printf(Name:%sn,stu.name);printf(Score:%dn,stu.score);return 0;,8.2.2 定义结构体数据类型,定义结构体类型的一般格式st
3、ruct 结构体名 成员表;说明:“结构体名”是用户定义的结构体的名字,在以后定义结构体变量时,使用该名字进行类型标识。“成员表”是对结构体数据中每一个数据项的变量说明,其格式与说明一个变量的一般格式相同:数据类型名 成员名;“struct”是关键字,“struct 结构体名”是结构体类型标识符,在类型定义和类型使用时“struct”都不能省略。结构体名称可以省略,此时定义的结构体称为无名结构体。,9.1.2 结构体类型定义,学生组合数据的结构体类型定义:struct studentint num;char name20;char sex;int score;,8.2.3 结构体变量的定义及使
4、用,1.定义结构体变量 先定义结构体类型,再定义结构体变量。一般格式struct 结构体类型名称 结构体变量名;如:struct student student1,student2;,8.2.3结构体变量的定义及使用,在定义结构体类型的同时定义结构体变量。一般格式struct 结构体名 成员表结构体变量1,结构体变量2,结构体变量n;例如:struct student int num;char name20;char sex;int score;student1,student2;,8.2.3 结构体变量的定义及使用,不定义结构体类型名,直接定义结构体类型变量。一般格式struct 成员表;结
5、构体变量1,结构体变量2,结构体变量n;例如:struct int num;char name20;char sex;int score;student1,student2;,8.2.3 结构体变量的定义及使用,2.引用结构体成员引用结构体成员的一般格式结构体变量名.成员名称例如:student1.score例8-2 输入两个学生的信息,然后输出学习成绩高的学生的姓名和成绩信息。若成绩相同时,只输出第1个学生的信息。,#includestruct studentint num;char name20;char sex;int score;stu1,stu2;int main()printf(D
6、ata1:);scanf(%d%s%c%d,8.2.3 结构体变量的定义及使用,3.结构体变量的初始化:定义结构体变量时对其成员赋初值。初始化的一般形式struct 结构体名 结构体变量=初始化数据;,例如:,说明:“”中的初始化数据用逗号“,”分隔。初始化数据的个数与结构体成员的个数应相同,它们是按成员的先后顺序一一对应赋值的。每个初始化数据必须符合与其对应的成员的数据类型。,struct studentint num;char name20;char sex;int score;stu=9901,liujia,M,87;,8.3 结构体数组,8.3.1 结构体数组的定义及元素引用 8.3.
7、2 结构体数组的初始化8.3.3 利用结构体数组管理学生信息,8.3.1 结构体数组的定义及元素引用,数组元素是结构体类型的数组,称为结构体数组。定义方法与其他结构体变量的定义方法相同。先定义结构体类型,然后用结构体类型定义数组变量。例如:struct student information100;定义结构体类型的同时,定义数组变量。定义无类型名的结构体数组变量。例如:struct int year;int month;int day;date110,date210;引用结构体数组成员的一般格式结构体数组名下标.成员名information20.score=91;,例如:struct stud
8、ent int year;int month;int day;date110,date210;,8.3.2结构体数组的初始化,结构体数组的初始化例如:struct student info3=9901,liujia,M,87,9902,wangkai,M,89,9903,xiaohua,F,81;,8.3.3 利用结构体数组管理学生信息,例8-3 按照表8-1的数据,输入一个班级的学生信息,并进行以下处理:把学习成绩在85以上的学生找出来,并输出这部分学生的姓名和成绩。分别统计男生和女生人数。分析 定义一个结构体类型,并用它定义一个存储学生信息的结构体数组;向结构体数组中输入学生数据;统计,并
9、输出结果。,8.3.3 利用结构体数组管理学生信息,/*program e8-3.c*/#include#define N 5 struct studentint num;char name20;char sex;int score;,int main()struct student stuN;int i,count_m=0,count_f=0;printf(Input Data:n);for(i=0;i85)printf(%s,%dn,stui.name,stui.score);if(stui.sex=M|stui.sex=m)count_m+;else count_f+;printf(Bo
10、ys=%d,Girls=%dn,count_m,count_f);return 0;,8.4 结构体指针变量,指向结构体数据的指针变量,称为结构体指针变量。与其他类型的指针一样,结构体指针变量既可以指向单一的结构体变量,也可以指向结构体数组变量,结构体指针还可以作函数的参数。,8.4 结构体指针变量,8.4.1 结构体指针变量的定义及使用8.4.2 结构体指针作函数的参数,8.4.1 结构体指针变量的定义及使用,定义结构体指针变量的一般形式:struct 结构体名*结构体指针变量名;例如:struct student*p,*q;struct student stud1,info10;p=,成员
11、引用std1.num与p-num等价info1.num与q1-num等价,8.4.1 结构体指针变量的定义及使用,int main()struct student stu,*p;p=,例8-4 结构体指针用法示例。/*program e8-4.c*/#include#includestruct studentint num;char name20;char sex;int score;,8.4.1 结构体指针变量的定义及使用,例8-5 指向结构体数组的指针应用示例。#include#includestruct studentint num;char name20;char sex;int sc
12、ore;stu3=9913,xiaoli,F,81,9914,zhanghua,M,82,9915,wangjun,F,88;int main()struct student*p;for(p=stu;pnum,p-name,p-sex,p-score);return 0;,共3组初始化数据,结构体指针变量,int main()void output(struct sudent*,int);output(stu,N);return 0;void output(struct student*p,int n)int i;for(i=0;inum,p-name,p-sex,p-score);retur
13、n;,/*program e8-6.c*/#include#include#define N 3struct student int num;char name20;char sex;int score;stuN=9913,xiaoli,F,81,9914,zhanghua,M,82,9915,wangjun,F,88;,结构体指针,8.4.2 结构体指针作函数的参数,例8-6 结构体指针作函数参数示例。,结构体数组名,8.5 链表概述,8.5.1 使用链表存储学生信息 8.5.2 链表的特点8.5.3 动态内存管理函数8.5.4 定义链表结构,8.5.1 链表的概念,链表是结构体最重要的应用
14、,它是一种非固定长度的数据结构,是一种动态存储技术,它能够根据数据的结构特点和数量使用内存,尤其适用于数据个数可变的数据存储。使用链表存储表中前3个学生数据。,用calloc()申请一段内存M,并把它分成两部分:一部分存储数据;另一部分存储下一个内存段的地址。将一个学生数据存储在M的数据区中。若当前是第一个数据,则将M的首地址保存在指针变量head中;否则将M的首地,保存在上一个内存段中。重复、的过程,直到所有数据存储完毕,在最后一段内存的地址区存储结束标志。,8.5.2 链表的特点,链表中的结点具有完全相同的结构,每一个结点存储一个独立的结构体数据;链表的结点由系统随机分配,它们在内存中的位
15、置可能是相邻的,也可能是不相邻的,结点之间的联系是通过指针域实现的;为了能准确的定位第一个结点,每个链表要有一个表头指针,从第一个结点开始,沿指针链能遍历链表中的所有结点;链表中的结点是在需要时用calloc()申请的,当不再需要时,应有free()函数释放所占用的内存段。一个链表不需要事先说明它要包括的结点数目,在需要存储新的数据时,就可增加结点,需要删除数据时,就减少结点,链表结点是动态变化的。,8.5.3 动态内存管理函数,动态分配内存 按需分配内存,申请获得制。C语言通过动态内存管理函数,实现动态内存管理。链表每一个结点的建立和删除过程,都需要使用动态内存管理函数。,8.5.3 动态内
16、存管理函数,1malloc()函数函数原型void*malloc(unsigned int size);功能分配一块长度为size字节的连续空间,并将该空间的首地址作为函数的返回值。如果函数没有成功执行,返回值为空指针(NULL或0)。由于返回的指针的基类型为void,应该通过显式类型转换后才能存入其他基类型的指针变量中,否则会有警告提示。例如:int*p;p=(int*)malloc(sizeof(int);,8.5.3 动态内存管理函数,2free()函数函数原型void free(void*block);功能释放以前分配给指针变量block的动态空间,但指针变量block不会自动变成空指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 程序设计
![提示](https://www.desk33.com/images/bang_tan.gif)
链接地址:https://www.desk33.com/p-756123.html