构造数据类型.ppt

上传人:仙人指路1688 文档编号:2334638 上传时间:2023-02-12 格式:PPT 页数:42 大小:147KB
返回 下载 相关 举报
构造数据类型.ppt_第1页
第1页 / 共42页
构造数据类型.ppt_第2页
第2页 / 共42页
构造数据类型.ppt_第3页
第3页 / 共42页
构造数据类型.ppt_第4页
第4页 / 共42页
构造数据类型.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《构造数据类型.ppt》由会员分享,可在线阅读,更多相关《构造数据类型.ppt(42页珍藏版)》请在三一办公上搜索。

1、 已了解的数据类型:,整型,浮点型,字符型,数组,简单数据类型,用户定义的数据类型,特点:所有的元素都是同一种类型,存在的问题:难以处理较复杂的数据,如:建立一份学生档案,对每一个学生至少需要以下一些信息,学号(unsigned num)姓名(char name20)性别(char sex)年龄(int age)成绩(float score)地址(char addr30),9.1.1 结构体的类型定义,C程序可将上述数据的集合定义为一种结构体类型:,struct student unsigned num;char name20;char sex;int age;float score;char

2、 addr30;,上述定义中:struct 关键词(保留字),表示定义一种结构体类型。student 结构体名,相当于类型名(int,float等),其一般形式:struct 结构体名 成员表列;成员表列:类型标识符 成员名,以上仅说明了定义一种类型的方法,尚未定义变量。,9.1.2 结构体类型变量的定义,一、先定义结构体类型再定义结构体变量,三种方法:,则 x1,x2为student 型变量,x1,x2可存放student数据。,例:,二、在定义结构体类型的同时定义变量,例:struct student int num;char name20;char sex;int age;char ad

3、dr30;x1,x2;,成员表列 变量名表列;,定义形式 struct 结构体名,三、直接定义结构类型变量,定义形式 struct 成员表列 变量名表列;不出现结构体类型名,如:struct int num;char name20;char sex;int age;char addr30;x1,x2;,1.类型名与变量名是不同的概念,3.每一个成员的作用如同该类型的变量,4.成员名与程序中的变量名可相同但意义不同,几点说明:,2.允许成员名为另一个已定义的结构型变量,struct date int month;int day;int year;,struct student int num;c

4、har name20;char sex;int age;struct date birthday;char addr30;x1,x2;,结构体的嵌套定义,9.1.3 结构体变量的初始化,struct student x1=8906,Li Ming,M,85.5;,一、先定义结构,在定义结构变量时对每个成员赋初值,如:struct student unsigned No;char name20;char sex;float score;;,若 x1 的起始地址为2000,则 x1 在内存中占有的存储单元为:,共用27个字节的连续单元,struct exp int a=1234;float b=5

5、6.7;char yn8=test;x;,三、结构定义与变量定义及初始化合二为一:,struct exp int a;float b;char yn8;x=1234,56.7,test;,但不能这样写:,9.1.4 结构体变量成员的引用,如:x1为struct student型变量,则 x1.num:表示x1的学号 x1.name:表示x1的名字,访问结构变量实质上是引用其成员,引用格式:结构变量名.成员名 圆点运算符称为成员运算符,它的运算级别是最高的。,有两种运算符可访问结构成员,一、引用结构体变量中成员,注意:,1.只能用变量的成员,不可用结构变量名直接运算。,2.每一个成员的作用与其同

6、类型的简单变量的引用相同。,二、箭头运算符:,struct student char name 10;char sex;int age;float score;char addr20;x1;,struct student p;,例:,则p为结构指针变量,它可用来存放student型变量的地址,令 p=,则 p为x1的首地址.,访问结构成员:,pname 表示x1的姓名;,page 表示x1的年龄;,pname 等价于(*p).name,page 等价于(*p).age,(2)用指针变量(p).成员名(p).num,(3)用指向运算符成员名 p num,(1)结构体变量名.成员名 x1.num,

7、注意:指针变量p必须是结构指针型,,且有p=,struct tempint a;char ch;x1,x2;,main()x1.a=10;x1.ch=a;x2=x1;printf(%d,%c,x2.a,x2.ch);,把结构变量x1的值赋给结构变量x2,如:,三、将结构体变量作为一个整体来使用,可以把一个结构变量赋给另一个同类型的结构变量。,四、关于结构变量的几点说明:,1.结构变量不是一个简单变量,它的值是由许多个基本数据组成。,2.可以把一个结构变量赋给另一个同类型的结构变量。,3.占有的存储单元大小取决于成员的数据类型,struct exp int a;float b;char yn8;

