复杂数据类型yhx

上传人:痛*** 文档编号:155594927 上传时间:2022-09-23 格式:PPT 页数:33 大小:323.02KB
收藏 版权申诉 举报 下载
复杂数据类型yhx_第1页
第1页 / 共33页
复杂数据类型yhx_第2页
第2页 / 共33页
复杂数据类型yhx_第3页
第3页 / 共33页
资源描述:

《复杂数据类型yhx》由会员分享,可在线阅读,更多相关《复杂数据类型yhx(33页珍藏版)》请在装配图网上搜索。

1、书名:高级语言程序设计及应用第第7章章 复杂数据类型复杂数据类型7.1 结构体结构体7.2 联合体联合体7.3 枚举类型枚举类型7.4 复杂数据类型应用综合举例复杂数据类型应用综合举例书名:高级语言程序设计及应用7.1 结构体结构体 在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。显然不能用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。“结构体”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。书名:高

2、级语言程序设计及应用7.1.1 结构体类型的定义结构体类型的定义 在学生登记表中,每个学生的记录都是由编号,姓名,性别和工资等数据项组成,这些数据项描述了一个员工的几个方面的信息。如果分开用独立的变量表示,很难看出这些数据有什么联系,处理起来也不方便。C语言提供了结构体数据类型,将不同类型的数据组织成一个整体。书名:高级语言程序设计及应用7.1.1 结构体类型的定义结构体类型的定义 定义一个结构体的一般形式为:struct 结构体名结构体名 成员列表;成员列表;;struct是关键字,表示一个结构体类型,成员列表由若干个成员组成,每个成员都是该结构体的一个组成部分。对每个成员也必须作类型说明,

3、其形式为:类型说明符类型说明符 成员名成员名;成员名的命名应符合标识符的书写规定。应注意在括号后的分号是不可少的。书名:高级语言程序设计及应用7.1.2 结构体变量的定义和引用结构体变量的定义和引用 定义一个结构体变量有以下三种方法:1.先定义结构体,再说明结构体变量。如:struct workerint num;char name20;char sex;float wage;struct worker person1,person2;书名:高级语言程序设计及应用7.1.2 结构体变量的定义和引用结构体变量的定义和引用 关键字struct说明该变量是结构体类型,而worker指定变量为某一特定

4、的结构体类型。说明了结构体变量后,系统就会为每个结构体变量分配一段连续的内存空间 char genderchar name20int numperson1float wagechar genderchar name20int numfloat wageperson2书名:高级语言程序设计及应用7.1.2 结构体变量的定义和引用结构体变量的定义和引用 2.在定义结构体类型的同时说明结构体变量。例如:struct workerint num;char name20;char sex;float wage;person1,person2;书名:高级语言程序设计及应用7.1.2 结构体变量的定义和引用

5、结构体变量的定义和引用 3.直接说明结构体变量。例如:structint num;char name20;char sex;float wage;person1,person2;书名:高级语言程序设计及应用7.1.2 结构体变量的定义和引用结构体变量的定义和引用在结构体类型中,成员也可以是一个结构体,即构成了嵌套的结构体。如:struct dateint month;int day;int year;structint num;char name20;char sex;struct date birthday;float wage;person1,person2;书名:高级语言程序设计及应用7

6、.1.2 结构体变量的定义和引用结构体变量的定义和引用 引用结构体变量的成员可以通过成员运算符“.”来表示。结构体变量名结构体变量名.成员名成员名 例如:person1.num 即第一个人的学号person2.sex 即第二个人的性别 person1.birthday.month 即第一个人出生的月份 书名:高级语言程序设计及应用7.1.2 结构体变量的定义和引用结构体变量的定义和引用 定义一个指向结构体变量person1的指针:struct worker*p1;p1=&person1;要引用指针指向的结构体成员,可以这样来表示:指针变量名指针变量名-结构体成员结构体成员例如:用p1-num,

7、p1-name,p1-sex等来引用结构体中的成员。书名:高级语言程序设计及应用7.1.3 结构体变量的赋值结构体变量的赋值 结构体变量的赋值就是给各成员赋值,可直接通过赋值语句来完成,如:person1.num=28536;strcpy(person1.name,“Liu Xing);结构体变量的赋值也可以通过对成员的输入语句来实现,如:scanf(%c%f,&person1.sex,&person1.wage);书名:高级语言程序设计及应用7.1.4 简化结构体类型名简化结构体类型名struct 结构体类型名结构体类型名 结构体变量名结构体变量名定义结构体变量时,不能只指定为“struct

