第9章 结构体.ppt

上传人:livefirmly316 文档编号:388674 上传时间:2018-10-12 格式:PPT 页数:33 大小:258.56KB
下载 相关 举报
第9章 结构体.ppt_第1页
第1页 / 共33页
第9章 结构体.ppt_第2页
第2页 / 共33页
第9章 结构体.ppt_第3页
第3页 / 共33页
第9章 结构体.ppt_第4页
第4页 / 共33页
第9章 结构体.ppt_第5页
第5页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第9章 结构体,第9章 结构体,本章主要内容,结构体类型的概念与定义。 结构体变量的定义、初始化及结构成员的引用。 结构体数组的定义及其使用。 结构体类型指针的定义及其使用。 结构体变量作为函数的参数。 返回结构体类型值的函数。 单链表及其应用。,本章学习目标,理解结构体类型的概念及其定义方法。 掌握结构体变量的定义和初始化。 掌握结构体成员的引用方法。 掌握结构体数组的定义和使用。 掌握结构体在函数中的应用。 理解链表的概念及其基本操作。,目录,9.1 引例 9.2 结构体的概念与定义 9.3 结构体变量的定义和引用 9.4 结构体数组 9.5 结构体变量与指针 9.6 结构体与函数 9.7

2、 单链表及其应用 9.8 实例,9.1 引例,引例:假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩。要求输入个学生信息,计算并输出平均分最高的学生信息。,问题1:不能用二维数组,因为每个成员的类型不一致。,问题2:如果定义多个相互独立的一维数组,则难以反映出同一名学生各成员数据之间的内在联系。,内存分布图,解决方案:引入结构体数据类型,9.2 结构体的概念与定义,结构体是一种允许程序员把一些数据分量(结构成员)聚合成一个整体的数据类型。,数组的所有元素的数据类型必须相同,而结构体类型所包含的成员数据类型可以互不相同。,结构体类型的概念,结构体与数组的区别,结构体类型的定义,st

3、ruct 结构体类型名 类型名 成员名1; 类型名 成员名2;类型名 成员名n; ;,struct student char name20;int num;int age; char sex;char addr30; ;,练习9.1,9.2 结构体的概念与定义-嵌套定义,增加一个结构体生日类型,结构体类型嵌套定义,struct date int month;int day;int year; ;,struct student char name20;int num;int age;char sex;struct date birthday;char addr30; ;,练习9.2,9.3 结构

4、体变量的定义和引用-定义,struct student int num;char name10; int computer,english,math; double average; ; struct student s,sa10,*sp;,先定义结构体类型,然后定义结构体变量,struct student int num;char name10;int computer,english,math;double average; s,sa10,*sp;,结构体变量定义,同时定义结构体类型和结构体变量,直接定义结构体变量,struct int num;char name10;int comput

5、er, english, math;double average; s,sa10,*sp;,推荐使用这种形式的定义,9.3 结构体变量的定义和引用-初始化,结构体变量初始化,struct student int num;char name10;int computer, english, math;double average; s=801,“Zhang“,80,89,92;,struct student int num;char name10;int computer,english,math;double average; ; struct student s=801,“Zhang“,80

6、,89,92;,s.num=801; strcpy(s.name,“Zhang“); s.name=“Zhang“ puter=80; s.english=89; s.math=92;,9.3 结构体变量的定义和引用-引用,struct student int num;char name10;int computer,english,math;double average; ; struct student s,t;,结构体变量成员引用,成员如何表示?,结构体变量名.成员名,举例说明,结构体成员赋值,结构体变量赋值,t = s;,9.3 结构体变量的定义和引用-例9.1,例9.1 阅读程序,理

7、解结构体变量的定义和引用,给出运行结果,#include #include struct personchar name12; int age; char sex; float height; float weight;,int main(void) struct person p1=“ZhangSan“,18,M,1.75,70.5,p2,p3; scanf(“%s %d %c %f %f“,p2.name, ,9.3 结构体变量的定义和引用-输入输出,scanf(“%d%s%d%d%d“,结构体变量数据输入,struct student int num;char name10;int co

8、mputer,english,math;double average; ; struct student s;,数据如何输入输出?,结构体变量数据输出,printf(“%d %s %d %d %d“,s.num,s.name, puter,s.english,s.math);,注意:没有&符号,9.3 结构体变量的定义和引用-例9.3分析,例9.3 假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩。输入个学生的成绩信息,计算并输出平均分最高的学生信息。,存储分析,算法设计,定义结构体类型和变量,循环输入每一个学生的信息,计算平均成绩,判断是否是最高分,输出最高分的学生信息,9.3

