复杂构造数据类型.ppt

上传人:wuy****n92 文档编号:80495257 上传时间:2023-03-23 格式:PPT 页数:28 大小:210KB
返回 下载 相关 举报
复杂构造数据类型.ppt_第1页
第1页 / 共28页
复杂构造数据类型.ppt_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《复杂构造数据类型.ppt》由会员分享,可在线阅读,更多相关《复杂构造数据类型.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第五章第五章 复杂构造数据类型复杂构造数据类型 1第五章第五章 复杂构造数据类型复杂构造数据类型n5.1 结构体结构体n5.2 共用体共用体n5.3 枚举类型枚举类型25.1.1 结构体的引出及使用结构体的引出及使用n每条记录中数据的数据类型不相同每条记录中数据的数据类型不相同学号学号姓名姓名性别性别年龄年龄入学成绩入学成绩所属学院所属学院0501李明李明男男19610信息信息0502张莉张莉女女19595信息信息0503王涛王涛男男20580控制控制学号学号姓名姓名性别性别年龄年龄入学成绩入学成绩所属学院所属学院int numchar name10char sexint ageint sco

2、rechar institute20n如何表示如下的数据信息?如何表示如下的数据信息?n结构体是由一些逻辑相关,但数据类型不同的分结构体是由一些逻辑相关,但数据类型不同的分量组成的一组数据。量组成的一组数据。3n结构体的定义结构体的定义注意不要忘了分号注意不要忘了分号成员表列成员表列struct 结构体类型名结构体类型名 数据类型数据类型 成员名成员名1;1;数据类型数据类型 成员名成员名2;2;:数据类型数据类型 成员名成员名n;n;用户定义用户定义的标识符的标识符n说明:说明:定义了结构体类型,仅仅是定义了数据的定义了结构体类型,仅仅是定义了数据的组织形式,创立了组织形式,创立了一种数据类

3、型一种数据类型,但并不会为这,但并不会为这种结构体类型分配内存空间,只有定义了结构体种结构体类型分配内存空间,只有定义了结构体变量,才会为变量分配空间。变量,才会为变量分配空间。例:例:struct student int num;char name10;char sex;int age;int score;char institute20;4n定义结构体变量的方法定义结构体变量的方法q(1)先定义结构体类型,再定义变量先定义结构体类型,再定义变量 struct student char name10;int age;int s1,s2;struct student st1,st2;结构体结构