8、”而不指定结构体名,必须用“struct 结构体类型名”两个符号一起来表示一个结构体类型。用宏定义简化结构体类型名的方法如下:#define 宏名 struct 结构体类型名 宏名结构体成员列表;宏名 结构体变量名;书名:高级语言程序设计及应用7.1.4 简化结构体类型名简化结构体类型名 还可以通过typedef命令来简化结构体类型名。typedef命令是定义新的类型名来代替已有的类型名。如:typedef int INTEGER;该语句指定用INTEGER表示int类型 用typedef定义一个结构体类型的方法如下:typedef structint num;char name20;char

9、 sex;float wage;WKER;WKER person1,person2;书名:高级语言程序设计及应用7.1.5 结构体数组结构体数组一个结构体类型的变量也可以作为一个数组的元素,因此可以构成结构体型数组。struct workerint num;char*name;char sex;float wage;person5;定义了一个结构体数组person,共有5个元素,person0person4。每个数组元素都具有struct worker的结构形式。书名:高级语言程序设计及应用7.1.5 结构体数组结构体数组struct workerint num;char*name;char

10、sex;float wage;person5=28535,Li ping,M,2500,28536,Liu Xing,M,2300,28537,He fang,F,2360,28538,Cheng ling,F,2680,28539,Wang ming,M,2400;书名:高级语言程序设计及应用7.2 联合体联合体 在实际问题中有很多这样的例子。例如在学校的学生信息中填写以下表格:学 号 姓 名课 程 成 绩 对于“成绩”一项,有的课程用分数表示,有的课程用等级A,B,C,D来表示。如果有分数表示成绩,可用一个整型变量,但如果用等级A,B,C,D来表示,就只能用字符类型的变量。要求把这两种类型

11、不同的数据都填入“成绩”这个变量中,就必须把“成绩”定义为包含整型和字符型这两种类型的“联合体”。在结构体中各成员有各自的内存空间,一个结构体变量的总长度是各成员长度之和。而在“联合体”中,各成员共享一段内存空间,一个联合体变量的长度等于各成员中最长的长度。书名:高级语言程序设计及应用7.2.1 联合体类型的定义联合体类型的定义 定义一个联合体类型的一般形式为:union 联合体名联合体名 成员表成员表;成员表中含有若干成员,成员的一般形式为:类型说明符类型说明符 成员名成员名 书名:高级语言程序设计及应用7.2.1 联合体类型的定义联合体类型的定义例如:union resultInt sco

12、re;char level;定义了一个名为result的联合体类型,它含有两个成员,一个为整型,成员名为score;另一个为字符类型,成员名为level。书名:高级语言程序设计及应用7.2.2 联合体变量的定义和引用联合体变量的定义和引用 联合体变量的说明和结构体变量的说明方式相同,也有三种形式。1.先定义,再说明 union resultint score;char level;union result a,b;2.定义同时说明 union result int score;char level;a,b;3.直接说明 union int score;char level;a,b;书名:高级语

13、言程序设计及应用7.2.2 联合体变量的定义和引用联合体变量的定义和引用 经说明后的a,b变量均为result类型。联合体的score成员为整型,占用内存2个字节空间,level成员为一个字符,占用内存1个字节空间,它们共用内存中的2个字节单元。因此,a,b变量的长度应等于 result的成员中最长的长度,即等于score成员的长度,共2个字节。书名:高级语言程序设计及应用7.2.2 联合体变量的定义和引用联合体变量的定义和引用 联合体变量的成员引用方式为:联合变量名联合变量名.成员名成员名 例如,a被说明为result类型的变量之后,可使用a.score或a.level来引用联合体变量的成员

14、。联合体变量的成员可以像普通变量一样进行其数据类型允许的运算操作,如:赋值操作,输入输出操作,代数运算,关系运算等。书名:高级语言程序设计及应用7.2.3 联合体变量的赋值联合体变量的赋值对联合体变量的赋值和使用都只能是对变量的成员进行。如:a.score=87;a.score+;printf(“score=%dn”,a.score);不允许只用联合体变量名作赋值或其它操作。以下两种操作都是错误的:a=b;printf(“score=%dn”,a);也不允许对联合体变量作初始化赋值,赋值只能在程序中进行。如:union result int score;char level;a=87,”A”;