9、 结构体变量的定义和引用-例9.3程序,例9.3 假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩。输入个学生的成绩信息,计算并输出平均分最高的学生信息。,#include struct studentint num;char name10;int computer,english,math;double average;,int main(void) int i,n;struct student s, max;scanf(“%d“, ,for(i=1;i=n;i+) ,if(i=1) max=s; else if(max.averages.average) max=s;,sca

10、nf(“%d%s%d%d%d“,s.average=(s.math+s.english+puter)/3.0;,练习9.3,9.4 结构体数组,结构体数组定义,结构体类型名 数组名数组长度;,struct student char name20; int age; char sex; float height; float weight; ;,struct student students5;,结构体数组初始化,struct student students5=“Zhao Xiaoli“, 20, M, 1.69, 60.5,“Wang Zhizhi“, 21, M, 1.79, 77.5,“

11、Dong Dapeng“, 20, M, 1.69, 70.0,“Sun Xiaomei“, 19, F, 1.70, 50.5,“Zhang Aiyue“, 18, F, 1.68, 56.6 ;,9.4 结构体数组-例9.4分析,例9.4 编写一个可以统计候选人得票数的程序。设有3个候选人,10人投票,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。,存储分析,算法设计,定义结构体类型、结构体数组并初始化,循环输入每个人投票的候选人姓名,根据姓名增加对应的选票数,循环输出每个候选人的得姓名及其选票数,9.4 结构体数组-例9.4程序,#include #include struc

12、t personchar name20;int count;leader3=“Li“,0,“Zhang“,0,“Wang“,0;,int main(void) int i,j; char name20;return 0; ,for(i=1;i=10;i+) ,for(i=0;i3;i+)printf(“%5s:%dn“,leaderi.name,leaderi.count);,scanf(“%s“,name);,for(j=0;j3;j+)if(strcmp(name,leaderj.name)=0)leaderj.count+;,例9.4 编写一个可以统计候选人得票数的程序。设有3个候选人,

13、10人投票,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。,练习9.4,9.5 结构体变量与指针-结构体变量,struct student int num;char name10;int computer,english,math;double average; ; struct student s;,结构体变量指针的定义,结构体类型名 *结构体指针变量名;,struct student *sp;,sp=,如何间接访问?,成员引用,9.5 结构体变量与指针-结构体数组,struct student int num;char name10;int computer,english,m

14、ath;double average; ; struct student s3;,结构体变量指针的定义,结构体类型名 *结构体指针变量名;,struct student *sp;,sp=s;,如何间接访问?,成员引用,sp+;,9.5 结构体变量与指针-例9.6,例9.6 阅读程序,理解指向结构体数组指针的应用,给出运行结果,#include #include struct studentchar name20;int age;char sex;float height;float weight;,int main(void) int i; struct student students5=

15、“Zhao“,20,M,1.69,60.5, “Wang“,21,M,1.79,77.5, “Dong“,20,M,1.69,70.0, “Sun“,19,F,1.70,50.5, “Zhang“,18,F,1.68,56.6; float avgWeight=0,aveHeight=0; struct student *sp;return 0; ,for(sp=student,i=0;i5;i+,sp+) ,printf(“:%.2f;%.2fn“, avgWeight/5.0, aveHeight/5.0),avgWeight+=sp-weight; aveHeight+=sp-heigh

16、t;,sp,sp,sp,sp,sp,练习9.5,9.6 结构体与函数,9.6.1 结构体变量作为函数参数,回顾函数的传值调用,struct student int num;char name10;int computer,english,math;double average; ; struct student s;,1001,9.6 结构体与函数-例9.7,例9.7 一个复数包括实部和虚部,请定义一个复数结构体struct complex,并调用struct complex complexMulti(struct complex c1, struct complex c2)计算并返回两个复数

17、的乘积。,算法设计,定义结构体类型,定义主函数完成变量定义、输入、调用函数、结果输出,定义子函数计算两个复数的乘积并返回结果,#include struct complexfloat real;float imag;,int main(void) struct complex c1=3,4,c2=5,6;struct complex c3=complexMulti(c1,c2);printf(“Result:%.2f+%.2fin“,c3.real,c3.imag); return 0; ,struct complex complexMulti(struct complex c1, struc

18、t complex c2) struct complex result;result.real=c1.real*c2.real-c1.imag*c2.imag;result.imag=c1.real*c2.imag+c1.imag*c2.real;return result; ,9.6 结构体与函数,9.6.2 结构体指针变量作为函数参数,回顾函数的传地址调用,struct student int num;char name10;int computer,english,math;double average; ; struct student s;,1001,&s,实现间接访问,优点:分配少

