欢迎来到麦多课文档分享! | 帮助中心 海量文档,免费浏览,给你所需,享你所想!
麦多课文档分享
全部分类
  • 标准规范>
  • 教学课件>
  • 考试资料>
  • 办公文档>
  • 学术论文>
  • 行业资料>
  • 易语言源码>
  • ImageVerifierCode 换一换
    首页 麦多课文档分享 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    第9章 结构体.ppt

    • 资源ID:388674       资源大小:258.56KB        全文页数:33页
    • 资源格式: PPT        下载积分:2000积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    二维码
    微信扫一扫登录
    下载资源需要2000积分(如需开发票,请勿充值!)
    邮箱/手机:
    温馨提示:
    如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如需开发票,请勿充值!如填写123,账号就是123,密码也是123。
    支付方式: 支付宝扫码支付    微信扫码支付   
    验证码:   换一换

    加入VIP,交流精品资源
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第9章 结构体.ppt

    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);,本章小结,本章主要内容有结构体类型的概念与定义,结构体变量的定义和使用,结构体数组的定义和使用,结构体类型指针变量的定义和使用,结构体变量、结构体指针变量和数组作为函数的参数和返回值,单链表的基本概念及其建立和遍历操作等。 通过本章的学习,使学生掌握定义结构体类型的方法,能够根据需要正确定义和使用结构体变量、结构体数组和结构体指针,能够使用结构体和链表编写较复杂的综合程序。,


    注意事项

    本文(第9章 结构体.ppt)为本站会员(livefirmly316)主动上传,麦多课文档分享仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文档分享(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

    收起
    展开