C语言程序设计第8章结构体程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言程序设计第8章结构体程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 结构 程序设计 课件
- 资源描述:
-
1、 C语言程序设计(第3版)张磊编著,2019年10月清华大学出版社出版。该教材面向程序设计初学者编写,适合将C语言作为第一门程序设计语言的高校学生。该教材理论教学和实验教学合二为一,在每章之后均设有实验指导。实验指导分为基础实验和综合实验两部分。基础实验紧密结合教材中的例题程序设置,以“理解验证完善扩充提高”为实验教学线索,重在巩固课堂教学知识,提高调试程序及完善程序的能力;综合实验以算法设计和程序实现为重点,训练运用所学知识解决实际问题的能力。该教材同时配有程序资源和试题库。Email:mail16300163 C C语言程序设计(第语言程序设计(第3 3版)版)张张 磊磊 编著编著 21
2、21世纪高等学校规划教材世纪高等学校规划教材 清华大学出版社清华大学出版社u8.1 结构体数据概述 u8.2 结构体类型和结构体变量u8.3 结构体数组 u8.4 结构体指针变量u8.5 使用动态链表存储数据u8.6 链表的基本操作u8.7 结构体应用举例结构体数据是由多个数据项组合而成的数据,如表8-1所示的学生信息表,当把每一行视为一个完整数据时,该数据就是一个结构体数据。为了有效地处理这样一类组合数据,C语言提供了“结构体”技术,它可以把多个数据项组合起来,作为一个数据整体进行处理。学号姓名性别成绩9901liujiaM879902wangkaiM899903xiaohuaF819904
3、zhangliF829905wangfengM88u8.2.1 使用结构体变量存储学生信息 u8.2.2 定义结构体数据类型 u8.2.3 结构体变量的定义及使用8-1 利用结构体变量存储表8-1中第1行的学生信息,并输出其姓名和成绩。#includevoid main()printf(Name:%sn,stu.name);printf(Score:%dn,stu.score);l定义结构体类型的一般格式说明:“结构体名”是用户定义的结构体的名字,在以后定义结构体变量时,使用该名字进行类型标识。“成员表”是对结构体数据中每一个数据项的变量说明,其格式与说明一个变量的一般格式相同:“struct
4、”是关键字,”是结构体类型标识符,在类型定义和类型使用时“struct”都不能省略。结构体名称可以省略,此时定义的结构体称为无名结构体。l学生组合数据的结构体类型定义:学生组合数据的结构体类型定义:struct studentint num;char name20;char sex;int score;学号学号姓名姓名性别性别成绩成绩9901liujiaM879902wangkaiM899903xiaohuaF819904zhangliF829905wangfengM88 先定义结构体类型,再定义结构体变量。l一般格式如:student1,student2;在定义结构体类型的同时定义结构体变量
5、。l一般格式例如:struct student int num;char name20;char sex;int score;student1,student2;不定义结构体类型名,直接定义结构体类型变量。l一般格式;例如:struct int num;char name20;char sex;int score;student1,student2;l引用结构体成员的一般格式例如:student1.age 输入两个学生的信息,然后输出学习成绩高的学生的姓名和成绩信息。若成绩相同时,只输出第1个学生的信息。#includevoid main()printf(Data1:);scanf(%d%s%
6、c%d,&stu1.num,stu1.name,&stu1.sex,&stu1.score);printf(Data2:);scanf(%d%s%c%d,&stu2.num,stu2.name,&stu2.sex,&stu2.score);if(stu1.score=stu2.score)printf(%s,%dn,stu1.name,stu1.score);elseprintf(%s,%dn,stu2.name,stu2.score);stu.num9901intstu.nameliujiacharstu.sexMcharstu.score87intl8.3.1 结构体数组概述l8.3.2
7、结构体数组的初始化l8.3.3 利用结构体数组管理学生信息数组元素是结构体类型的数组,称为结构体数组。定义方法与其他结构体变量的定义方法相同。先定义结构体类型,然后用结构体类型定义数组变量。例如:struct student information100;定义结构体类型的同时,定义数组变量。定义无类型名的结构体数组变量。例如:l引用结构体数组成员的一般格式结构体数组名下标.成员名information20.score=91;例如:studentl 结构体数组的初始化例如:struct student info3=9901,liujia,M,87,9902,wangkai,M,89,9903,x
8、iaohua,F,81;按照表8-1的数据,输入一个班级的学生信息,并进行如下处理:把学习成绩在85以上的学生找出来,并输出这部分学生的姓名和成绩。分别统计男生和女生人数。l分析 定义一个结构体类型,并用它定义一个存储学生信息的结构体数组;向结构体数组中输入学生数据;统计,并输出结果。/*program e8-3.c*/#include#define N 5 struct studentint num;char name20;char sex;int score;void main()struct student stuN;int i,count_m=0,count_f=0;printf(In
9、put Data:n);for(i=0;iN;i+)scanf(%d%s%c%d,&stui.num,stui.name,&stui.sex,&stui.score);printf(Result: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(Boys=%d,Girls=%dn,count_m,count_f);l指向结构体变量的指针变量,简称为结构体指针变量。与其他类型的指针一样,结构体指针变量既可以指向单一的结构体变量,也可以指
10、向结构体数组变量,结构体指针还可以作函数的参数。l8.4.1 结构体指针变量的定义及使用l8.4.2 结构体指针作函数的参数l 定义结构体指针变量的一般形式:struct 结构体名*结构体指针变量名;例如:struct student*p,*q;struct student stud1,info10;p=&stud1;q=info;p p stud1stud1q q infoinfon成员引用std1.num与p-num等价info1.num与q1-num等价void main()struct student stu,*p;p=&stu;p-num=9911;strcpy(p-name,cha
11、ngjiang);p-sex=F;p-score=91;printf(Num:%dnName:%sn,p-num,p-name);printf(Sex:%cnScore:%dn,p-sex,p-score);结构体指针用法示例。结构体指针用法示例。/*program e8-4.c*/#include#includestruct student int num;char name20;char sex;int score;/*program e9-4.c*/#include#includestruct student int num;char name20;char sex;int score;
12、stu3=9913,xiaoli,F,81,9914,zhanghua,M,82,9915,wangjun,F,88;void main()struct student*p;printf(%d%20s%3c%4dn,/*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;l8.5.1 链表的概念l8.5.2 链表的特点l8.5.3 动态内
13、存管理函数l8.5.4 定义链表结构是结构体最重要的应用,它是一种非固定长度的数据结构,是一种动态存储技术,它能够根据数据的结构特点和数量使用内存,尤其适用于数据个数可变的数据存储。l使用链表存储表中前3个学生数据。学号姓名性别成绩9901liujiaM879902wangkaiM899903xiaohuaF819904zhangliF829905wangfengM88用calloc()申请一段内存M,并把它分成两部分:一部分存储数据;另一部分存储下一个内存段的地址。将一个学生数据存储在M的数据区中。若当前是第一个数据,则将M的首地址保存在指针变量head中;否则将M的首地保存在上一个内存段中
14、。重复、的过程,直到所有数据存储完毕,在最后一段内存的地址区存储结束标志。链表中的结点具有完全相同的结构,每一个结点存储一个独立的结构体数据;链表的结点由系统随机分配,它们在内存中的位置可能是相邻的,也可能是不相邻的,结点之间的联系是通过指针域实现的;为了能准确的定位第一个结点,每个链表要有一个表头指针,从第一个结点开始,沿指针链能遍历链表中的所有结点;链表中的结点是在需要时用calloc()申请的,当不再需要时,应有free()函数释放所占用的内存段。一个链表不需要事先说明它要包括的结点数目,在需要存储新的数据时,就可增加结点,需要删除数据时,就减少结点,链表结点是动态变化的。l要定义一个链
展开阅读全文