8、,struct exp x=1234,56.7,text,结构变量占用的内存单元为14个字节。,如:,4.不可以将两个结构变量进行关系比较,struct temp int a;char ch;x1,x2;,main()x1.a=10;x2.ch=a;if(x1=x2),5.可通过sizeof()运算符获得结构变量占用的内存大小,struct exp int num;char ch;char name20;float sal;x1;,main()int size;size=sizeof(x1);printf(size=%dn,size);,如:,9.1.5 结构体变量的输入输出,若有 struc

9、t student h;,则:scanf(%s,printf(%s,h);,错误,原因:结构体变量中包含有多个不同类型的数据项。,正确方法:对结构体变量各成员的值进行输入/输出。,如:scanf(%d%s,printf(%d%s,h.num,h.name);,只能对结构变量的成员进行输入/输出,9.2 结构体数组,同数组定义类似:struct student w3;则有三个元素w0,w1,w2。每一个元素为一个结构student型变量。,w0.num:表示w0的学号 w1.name:表示w1的姓名,对w数组也可初始化:struct student w3=8901,Li Ming,;,可省略大小

10、说明,直接用赋初值确定其大小 struct student w=,;,struct person char name20;int count;leader3=Li,0,Zhang,0,Hang,0;,例:编写一个统计得票数的程序,假定有三个侯选人,每一侯选人的数据包括其姓名和得票数。,可定义结构类型person和结构数组leader,#include struct personchar name20;int count;leader3=li,0,zhang,0,hang,0;main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(%s,le

11、ader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+;printf(n);for(i=0;i3;i+)printf(%5s:%dn,leaderi.name,leaderi.count);,Li Li Hang Zhang Zhang Hang Li Hang Zhang Li,输入:,运行情况如下,Li:4 Zhang:3 Hang:3,显示:,9.3 结构体变量与函数,把结构变量的数据传给函数的参数有三种方式:,传递单个成员的值;,传递整个结构;,传递指向结构的指针;,传值,传地址,例.把

12、整个结构传递给参数,#include struct treeint x;char*s;t;void func(struct tree t)t.x=t.x+10;t.s=computer;,main()t.x=6;t.s=minicomputer;func(t);printf(%d,%sn,t.x,t.s);,程序运行结果:6,minicomputer,一种自定义的数据类型,一、共用体数据类型的特点,与结构体类似之处:由不同的数据项组成一个整体。,与结构体不同之处:占用的内存单元不同。,9.4 联合体数据类型,二、共用体类型定义,定义方式与结构体类型完全相同。,把结构体类型中的关键字struct

13、换成union即可。,struct memb float v;int n;char c;stag;,stag占内存7个字节的空间,union memb float v;int n;char c;ustag;,ustag占的内存空间为4个字节,共用体类型变量每次只能存放一个成员的值,例:,三、共用体类型变量的引用,引用方法同结构体变量:,(共用体类型变量名).,共用体类型变量的输入输出同结构体类型变量相同。,#includeunion memb float v;int n;char c;main()union memb utag;utag.c=T;utag.n=18;utag.v=36.7;pr

14、intf(%5.1fn%dn%cn,utag.v,utag.n,utag.c);,运行结果:36.7 13107=,例:,?,想一想:,若改变成员的赋值顺序:,utag.v=36.7utag.n=18utag.c=T,则运行结果为:36.5 84 T,构造类型(数组,结构体,共用体)的定义可以嵌套。,struct privint n;float f;char c;,union publ int ns;float fs;struct priv mud;spe5;,spe为共用体类型数组,每个数组元素所占用的内存单元为:,注意:,四、可对联合体变量进行的操作,(1)同类型联合体变量之间的赋值运算,

15、(2)取某成员的地址,(3)用指向联合体的指针运算符访问联 合体成员,联合体变量中起作用的成员是最后一次存放的成员。,9.5 枚举数据类型,枚举是用标识符表示的整数常量的集合。,枚举类型定义形式:Enum 标识符1,标识符2,标识符n;,枚举型常量的起始值为0。例:enum seasons SPRING,SUMMER,AUTUMN,WINTER;enum seasons SPRING=1,SUMMER,AUTUMN,WINTER;,枚举变量定义的一般形式如下:enum变量名1,变量名2,,变量名n;,/*exam9_6.c 枚举类型的用法*/#include enum monthsJAN=1,

16、FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC;main()enum months month;char*monthName=,January,February,March,April,May,June,July,Auguest,September,October,November,Dcember;for(month=JAN;month=DEC;month+)printf(%2d-%-10sn,month,monthNamemonth);,9.6 类型定义,类型定义:在C语言中允许给已有的数据类型定义一个新的名字。定义形式:typedef数据类型新类型名;,例:typedef int INTEGER;typedef float REAL;INTEGER a,b;等价于int a,b;REAL x;float x;,

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号