4、体 类型定义类型定义结构体结构体 变量定义变量定义n内存中结构体变量占有一片连续的存储单元,其占用的字内存中结构体变量占有一片连续的存储单元,其占用的字节数可用节数可用sizeof 运算符算出:运算符算出:printf(“%dn”,sizeof(struct student);printf(“%dn”,sizeof(st1);n结构体变量结构体变量st1和和st2各自都需要各自都需要16个字节的存储空间个字节的存储空间st1st2nameages1s25n定义结构体变量的方法定义结构体变量的方法q(2)定义结构体类型同时定义变量定义结构体类型同时定义变量 struct student char

5、 name10;int age;int s1,s2;st1,st2;q(3)直接定义结构体变量直接定义结构体变量 struct char name10;int age;int s1,s2;st1,st2;定义结构体变量定义结构体变量注意:这里没有结构体类型名,注意:这里没有结构体类型名,这种方式有时使用并不方便,这种方式有时使用并不方便,因此不建议大家采用因此不建议大家采用6n结构体类型可以嵌套定义结构体类型可以嵌套定义 例例:struct date int year;int month;int day;struct stud char name10;struct date birthday;

6、int s1,s2;或或:struct stud char name10;struct date int year;int month;int day;birthday;int s1,s2;7n结构体变量的引用结构体变量的引用q格式:格式:结构体变量名结构体变量名.成员名成员名struct student char name10;int age;int s1,s2;struct student st1;strcpy(st1.name,“Mary”);st1.age=21;st1.s1=78;st1.s2=86;成员运算符成员运算符8n说明说明q结构体变量通常不能整体使用,不能整体输入、输出,结

7、构体变量通常不能整体使用,不能整体输入、输出,只能对单个成员分别引用。但当结构体变量作为函数参只能对单个成员分别引用。但当结构体变量作为函数参数或赋初值时,可以整体输入;或者两个相同类型的结数或赋初值时,可以整体输入;或者两个相同类型的结构体变量,如果一个已经赋值,可以对另外一个整体赋构体变量,如果一个已经赋值,可以对另外一个整体赋值。值。例:如果例:如果s1已被赋值,则可以:已被赋值,则可以:s2=s1;q如果成员本身又属于一个结构体类型,则这个成员也不如果成员本身又属于一个结构体类型,则这个成员也不能整体赋值,要用若干个成员运算符引用,如前面的能整体赋值,要用若干个成员运算符引用,如前面的

8、birthday成员本身又是成员本身又是date类型的变量,则需:类型的变量,则需:stu1.birthday.month=4;stu1.birthday.day=5;q可以引用结构体变量成员的地址,也可以引用结构体变可以引用结构体变量成员的地址,也可以引用结构体变量的地址,要区分清楚。如:量的地址,要区分清楚。如:printf(“%x”,&stu1.num);printf(“%x”,&stu1);9n结构体变量的初始化结构体变量的初始化struct student char name10;int age;int s1,s2;st1=“Mary”,21,78,86;struct stud ch

9、ar name10;struct date birthday;int s1,s2;struct stud st2=“John”,1980,11,23,89,95 ;struct student char name10;int age;int s1,s2;struct student st1;st1=“Mary”,21,78,86;初始化,正确初始化,正确这是赋值,这是赋值,错误错误C不允许这么做不允许这么做初始化,正确初始化,正确10n结构体变量的输入和输出结构体变量的输入和输出qC语言不允许结构体变量整体进行输入和输出,只语言不允许结构体变量整体进行输入和输出,只能对结构体变量的成员进行输入

10、和输出能对结构体变量的成员进行输入和输出例:例:gets(st1.name);scanf(“%d%d%d”,&st1.birthday.year,&st1.birthday.month,&st1.birthday.day);scanf(“%d%d%d”,&st1.age,&st1.s1,&st1.s2);puts(st1.name);printf(“%4d”,st1.age);printf(“%d.%d.%d”,st1.birthday.year,st1.birthday.month,st1.birthday.day);printf(“%4d%4dn”,st1.s1,st1.s2);115.1

11、.2 结构体数组的引出及使用结构体数组的引出及使用n一个结构体变量只能存放一个学生的信息,对一个结构体变量只能存放一个学生的信息,对于多个学生的信息,可以使用一个结构体数组于多个学生的信息,可以使用一个结构体数组来存放,结构体数组的每个元素是一个结构体来存放,结构体数组的每个元素是一个结构体类型的变量类型的变量n定义结构体数组的方法与定义普通数组的方法定义结构体数组的方法与定义普通数组的方法类似:类似:结构体类型结构体类型 数组名数组名数组的长度数组的长度;12n结构体数组的定义及使用结构体数组的定义及使用1 1、定义结构体数组、定义结构体数组(1)(1)先定义结构体类型先定义结构体类型 再定

12、义结构体数组:再定义结构体数组:struct student char name10;int age;int s1,s2;struct student st6;(2)(2)定义结构体类型的同定义结构体类型的同时定义结构体数组:时定义结构体数组:struct student char name10;int age;int s1,s2;st6;(3)(3)直接定义结构体数组直接定义结构体数组 struct char name10;int age;int s1,s2;st6;不提倡使用不提倡使用该方法该方法13n结构体数组的初始化结构体数组的初始化 将每个数组元素的数据用花括号将每个数组元素的数据用

13、花括号 括起来。括起来。struct student char name10;int age;int s1,s2;struct student st3=“Mary”,21,78,86,“Alex”,20,90,80,“Mike”,19,75,68;Mary217886Alex209080Mike197568st0st1st214n结构体数组的引用结构体数组的引用q引用某个数组元素的成员引用某个数组元素的成员 例:例:puts(st0.name);printf(“%d,%d”,st1.age,st1.s1);q数组元素之间可以整体赋值,也可以将一个元素赋数组元素之间可以整体赋值,也可以将一个元素

14、赋给一个相同类型的结构体变量给一个相同类型的结构体变量例:例:struct student st3=“Mary”,21,78,86,“Alex”,.;struct student x;st2=st0;x=st1;q输入和输出操作只能对数组元素的成员进行输入和输出操作只能对数组元素的成员进行都是结构体变量的整体赋值形式都是结构体变量的整体赋值形式15n例例5-1:按成绩对学生信息进行从高到底的排序:按成绩对学生信息进行从高到底的排序#include#define N 30struct stud int n;char name10;int s;void input(struct stud a)in

15、t i;for(i=0;iN;i+)scanf(“%d%s%d”,&ai.n,ai.name,&ai.s);void output(struct stud a)int i;for(i=0;iN;i+)printf(“%4d%10s%4dn”,ai.n,ai.name,ai.s);注意注意ai.name前不加前不加&,因,因name是数组名,因用是数组名,因用%s,输输入时名字不能加空格入时名字不能加空格16void sort(struct stud a )int i,j;struct stud temp;for(i=0;iN-1;i+)for(j=i+1;jN;j+)if(ai.s s1=87

16、;p-s2=90;n成员的引用格式成员的引用格式q结构体变量名结构体变量名.成员成员名名 stu.Nameq(*指针变量名指针变量名).成员成员名名 (*p).ageq指针变量名指针变量名-成员名成员名 p-s118n指向结构体数组的指针指向结构体数组的指针q定义:定义:struct student a3,*p;q使用:使用:for(p=a;pname);scanf(“%d%d%d”,&p-age,&p-s1,&p-s2);n结构体变量作为函数参数结构体变量作为函数参数q函数实参和形参都用结构体变量,参数之间为值传递,函数实参和形参都用结构体变量,参数之间为值传递,实参结构体变量各成员的值依次

17、传给形参结构体变量。实参结构体变量各成员的值依次传给形参结构体变量。q返回结构体类型值的函数返回结构体类型值的函数定义格式:定义格式:结构体类型名结构体类型名 函数名函数名(形参表形参表)函数体函数体;例:例:struct student func(int x,float y)函数体函数体;195.2 共用体共用体n概念概念q所谓所谓“共用体共用体”类型,是指使几个不同类型的变量类型,是指使几个不同类型的变量共同占用同一段内存单元。共同占用同一段内存单元。n定义定义union 共用体类型名共用体类型名 数据类型数据类型 成员名成员名1;1;数据类型数据类型 成员名成员名2;2;:数据类型数据类

18、型 成员名成员名n;n;例:例:union data int i;char ch;float f;20n定义共用体类型的变量:形式也有定义共用体类型的变量:形式也有3种,同结构体种,同结构体类型类型1、先定义类型,再定义变量、先定义类型,再定义变量union student char name10;int age;float s;union student st1,st2;2、定义类型同时定义变量、定义类型同时定义变量union student char name10;int age;float s;st1,st2;3、直接定义共用体变量直接定义共用体变量 union char name10;

19、int age;float s;st1,st2;21n共用体变量所占的内存空间共用体变量所占的内存空间q共用体变量所占内存的长度等于最长的成员的长度,共用体变量所占内存的长度等于最长的成员的长度,而不是各成员的长度之和,这一点不同于结构体。而不是各成员的长度之和,这一点不同于结构体。q例:上例所占字节数为例:上例所占字节数为10n共用体变量的引用共用体变量的引用q格式:格式:共用体变量共用体变量.成员名成员名q例:例:st1.name=“zhang”;st1.age=20;st1.s=78.5;22n共用体类型数据的特点共用体类型数据的特点q每一瞬时只能存放其中的一个成员,而不是同时存放几种,

20、每一瞬时只能存放其中的一个成员,而不是同时存放几种,即其它成员不起作用,只有最后一个存放的成员的值有效,即其它成员不起作用,只有最后一个存放的成员的值有效,其他成员将失去原值。如上例中的变量其他成员将失去原值。如上例中的变量st1只有最后一个成只有最后一个成员值员值st1.s=78.5是有效的。是有效的。q共用体变量的地址和它的成员地址都是同一地址,即共用体变量的地址和它的成员地址都是同一地址,即&st1和和st1.name、&st1.age、&st1.s的起始地址都是一样的。的起始地址都是一样的。q共用体变量共用体变量不能初始化不能初始化,也,也不能不能对变量名对变量名整体赋值整体赋值,不能

21、引,不能引用变量名来输出一个值,只能引用它的某个成员。用变量名来输出一个值,只能引用它的某个成员。q共用体变量共用体变量不能作为函数的参数不能作为函数的参数,也,也不能作为函数返回值不能作为函数返回值。但可以使用指向共用体变量的指针。但可以使用指向共用体变量的指针。q共用体类型可以出现在结构体中,共用体成员也可以是结构共用体类型可以出现在结构体中,共用体成员也可以是结构体类型。体类型。q可以定义共用体数组。可以定义共用体数组。23数据类型定义:数据类型定义:整体是一个结构体整体是一个结构体类型;其中第类型;其中第5 5项项可以用共用体来处可以用共用体来处理。理。例:例:struct membe

22、r int num;char name20;float score1;double score2;union int class;char position10;catagory;mem20;245.3 枚举类型枚举类型n概念概念q枚举是指将变量的所有取值一一列举出来,变量的取值枚举是指将变量的所有取值一一列举出来,变量的取值只限于列举出来的值的范围。该变量称之为枚举型变量,只限于列举出来的值的范围。该变量称之为枚举型变量,所列举的值叫做枚举元素(枚举常量)所列举的值叫做枚举元素(枚举常量)。n定义定义 enum 枚举类型名枚举类型名 枚举元素,枚举元素,枚举元素枚举元素,枚举元素,枚举元素n

23、;例:例:enum weekdaysun,mon,tue,wed,thu,fri,sat;25n变量的定义变量的定义q先定义类型,再定义变量先定义类型,再定义变量 enum weekdaysun,mon,tue,wed,thu,fri,sat;enum weekday day;q定义类型同时定义变量定义类型同时定义变量 enum weekday sun,mon,tue,wed,thu,fri,sat day;q直接定义共用体变量直接定义共用体变量 enum sun,mon,tue,wed,thu,fri,sat day;26n说明说明qC语言中枚举元素按语言中枚举元素按常量常量处理,它们是处理

24、,它们是有值有值的。它们的的。它们的值是系统按其定义顺序自动赋予的值是系统按其定义顺序自动赋予的 0、1、2、3、。q枚举元素的值也可以改变,但必须在定义时指定。枚举元素的值也可以改变,但必须在定义时指定。如:如:enum weekday sun=7,mon=1,tue,wd,thu,fri,dat;如果定义时未指定值,则按顺序取默认值。如果定义时未指定值,则按顺序取默认值。q枚举元素是常量,不是变量,不能在定义以外的任何位枚举元素是常量,不是变量,不能在定义以外的任何位置对它们赋值,如置对它们赋值,如sun=5是错误的是错误的q枚举值可用来做判断比较枚举值可用来做判断比较,如:如:if(day=sun);if(daymon&dayfri)q枚举变量取值只能是所列举的枚举元素,不能直接赋予枚举变量取值只能是所列举的枚举元素,不能直接赋予一个整数值,如:一个整数值,如:day2;27小结小结n掌握结构体的定义和引用掌握结构体的定义和引用n掌握结构体变量所占字节大小掌握结构体变量所占字节大小n掌握指向结构体变量的指针变量的用法掌握指向结构体变量的指针变量的用法n掌握共用体的特点及所占字节大小掌握共用体的特点及所占字节大小n掌握枚举类型的特点掌握枚举类型的特点28

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