19、量空间以及传递少量的数据,9.6 结构体与函数-例9.8,例9.8 输入n个学生的成绩信息,再输入一个学生的学号、课程序号以及成绩,在自定义函数中修改该学生指定课程的成绩。,算法设计,定义结构体类型,定义主函数完成变量定义、输入、调用函数、结果输出,定义子函数完成修改学生指定课程的成绩,#include struct complexint num;char name10;int math,english,computer;double average;,int main(void) ;pos=updateScore(students,n,num,course,score); return 0;

20、 ,int updateScore(struct student *p,int n,int num,int course,int score) int i;for(i=0;inum=num) break;if (course=1) p-math=score;else if(course=2) p-english=score; else p-computer=score;return i; ,p,p,p,p,练习9.6,9.7 单链表及其应用-动态存储分配,25,动态存储分配,int a8;,int n; scanf(“%d”,X ?,无法实现按需分配存储单元,举例说明,p=(int*)mall

21、oc(8*sizeof(int);,p=(int*)calloc(8, sizeof(int);,p=(int*)realloc(80*sizeof(int);,free(p);,9.7 单链表及其应用-例9.10,算法设计,定义结构体类型和指针变量,申请空间,数据输入、数据输出,释放空间,#include #include struct studentint num; char *name; char sex; float score;,int main(void) struct student *sp;printf(“%d %s %c %.2f“,sp-num,sp-name,sp-sex

22、,sp-score);free(sp); return 0; ,sp=(struct student*)malloc(sizeof(struct student);,sp-num=801; sp-name=“Zhang ping“; sp-sex=M; sp-score=62.5;,例9.10 动态分配一块区域,输入输出一个学生数据。,9.7 单链表及其应用-单链表基本概念,27,int a8;,存在问题,存储空间不能进行动态伸缩,插入、删除元素需要移动大量的元素,使用链式存储结构:链表(本教材只介绍单链表),单链表基本概念,结点,头指针,空指针,数据域,指针域,问题,尾 指 针,9.7 单链

23、表及其应用-结点类型定义,结点,数据域,指针域,struct node char ch; struct node *next; ;,递归定义,课堂练习:定义一个结点类型,要求有学生的学号、姓名和成绩成员。,struct studNode int num; char name20; int score;struct studNode *next; ;,9.7 单链表及其应用-建立链表算法设计,29,struct studNodeint num; char name20; int score; struct studNode *next;,学生结点类型定义,struct studNode * Cr

24、eateStuDoc( );,函数首部,算法设计,定义头指针变量和尾指针变量并进行初始化,输入数据,申请空间并赋值,尾部插入(分情况),返回头指针,循环处理,9.7 单链表及其应用-建立链表函数代码,30,struct studNode *createStuDoc( ) struct studNode *head,*tail=NULL,*p=NULL; int num,score,size; char name20; size=sizeof(struct studNode);return head; ,scanf(“%d%s%d“, ,if(head=NULL)head=p; else tai

25、l-next=p; tail=p;,9.7 单链表及其应用-链表遍历算法设计,31,31,struct stud_node * printStuDoc(struct studNode *head );,函数首部,算法设计,定义指针变量,初始化指针变量,输出数据,移动指针变量,循环处理,9.7 单链表及其应用-链表遍历函数代码,void printStuDoc(struct studNode *head) struct studNode*p;,for(p=head; p!=NULL; p=p-next) ,printf(“%dt%st%d n“,ptr-num,ptr-name,ptr-score);,int main(void) struct studNode*head;return 0; ,head = createStuDoc( ); printStuDoc(head);,本章小结,本章主要内容有结构体类型的概念与定义,结构体变量的定义和使用,结构体数组的定义和使用,结构体类型指针变量的定义和使用,结构体变量、结构体指针变量和数组作为函数的参数和返回值,单链表的基本概念及其建立和遍历操作等。 通过本章的学习,使学生掌握定义结构体类型的方法,能够根据需要正确定义和使用结构体变量、结构体数组和结构体指针,能够使用结构体和链表编写较复杂的综合程序。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

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

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1