15、书名:高级语言程序设计及应用7.2.3 联合体变量的赋值联合体变量的赋值 例7-6:用联合体变量实现不同类型数据的输出。#include stdio.hunion dataint i;float f;main()union data d;d.i=200;printf(“i:%dn”,d.i);d.f=200.0;printf(“f:%fn”,d.f);程序运行结果为:i:200f:200.000000书名:高级语言程序设计及应用7.3 枚举类型枚举类型 在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为

16、整型,字符型或其它类型显然是不妥当的。为此,语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。书名:高级语言程序设计及应用7.3 枚举类型枚举类型 枚举类型定义的一般形式为:enum 枚举名枚举名 枚举值表枚举值表;enum为关键字,表示定义一个枚举类型。枚举名表示定义的具体枚举类型的名字。在枚举值表中应罗列出该枚举类型的所有可用值,这些值也称为枚举元素。例如:enum weekday sun,mou,tue,wed,thu,fri,sat;该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为wee

17、kday类型变量的取值只能是七天中的某一天,并用枚举值表中的7个可用值分别表示。书名:高级语言程序设计及应用7.3 枚举类型枚举类型 枚举变量的说明:enum weekday.;enum weekday a,b,c;或者为:enum weekday.a,b,c;或者为:enum.a,b,c;书名:高级语言程序设计及应用7.3 枚举类型枚举类型使用说明:1.枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如:sun=5;mon=2;sun=mon;都是错误语句。2.枚举元素本身由系统定义了一个表示序号的数值,从0 开始顺序定义为0,1,2。如在weekday中,sun值为0,mon值

18、为1,,sat值为6。main()enum weekday sun,mon,tue,wed,thu,fri,sat a,b,c;a=sun;b=mon;c=tue;printf(%d,%d,%d,a,b,c);输出结果为:1,2,3书名:高级语言程序设计及应用7.3 枚举类型枚举类型3.只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如:a=sum;b=mon;这两个赋值语句是正确的。而:a=0;b=1;这两个赋值语句是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换,如:a=(enum weekday)2;其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于:a=tue;

19、还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。如:a=tue;a=”mon”;这两种赋值语句都是错误的。书名:高级语言程序设计及应用7.3 枚举类型枚举类型4枚举定义的时候可以自己定义元素的顺序号。若给某个元素定义了顺序号,其后面的顺序号依次加1,如:enum string x1=5,x2,x3,x4;enum string x=x3;此时,枚举变量x实际上的顺序号是7。枚举变量缺省是认为第一个元素的顺序号是0,然后依次加1,如果遇到用户自定义顺序号,则按照用户的定义号,后面的元素一次加1。如:enum string x1,x2=0,x3=50,x4x;由于枚举变

20、量x的第一个元素x1没有定义顺序号,所以缺省认为x1=0。而第二个和第三个元素x2和x3是用户自定义顺序号,x2=0,x3=50。第四个元素x4没有定义顺序号,则按照前一个元素的顺序号加1,因此x4=51。书名:高级语言程序设计及应用7.4 复杂数据类型应用综合举例复杂数据类型应用综合举例一个复杂的应用程序可能会同时用到前面介绍的几种复杂数据结构,而且这几种复杂的数据结构也可以相互嵌套使用。如:structchar name10;int age;char job;unionint clas;char office10;depa;body2;书名:高级语言程序设计及应用小结小结 1.结构体和联合

21、体是两种构造类型数据,是用户定义新数据类型的重要手段。结构体和联合体有很多的相似之处,它们都由成员组成,成员可以具有不同的数据类型,成员的表示方法相同,都可用三种方式作变量说明。2.在结构体中,各成员都占有自己的内存空间,它们是同时存在的。一个结构体变量的总长度等于所有成员长度之和。在联合体中,所有成员不能同时占用它的内存空间,它们不能同时存在。联合体变量的长度等于最长的成员的长度。3.“.”是成员运算符,可用它表示成员项,成员还可用“-”运算符来表示。书名:高级语言程序设计及应用小结小结 4.结构体定义允许嵌套,结构体中也可用联合体作为成员,联合体也可用结构体作为成员,从而形成结构体和联合体的嵌套使用。5.枚举是一种基本数据类型。枚举变量的取值是有限的,枚举元素是常量,不是变量。枚举变量通常由赋值语句赋值,而不由动态输入赋值。枚举元素虽可由系统或用户定义一个顺序值,但枚举元素和整数并不相同,它们属于不同的类型。因此,也不能用printf语句来输出元素值(可输出顺序值)。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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