资源描述:
《第10章-结构体与共用体ppt课件(全)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
第10章结构体与共用体第10章_结构体与共用体ppt课件(全)
1第10章结构体与共用体10.1结构体类型的定义10.2结构体类型变量10.3结构体数组10.4结构体和指针10.5结构体和函数10.6链表10.7共用体10.8枚举10.9用typedef定义类型第10章_结构体与共用体ppt课件(全)
2numnamesexageScoreadrr041000LiPingM1878Beijing041001LiuYiF2088Jilin041002YaoLiM1990Beijing第10章_结构体与共用体ppt课件(全)
310.1结构体类型的定义一般形式:struct结构体名{结构体成员表};structstudent{intnumber;charname[20];charsex;intage;floatscore;charaddr[30];};注意:(1)定义了一种类型,不是变量。(2)成员可以是任意类型,(3)最后的分号“;”不能省略。(4)可以嵌套定义,如:numnamesexageScoreadrr041000LiPingM1878Beijing041001LiuYiF2088Jilin041002YaoLiM1990Beijing第10章_结构体与共用体ppt课件(全)
4structdate{intyear;intmonth;intday;};structstu{longintnumber;charname[20];charsex;structdatebirthday;floatscore[3];charaddress[30];};第10章_结构体与共用体ppt课件(全)
510.2结构体类型变量10.2.1结构体类型变量的定义1先定义类型,再定义变量。struct结构体名变量名等;2.在定义结构体类型的同时定义变量struct结构体名{成员表}变量名表列;3.直接定义结构体类型变量struct{成员表}变量名表列;score[3]numname[20]sexbirthdayaddr[30]s1地址如:structstus1,s2;例如:structst{intnum;charname[20];floatscore;}s1,s2;例如:struct{intnum;charname[20];floatscore;}s1,s2;第10章_结构体与共用体ppt课件(全)
610.2.2结构体变量的引用结构体变量名.成员名例如:structdate{intyear;intmonth;intday;}structexample{intnum;charname[20];structdatebir;}s1,s2;各成员的引用形式如下:s1.num=101;s2.num=s1.num+1;strcpy(s1.name,”wang”);s1.bir.year=1985;注意:结构体变量的初始化结构体类型结构体变量名={初始值表};例如:structstudent{charname[10];floatscore[3];}stu={“wang_li”,81,77,96};第10章_结构体与共用体ppt课件(全)
7【例10.1】输入某学生的姓名、年龄和5门功课成绩,计算平均成绩并输出。程序运行情况:wang_li21↙8277916885↙wang_li2182.077.091.068.085.0average=80.6第10章_结构体与共用体ppt课件(全)
810.3结构体数组10.3.1结构体数组的定义与初始化1.结构体数组的定义例如:structstudent{intnum;charname[20];charsex;intage;floatscore[3];};structstudentstu[10];2.结构体数组的初始化structstudent{intnum;charname[20];charsex;intage;floatscore[3];}stu[2]={{1101,”wangli”,’M”,21,75,82,94},{1102,”liping”,’F’,20,82,79,90}};注意:定义数组stu时,数组长度可以不指定,如:stu[]={{......},{......}};第10章_结构体与共用体ppt课件(全)
910.3.2结构体数组的引用下面通过一个例子来说明结构体数组的引用。【例10.2】输入3个复数的实部和虚部放在一个结构体数组中,根据复数模由大到小顺序对数组进行排序并输出。(注:复数的模=sqrt(实部*实部+虚部*虚部))第10章_结构体与共用体ppt课件(全)
10运行结果:32↙11↙54↙5.00+4.00i3.00+2.00i1.00+1.00i第10章_结构体与共用体ppt课件(全)
1110.4结构体和指针1.结构体指针变量的定义例如:structstudent{intnum;charname[15];floatscore[3];}stu[10],x,*p;p=&x;2.结构体指针变量的引用例如:引用结构体变量x的成员有以下3种方法:①x.成员名,如:x.num②(*p).成员名,如:(*p).num③p->成员名,如:p->num第10章_结构体与共用体ppt课件(全)
1210.5结构体和函数10.5.1结构体作函数参数1.结构体变量作函数参数【例10.4】输入两个复数,比较这两个复数模是否相等。#include#includestructcomp{floatx,y;floatm;};floatcompare(structcompa,structcompb){a.m=sqrt(a.x*a.x+a.y*a.y);b.m=sqrt(b.x*b.x+b.y*b.y);return(a.m-b.m);}voidmain(){structcompa,b;scanf("%f%f",&a.x,&a.y);scanf("%f%f",&b.x,&b.y);if(compare(a,b)==0)printf("Equal
13");elseprintf("Unequal
14");}程序运行:12↙21↙Equal第10章_结构体与共用体ppt课件(全)
152.结构体指针作函数参数【例10.5】编写按复数模从小到大排序函数。第10章_结构体与共用体ppt课件(全)
1610.5.2返回结构体的函数1.返回结构体数据的函数函数可以带回一个结构体类型的数据给主调函数。【例10.6】输入一批复数,查找并输出模最大的复数。编写函数完成查找功能。第10章_结构体与共用体ppt课件(全)
17#defineN5#include#includestructcomp{floatx,y;floatm;};structcompfind(structcompp[],intn){inti,k=0;floatt=p[0].m;for(i=1;i18",max.x,max.y);}程序运行:11↙13↙3-2↙5-3↙79↙max=7.0+9.0i第10章_结构体与共用体ppt课件(全)
192.返回结构体指针的函数#defineN5#include#includestructcomp{floatx,y;floatm;};structcomp*find(structcomp*p,intn){inti,k=0;floatt=p[0].m;for(i=1;im){t=(p+i)->m;k=i;}return(p+k);}voidmain(){structcompa[N],*max;inti;for(i=0;i20",max->x,max->y);}程序运行:11↙13↙3-2↙5-3↙79↙max=7.0+9.0i第10章_结构体与共用体ppt课件(全)
2110.6链表(简介)10.6.1简单链表head张三李四王五孙六NULL……structstudent{charname[10];floatscore;structstudent*next;};第10章_结构体与共用体ppt课件(全)
2210.6.2动态链表分配库函数1.malloc函数函数原型:void*malloc(unsignedintsize);使用方法:例如:char*x;x=(char*)malloc(10);第10章_结构体与共用体ppt课件(全)
232.calloc函数函数原型:void*calloc(unsignedintn,unsignedintsize);使用方法:例如:float*x;x=(float*)calloc(10,4);第10章_结构体与共用体ppt课件(全)
243.free函数函数原型:voidfree(void*p);使用方式:例如:float*x;x=(float*)calloc(10,4);……free(x);第10章_结构体与共用体ppt课件(全)
259.6.3单向链表的基本操作建立链表遍历链表将节点插入到链表删除链表第10章_结构体与共用体ppt课件(全)
26例:有以下结构体说明和变量定义,如图所示,structnode{intdata;structnode*next;}*p,*q,*r;指针p、q、r分别指向此链表中的三个连续结点。现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的语句是A)p->next=q->next;B)p->next=p->next->next;C)p->next=r;D)p=q->next;第10章_结构体与共用体ppt课件(全)
2710.7共用体1.共用体变量的定义union共用体名{共用体成员表};(1)先定义共用体类型,再定义共用体变量例如:uniondata{inti;charch;floatf;};uniondataa,b,c;第10章_结构体与共用体ppt课件(全)
28(2)在定义公用体类型的同时定义变量例如:uniondata{inti;charch;floatf;}a,b,c;(3)不定义共用体类型名,直接定义变量例如:union{inti;charch;floatf;}a,b,c;第10章_结构体与共用体ppt课件(全)
292.共用体变量的引用共用体变量的引用方式与结构体变量相同,可以使用以下3种形式之一:(1)共用体变量名.成员名。(2)指针变量名->成员名。(3)(*指针变量名).成员名。例如,对于前面所定义的共用体变量a,用以下赋值语句:a.i=1;a.ch=’$’;a.f=1.5;第10章_结构体与共用体ppt课件(全)
3010.8枚举如果一个变量的值只有几种可能的值,可以定义为枚举类型。所谓“枚举(enumeration)”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。1.枚举类型的定义枚举类型定义的一般形式为:enum枚举名{元素名1,元素名2,……,元素名n};其中,enum为关键字;枚举名是枚举类型的名字,用标识符表示;元素名1,……,元素名n是枚举元素或枚举常量,用标识符表示。第10章_结构体与共用体ppt课件(全)
3110.8枚举2.枚举变量的定义及其引用枚举变量定义的一般形式为:enum枚举名枚举变量表;例如:enumweekworkday,week_end;定义了两个枚举变量workday和week_end。也可在定义类型的同时定义变量,如:enumweek{sun,mon,tue,wed,thu,fri,sat}workday,week_end;第10章_结构体与共用体ppt课件(全)
3210.9用typedef定义类型格式:typedef已定义的类型名新的类型名;其中typedef是关键字。例如:typedefintINTEGER;typedeffloatREAL;typedefchar*PSTR;第10章_结构体与共用体ppt课件(全)
33使用typedef可以将复杂类型定义成简单类型例如可以用下面的形式定义结构体类型:typedefstruct{intyear;intmonth;intday;}DATE;新的类型名已定义的类型名第10章_结构体与共用体ppt课件(全)