资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第10章_结构体与共用体ppt课件(全),*,第10章 结构体与共用体,第10章_结构体与共用体ppt课件(全),第10章 结构体与共用体,10.1 结构体类型的定义,10.2 结构体类型变量,10.3 结构体数组,10.4 结构体和指针,10.5 结构体和函数,10.6 链 表,10.7 共用体,10.8 枚 举,10.9 用typedef定义类型,第10章_结构体与共用体ppt课件(全),num,name,sex,age,Score,adrr,041000,Li Ping,M,18,78,Beijing,041001,Liu Yi,F,20,88,Jilin,041002,Yao Li,M,19,90,Beijing,第10章_结构体与共用体ppt课件(全),10.1结构体类型的定义,一般形式:,struct 结构体名 结构体成员表;,struct,student,int number;,char name20;,char sex;,int age;,float score;,char addr30;,;,注意:,(1)定义了一种类型,不是变量。,(2)成员可以是任意类型,,(3)最后的分号“;”不能省略。,(4)可以嵌套定义,如:,num,name,sex,age,Score,adrr,041000,Li Ping,M,18,78,Beijing,041001,Liu Yi,F,20,88,Jilin,041002,Yao Li,M,19,90,Beijing,第10章_结构体与共用体ppt课件(全),struct date,int year;int month;int day;,struct stu,long int number;,char name20;,char sex;,struct date,birthday;,float score3;,char address30;,;,第10章_结构体与共用体ppt课件(全),10.2 结构体类型变量,10.2.1 结构体类型变量的定义,1 先定义类型,再定义变量。,struct 结构体名 变量名等;,2在定义结构体类型的同时定义变量,struct 结构体名,成员表变量名表列;,3直接定义结构体类型变量,struct,成员表变量名表列;,score3,num,name20,sex,birthday,addr30,s1 地址,如:,struct stu s1,s2;,例如:,struct st,int num;,char name20;,float score;,s1,s2;,例如:,struct,int num;,char name20;,float score;,s1,s2;,第10章_结构体与共用体ppt课件(全),10.2.2 结构体变量的引用,结构体变量名.成员名,例如:,struct date,int year;int month;int day;,struct example,int num;,char name20;,struct date bir;,s1,s2;,各成员的引用形式如下:,s1.num=101;,s2.num=s1.num+1;,strcpy(s1.name,”wang”);,s1.bir.year=1985;,注意:,结构体变量的初始化,结构体类型 结构体变量名=初始值表;,例如:,struct student,char name10;,float score3;,stu,=“wang_li”,81,77,96;,第10章_结构体与共用体ppt课件(全),【例10.1】输入某学生的姓名、年龄和5门功课成绩,计算平均成绩并输出。,程序运行情况:,wang_li 21,82 77 91 68 85,wang_li 21,82.0 77.0 91.0 68.0 85.0 average=80.6,第10章_结构体与共用体ppt课件(全),10.3 结构体数组,10.3.1 结构体数组的定义与初始化,1结构体数组的定义,例如:,struct student,int num;,char name20;,char sex;,int age;,float score3;,;,struct student,stu10;,2结构体数组的初始化,struct student,int num;,char name20;,char sex;,int age;,float score3;,stu2=,1101,”wang,li”,M”,21,75,82,94,1102,”li ping”,F,20,82,79,90,;,注意:,定义数组stu时,数组长度可以不指定,如:,stu=.,.;,第10章_结构体与共用体ppt课件(全),10.3.2 结构体数组的引用,下面通过一个例子来说明结构体数组的引用。,【例10.2】输入3个复数的实部和虚部放在一个结构体数组中,根据复数模,由大到小,顺序对数组进行排序并输出。(注:复数的模=sqrt(实部*实部+虚部*虚部),第10章_结构体与共用体ppt课件(全),运行结果:,3 2,1 1,5 4,5.00+4.00i,3.00+2.00i,1.00+1.00i,第10章_结构体与共用体ppt课件(全),10.4 结构体和指针,1结构体指针变量的定义,例如:,struct student,int num;,char name15;,float score3;,stu10,x,*,p,;,p,=,2结构体指针变量的引用,例如:,引用结构体变量x的成员有以下3种方法:,x.成员名,,如:x.num,(*p).成员名,如:(*p).num,p-成员名,如:p-num,第10章_结构体与共用体ppt课件(全),10,.5 结构体和函数,10.5.1 结构体作函数参数,1结构体变量作函数参数,【例10.4】输入两个复数,比较这两个复数模是否相等。,#include,#include,struct comp,float x,y;,float m;,;,float compare(struct comp a,struct comp b),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);,void main(),struct comp a,b;,scanf(%f%f,scanf(%f%f,if(compare(a,b)=0),printf(Equaln);,else printf(Unequaln);,程序运行:,1 2,2 1,Equal,第10章_结构体与共用体ppt课件(全),2结构体指针作函数参数,【例10.5】编写按复数模从小到大排序函数。,第10章_结构体与共用体ppt课件(全),10.5.2 返回结构体的函数,1返回结构体数据的函数,函数可以带回一个结构体类型的数据给主调函数。,【例10.6】输入一批复数,查找并输出模最大的复数。编写函数完成查找功能。,第10章_结构体与共用体ppt课件(全),#define N 5,#include,#include,struct comp,float x,y;,float m;,;,struct comp find(struct comp p,int n),int i,k=0;,float t=p0.m;,for(i=1;in;i+),if(tpi.m),t=pi.m;k=i;,return pk;,void main(),struct comp aN,max;,int i;,for(i=0;iN;i+),scanf(%f%f,ai.m=sqrt(ai.x*ai.x+ai.y*ai.y);,max=find(a,N);,printf(max=%.1f%+.1fin,max.x,max.y);,程序运行:,1 1,1 3,3 -2,5 -3,7 9,max=7.0+9.0i,第10章_结构体与共用体ppt课件(全),2返回结构体指针的函数,#define N 5,#include,#include,struct comp,float x,y;,float m;,;,struct comp*find(struct comp*p,int n),int i,k=0;,float t=p0.m;,for(i=1;im;,k=i;,return(p+k);,void main(),struct comp aN,*max;,int i;,for(i=0;ix,max-y);,程序运行:,1 1,1 3,3 -2,5 -3,7 9,max=7.0+9.0i,第10章_结构体与共用体ppt课件(全),10.6 链表(简介),10.6.1 简单链表,head,张三,李四,王五,孙六,NULL,struct student,char name10;,float score;,struct student*next;,第10章_结构体与共用体ppt课件(全),10.6.2 动态链表分配库函数,1.malloc函数,函数原型:,void,*,malloc,(unsigned int size),;,使用方法:,例如:,char *x;,x=(char*)malloc(10);,第10章_结构体与共用体ppt课件(全),2.calloc函数,函数原型:,void,*,calloc,(unsigned int n,unsigned int size),;,使用方法:,例如:,float *x;,x=(float*)calloc(10,4);,第10章_结构体与共用体ppt课件(全),3.free函数,函数原型:,void,free,(void*p),;,使用方式:,例如:,float *x;,x=(float*)calloc(10,4);,free(x);,第10章_结构体与共用体ppt课件(全),9.6.3 单向链表的基本操作,建立链表,遍历链表,将节点插入到链表,删除链表,第10章_结构体与共用体ppt课件(全),例:有以下结构体说明和变量定义,如图所示,struct node,int data;struct node*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课件(全),10.7 共用体,1共用体变量的定义,union 共用体名 共用体成员表;,(1)先定义共用体类型,再定义共用体变量,例如:,union data,int i;,char ch;,float f;,;,union data a,b,c;,第10章_结构体与共用体ppt课件(全),(2)在定义公用体类型的同时定义变量,例如:,union data,int i;,char ch;,float f;,a,b,c;,(3)不定义共用体类型名,直接定义变量,例如:,union,int i;,char ch;,float f;,a,b,c;,第10章_结构体与共用体ppt课件(全),2共用体变量的引用,共用体变量的引用方式与结构体变量相同,可以使 用以下3种形式之一:,(1)共用体变量名.成员名。,(2)指针变量名-成员名。,(3)(*指针变量名).成员名。,例如,对于前面所定义的共用体变量a,用以下赋值语句:,a.i=1;a.ch=$;a.f=1.5;,第10章_结构体与共用体ppt课件(全),10.8 枚 举,如果一个变量的值只有几种可能的值,可以定义为枚举类型。所谓“枚举(enumeration)”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。,1枚举类型的定义,枚举类型定义的一般形式为:,enum 枚举名 元素名1,元素名2,元素名n;,其中,enum为关键字;枚举名是枚举类型的名字,用标识符表示;元素名1,元素名n是枚举元素或枚举常量,用标识符表示。,第10章_结构体与共用体ppt课件(全),10.8 枚 举,2枚举变量的定义及其引用,枚举变量定义的一般形式为:,enum 枚举名 枚举变量表;,例如:,enum week workday,week_end;,定义了两个枚举变量workday和week_end。,也可在定义类型的同时定义变量,如:,enum week sun,mon,tue,wed,thu,fri,sat workday,week_end;,第10章_结构体与共用体ppt课件(全),10.9 用typedef定义类型,格式:,typedef,已定义的类型名,新的类型名,;,其中typedef是关键字。,例如:,typedef int INTEGER;,typedef float REAL;,typedef char*PSTR;,第10章_结构体与共用体ppt课件(全),使用typedef可以将复杂类型定义成简单类型,例如可以用下面的形式定义结构体类型:,typedef struct,int year;,int month;,int day;,DATE;,新的类型名,已定义的类型名,第10章_结构体与共用体ppt课件(全),
展开阅读全文