《C语言程序设计自定义数据类型.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计自定义数据类型.pptx(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本章主要本章主要内内容容 1.自定自定义数数据据类型型概概念念 2.结构构体体类型型 3.共用体共用体类型型 4.枚枚举类型型第1页/共21页自定自定义数数据据类型型自定义数据类型是指用户根据需要自己定义的,由多种基本数据类型所构成的复合数据类自定义数据类型是指用户根据需要自己定义的,由多种基本数据类型所构成的复合数据类型。型。共用体类型共用体类型 与结构体类似,不同之处在于共用体中与结构体类似,不同之处在于共用体中 的不同数据类型共享同一存储空间的不同数据类型共享同一存储空间枚举类型枚举类型 可以把变量的取值逐一列出且可以用整数或可以把变量的取值逐一列出且可以用整数或 者名字来代替。者名字来
2、代替。结构体类型结构体类型 把关系密切但数据类型不同的数据组把关系密切但数据类型不同的数据组 合在一起合在一起C语言提供了三种用户可以自定义的数据类型:语言提供了三种用户可以自定义的数据类型:第2页/共21页结构构体体类型型会员ID号 会员姓名 会员性别会员年龄会员积分125001 John 男 23 34 125003 Rose 女 32 45 125004 Smith 男 56 38 表中数据是一个有机的整体,组合在一起才能表示一个完整表中数据是一个有机的整体,组合在一起才能表示一个完整而有意义的信息。这样的数据用基本数据类型无法表示,只而有意义的信息。这样的数据用基本数据类型无法表示,只
3、有把几种不同的基本数据类型组合在一起才行有把几种不同的基本数据类型组合在一起才行用结构体用结构体可以解决此类完整信息表示的问题。可以解决此类完整信息表示的问题。第3页/共21页结构体类型的定义结构体类型的定义结构体类型的定义形式为:结构体类型的定义形式为:struct 结构体名称结构体名称 数据类型数据类型 成员名成员名1;数据类型数据类型 成员名成员名2;上表会员结构体定义为:上表会员结构体定义为:struct Member char ID7;char name10;char sex;int age;int points;;结构体中的每一个数据称为一个成员。结构体中的每一个数据称为一个成员。
4、Member结构结构体中有体中有5个成员。个成员。第4页/共21页结构体类型的定义结构体类型的定义说明:说明:1.struct是定义结构体的关键字,不能省略,由它和后面的结构体名称一起构成了一个用户自己定义的新的是定义结构体的关键字,不能省略,由它和后面的结构体名称一起构成了一个用户自己定义的新的数据类型。数据类型。2.大括号大括号 中的每一项称为结构体的一个成员,可以是已有的任意数据类型(包括基本数据类型、数组和用中的每一项称为结构体的一个成员,可以是已有的任意数据类型(包括基本数据类型、数组和用户自定义类型)。户自定义类型)。3.结构体定义完要加分号。结构体定义完要加分号。第5页/共21页
5、结构体变量的定义结构体变量的定义定义好结构体后,就可以用该结构体来定义新的变量,称为结构体变量。定义好结构体后,就可以用该结构体来定义新的变量,称为结构体变量。结构结构体变量的定义方式有三种:体变量的定义方式有三种:第一种:struct 结构体类型名结构体类型名 结构体变量名结构体变量名;例如:例如:struct Member mem1;第三种:struct 数据类型数据类型 成员成员1;数据类型数据类型 成员成员2;结构体变量表列;结构体变量表列;一般不推荐使用这种定义方式一般不推荐使用这种定义方式第二种:struct 结构体类型名结构体类型名 数据类型数据类型 成员成员1;数据类型数据类型
6、 成员成员2;结构体变量表列;结构体变量表列;例如:例如:struct Member int ID;char name10;char sex;int age;int points;mem1,mem2;第6页/共21页结构体变量的使用结构体变量的使用成员的访问成员的访问变量名变量名.成员名成员名 .称为成员运算符称为成员运算符对成员的赋值与普通变量的赋值是一样的。对成员的赋值与普通变量的赋值是一样的。如:如:mem1.ID=12500113;结构体变量的初始化结构体变量的初始化struct Member mem1=12500113,“John”,M,26,30;结构体变量的整体赋值结构体变量的整
7、体赋值结构体变量结构体变量1=结构体变量结构体变量2mem2=mem1;第7页/共21页typedef的使用的使用typedef声明,简称声明,简称typedef,它的作用是为数据类型定义一个新的名字。,它的作用是为数据类型定义一个新的名字。typedef的用法是的用法是:typedef 数据类型名数据类型名 用户自定义名称用户自定义名称例:例:typedef int integer;这个声明为这个声明为int取了一个新的名字叫取了一个新的名字叫integer,在进行了这个声明后可以用,在进行了这个声明后可以用integer来定义变量。如:来定义变量。如:integer a;这个定义与;这个定
8、义与 int a;是等价的。是等价的。第8页/共21页结构的嵌套结构的嵌套当结构体成员由更小的数据项构成时,就形成了结构体的嵌套。当结构体成员由更小的数据项构成时,就形成了结构体的嵌套。例如:例如:日期结构体为:日期结构体为:struct Date int year;int month;int day;在会员结构体中增加了出生在会员结构体中增加了出生日期后,结构就变为:日期后,结构就变为:struct Member char ID7;char name10;char sex;struct Date birthday;int age;int points;第9页/共21页结构体数组结构体数组同种
9、结构数据的集合即结构体数组同种结构数据的集合即结构体数组struct Member int ID;char name10;char sex;int age;int points;mem10;对数组元素的访问方式为:对数组元素的访问方式为:memi.IDmemi.name第10页/共21页结构体数据作为函数参数结构体数据作为函数参数 结构变量可以作为函数的参数来传递,函数的返回值也可以是结构变量。结构变量可以作为函数的参数来传递,函数的返回值也可以是结构变量。用结构体变量成员作为函数的参数用结构体变量成员作为函数的参数用结构体变量作为函数的参数用结构体变量作为函数的参数用结构体数组作为函数的参数
10、用结构体数组作为函数的参数第11页/共21页共用体共用体类型型在一些情况下,结构体中的成员不需要同时出现,使用结在一些情况下,结构体中的成员不需要同时出现,使用结构体会造成空间的浪费,共用体可以解决此问题构体会造成空间的浪费,共用体可以解决此问题。共用体类型的定义与结构体类型的定义很相似,只不过修共用体类型的定义与结构体类型的定义很相似,只不过修饰符不是饰符不是struct,而是,而是union。例如:union Grade char vip;int gen;mem_grade;共用体变量的引用方式与结构体变量一样,都是通过成员共用体变量的引用方式与结构体变量一样,都是通过成员运算符来引用的。
11、运算符来引用的。第12页/共21页共用体的存储空间共用体的存储空间共用体共用体Grade占用空间示意:占用空间示意:所有成员共用同一段存储空间,该空间按占用存所有成员共用同一段存储空间,该空间按占用存储区最大的成员来分配。储区最大的成员来分配。第13页/共21页结构体与共用体所占空间比较结构体与共用体所占空间比较有如下定义的结构体:有如下定义的结构体:struct Number short a;float b;char c;num;占用空间为:占用空间为:结构体占用空间是所有成员占用空间之和。结构体占用空间是所有成员占用空间之和。第14页/共21页枚枚举类型型在实际中,有的变量取值情况可能只有
12、几种,把这些可能的取值情况列举出来,在实际中,有的变量取值情况可能只有几种,把这些可能的取值情况列举出来,就构成了一种新的数据类型就构成了一种新的数据类型枚举。枚举。枚举类型的定义形式为:枚举类型的定义形式为:enum 类型名类型名 枚举常量枚举常量1,枚举常量,枚举常量2,;每个枚举常量都有一个值,若不特别说明,则第一个枚举常量的值为每个枚举常量都有一个值,若不特别说明,则第一个枚举常量的值为0,也可以在,也可以在定义的时候指定。其他枚举常量的值从第一个枚举常量开始逐个增定义的时候指定。其他枚举常量的值从第一个枚举常量开始逐个增1第15页/共21页枚举类型的使用枚举类型的使用如定义一个颜色的
13、枚举类型:如定义一个颜色的枚举类型:enum color red=1,yellow,blue,white,black,green,orange;enum color yanse;说明:说明:1.enum是定义的关键字是定义的关键字2.给变量给变量yanse赋值时,赋值形式为:赋值时,赋值形式为:yanse=yellow;3.枚举常量的值分别为枚举常量的值分别为1,2,3,4,5,6,7,若要改变可自己定义,若要改变可自己定义如如enum color red=1,yellow,blue,white=6,black,green,orange;经过这样经过这样定义后,枚举常量的值就变成了定义后,枚举
14、常量的值就变成了1,2,3,6,7,8,9第16页/共21页语法练习语法练习以下结构体的定义语句中,正确的是以下结构体的定义语句中,正确的是。Astructstudentintnum;charname10;intage;stu;B.structintnum;charname10;intage;student;structstudentstu;C.structstudentintnum;charname10;intage;stu;D.structstudentintnum;charname10;intage;studentstu;有如下定义的枚举类型:有如下定义的枚举类型:enumweek_da
15、yWed=3,Thu,Fri,Sat,Sun,Mon,Tueeveryday;则,则,Mon的值为的值为。A1B.2C.8D.5 共用体变量在程序运行过程中共用体变量在程序运行过程中()。A.只有一个成员占用内存空间只有一个成员占用内存空间B.所有成员都占用内存空间所有成员都占用内存空间C.没有成员占用内存空间没有成员占用内存空间 第17页/共21页语法练习语法练习有如下程序段,执行后的输出结果是有如下程序段,执行后的输出结果是。#includemain()()structaintx;inty;num2=20,5,6,7;printf(%dn,num0.x/num0.y*num1.y);A.0
16、B.28C.20D.5 typedef的作用是的作用是()。A.用来定义一个新的数据类型用来定义一个新的数据类型B.可以为已有类型取一个新的名字可以为已有类型取一个新的名字C.可以用来定义一个变量可以用来定义一个变量D.能为用户自定义类型取新的名字,但不能为原始数据能为用户自定义类型取新的名字,但不能为原始数据类型取新的名字类型取新的名字第18页/共21页本章课后作业本章课后作业复习第七章复习第七章预习第八章预习第八章完成完成习题与上机实践习题与上机实践第七章的习题第七章的习题上机实习内容:上机实习内容:完成完成“三、实验三、实验”的相关内容的相关内容 完成完成“二、习题二、习题(三)编程题(三)编程题”并提并提交交第19页/共21页C语言程序言程序设计第20页/共21页感谢您的欣赏!第21页/共21页