欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    结构体与共同体.ppt

    • 资源ID:6056592       资源大小:242.63KB        全文页数:44页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    结构体与共同体.ppt

    ,第9章 结构体与共同体,9.1 结构体9.2 结构体数组9.4 共用体,9.1 结构体,确定该类型数据的表示形式、取值范围、存储结构及其允许参加的运算。在程序中每个变量在使用前要确定其类型,在前面所定义的类型都是标准类型。在前面介绍的内容均为系统定义类型,用户只要按要求用这些类型说明变量即可。,类型的作用,例如:int x;float y;char a30;,这些基本类型只能解决简单的问题,而实际应用中的类型是千变万化的。,简单类型(整、实、字)的变量是独立的,变量之间无内在的联系;数组类型虽能同时存放多个数据,但必须是同类型的。C允许用户按需求自己定义类型。,例如:在计算机等级考试管理系统中,若每个考生 都有如下信息:,考号:长整型姓名:字符串性别:字符年龄:无符号整型报考等级:字符串成绩:实型,数据分属不同的类型,显然不能采用前面已介绍过的类型来处理。C语言提供了解决这类问题的类型结构体类型。,struct student1 int num;char name20;char class10;char sex;float score;,struct student2 int num;char name20;char class10;date birth;,struct date short year;short month;short day;,结构类型的定义,struct student1 stu1,stu2,方法1:,方法2:,struct student2 int num;char name20;char class10;date birth;stu1,stu2,在VC中若文件名*.cpp,用结构类型说明变量时可省略struct。,结构类型变量的定义,1.由于结构类型是一个复合类型,其由多个成员组成,因此不能访问结构体变量(同数组),只能按如下方法访问变量的成员。变量名.成员名 变量名.一级成员.二级成员(嵌套时),结构类型变量的访问,struct student1 stu1=2001802,李,计011,女,85.2;struct student2 stu2=2001802,李,计011,女,12,3,1986,85.2;,scanf(%d,stu1.num);gets(stu2.name);stu1.sex=getchar();stu1.birth.day=12;printf(“%d”,stu1.birth.day);puts(stu2.name),2.对成员,可根据其类型进行相应的运算。,3.由于结构型变量的成员多,C允许两个同 类型的结构变量可互相整体赋值。,例如:struct s int no;float score;stu1,stu2=200123,76.5;stu1=stu2;,4.结构体变量中的各成员在内存中占一片连续的单元,其长度为:各成员所占单元之和,5.不能在定义类型时给成员赋值。,struct stu long num=97031;char name20=li ming;char sex=m;student;,错,不能对类型赋值!,可用结构类型定义指针。即存放结构对象的首地址。,例如:struct student int num;char name20;char sex;float score;,struct student x,*p;p=,由于结构类型变量占用连续单元,故p存放num成员的首地址,指向结构体的指针,结构型变量.成员名 结构型指针成员名,访问成员时,有两种表示:,见P.198 例9.3,结构体变量作为函数参数,因为结构体变量中的每个成员都被分配了存储单元,故当参数是结构体变量时,采用值传递方式,将实参的每个成员对应传递给形参成员。见P.200 例9.4,9.5,9.2 结构体数组,单个结构型变量没有实际的意义,可用简单变量来完成工作。仅当结构体与数组相结合时,才能解决复杂问题,弥补数组的缺点。,用结构类型定义数组。即每个数组元素是结构类型。见P.202-203,结构体数组的定义,stu1=97001;错误 stu1.num=97001;正确,1.可引用数组元素的成员,不能引用数组元素。因为每 个数组元素是结构类型。,2.同一结构体类型变量及数组元素之间可整体赋值。,struct student s1,s10;s1=s2;s1=s0;正确,结构体数组的访问,struct student int num;char name20;char class10;char sex;float score4;void main()struct student stu3;int j;,例如:输入/出3个学生的信息,每个学生的信息如下:学号,姓名,班级,性别,4门成绩。,for(j=0;j3;j+)scanf(“%d”,输出同上。,例程9-1:,某单位有3人参加04年计算机等级考试。现需将每名考生的准考证号、姓名、性别、报考级别和成绩录入计算机,并统计平均分和及格率。,例程9-02:利用指针访问结构型数组。,9.3 链 表,一、链表的概述:,将数组与结构配合起来使用,可以解决复杂的数据结构,但数组仍需静态定义。,虽然可利用malloc函数动态分配存储单元,但这些动态分配的单元地址不连续,或只能按数组的形式分配单元,仍然不是完全动态分配。,C程序提供了链表类型来解决上述矛盾。,1、什么是链表?,一种动态分配的数据结构。即用指针变量和结构变量将非连续的数据块连成一个整体的一种数据结构。,例如:,A,B,C,上述三个变量间没有任何联系,若希望象数组那样,借助于一个变量的首地址,就能访问到其他变量。,将B的地址存放到A中,将C的地址存放到B中,将A的地址保存,这样就可以通过A变量找到其他变量。,只能按如下方法处理:,即每个变量必须是结构类型,至少有两个成员:一个用来存放本变量的数据,另一个存放某变量的地址。这样只要知道第一个结构变量的地址,就能通过该变量的地址成员中的地址找到某变量。,链表:将若干数据项按一定的原则连接起来的表,表中由若干元素组成,每个元素称为接点。,&stu2,78,0001,&stu3,67,0002,NULL,80,0003,&stu1,head,stu1,stu2,stu3,例如:,借助于链表,可将那些物理上无序的单元,在逻辑上变得有序,从而达到利用动态数据结构访问多个单元的目的。,1)可动态地分配和释放存储空间。,2、链表的特点:,3)链表中需设置一个指向第一个结点的头指 针,且最后一个结点设置为NULL。,2)只能通过前一个接点才能找到下一个结点,即只能顺序访问结点,不能象数组 那样随 机访问。,头指针很重要,它代表链表的首地址,故不要轻易地改变。,3、链表的分类:,单链表、环链表、双链表,单链表、环链表、双链表,二、链表的编程:,步骤:1)定义3个结构体指针 head:保存链表首结点地址,p:保存链表当前尾结点地址,pnew:新结点地址。,1.链表的建立和输出:,2)给 3个指针赋初值,建立第一个结点:head=NULL;pnew=p=(struct stu*)malloc(LEN);并给首结点各域赋值。,3)在循环中:1)利用malloc函数,产生动态单元(pnew)。2)给动态单元pnew赋值。3)将动态单元pnew挂到链表的尾部。,#define LEN sizeof(STU)struct STU long num;float score;STU next;,同时定义三个指向这种类型的指针变量head,pnew,p.,例程:写一个函数,建立5名学生数据的单向链表,每一个学生的数据块(结点)定义如下:,STU creat()/赋初值 STU head,p,pnew,int n=0;head=NULL;pnew=p=(STU)malloc(LEN);scanf(%d%f,建立链表,pnew=(STU)malloc(LEN);scanf(%ld,%f,pnext=NULL;/给尾指针赋空 return(head);,while(pnewnum!=0)n+;if(n=1)head=pnew;/将结点挂到表尾 else pnext=pnew;,p=pnew;/使hear指向当前表尾,void print(STU head)STU p;p=head;if(p=NULL)printf(“Null List!”);do printf(%ld%5.1f n,pnum,pscore);p=pnext;while(p!=NULL);,输出链表,例如:,2、链表的删除和插入,链表的删除:,删除结点操作:若用2个指针操作 p.next=p1.next 若用1个指针操作,一般给出某一条件,当某一条件成立时,则删除该结点:,STU del(STU head,long num)STU p1,p;if(head=NULL)printf(n list null!=n“);return(head);,1)表为空时,无任何删除2)当第一个结点被删除时,修改表头3)当最后一个结点不满足条件时,返回。,p1=head;while(num!=p1num 寻找删除点,if(num=p1num)if(p1=head)head=p1next;else pnext=p1next;printf(delete:%ld n,num);n;else printf(%ld not been found!n,num);,一般链表中结点的关键数据按顺序输入,待插入结点的关键数据与链表中的关键数据一一比较,插入适当的位置。,链表的插入,head,例如:,插入操作:new.next=p.next;p.next=new;,步骤:1)定义3个指针new(指向待插入结点),p1(当前待操作结点),p(p1之前的结点),并赋初值。,2)若链表为空,则插入到表头,作为第一个结点。,3)若链表不为空,寻找插入点。a.若插入到第一个结点之前,则改变头指针的值。b.若插入在表中或表尾,则执行相应的插入操作。,算法:,STU insert(STU*head,STU*new)待插入的结点可在函 STU*p1,*p;数中输入 p1=head;if(head=NULL)若为空表,将结点挂 head=new;newnext=NULL;在头结点 else while(newnum p1num)寻找插入点,if(newnum=p1num)if(head=p1)head=new;插入在表头 else pnext=new;插入在表中 newnext=p1;else p1next=new;newnext=NULL;插入在表尾 n+;return(head);9-4.c 9-5.c,9.4 共有体,二、共用体数据类型的特点,几个不同类型的数据共用同一个存储单元。共用体变量所占内存长度=最长成员的长度,各成员轮流使用一个单元,所以共同体变量及其各成员地址相同。每一瞬间只能存放一个成员,共用体中起作用的是最后一次存入的成员。,一、共用体类型定义,把结构体类型中的关键字struct换成union即可。,例如:struct memb,float v;,int n;,char c;,stag;,stag占内存7个字节的空间,union memb,float v;,int n;,char c;,ustag;,utag分配 4字节,共用体类型变量每次只能存放一个成员的值。,三、共用体类型变量的引用,(共用体类型变量名).成员名,1、共用体类型变量的访问同结构体类型变量。2、不能对共同体变量初始化。union int i;char ch;x=6,A 错误,例程#include,union memb,float v;,int n;,char c;,main(),union memb utag;,utag.v=36.7,utag.c=T,utag.n=18,printf(%5.1fn%dn%cn,utag.v,utag.n,utag.c);,例程9-3:某单位有3名职工参加计算机办公应用技能考试。设每个人的数据包括考号、姓名、年龄、和成绩。单位规定年龄为25岁以下的职工进行笔试,成绩为百分制,60分以上为及格。而25岁以上的职工进行操作考试,考试成绩为A、B、C、D,C级以上为及格。请统计考试及格的人数,并输出每位考生考试的成绩。,

    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开