C语言基础课件第7章 自定义数据类型_第1页
C语言基础课件第7章 自定义数据类型_第2页
C语言基础课件第7章 自定义数据类型_第3页
C语言基础课件第7章 自定义数据类型_第4页
C语言基础课件第7章 自定义数据类型_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章自定义数据类型C语言程序设计(基于CDIO思想)在程序设计中,还会遇到一些关系密切但数据类型不同的数据,用基本数据类型和数组都难以表示。为此,C语言提供了3种可以让用户自己定义的数据类型框架,它们是:枚举、结构体和共用体。2枚举类型

主要内容1结构体2共用体

3语法练习47.1枚举类型的引入测试你的星座很多人喜欢由自己的阳历生日确定自己的星座,并由此分析自己的性格、测算自己的运势。由生日划分的星座有12个,由于数目不多,所以我们可以他们逐一枚举出来,这就需要定义枚举类型。47.1.2枚举类型的定义枚举类型定义的一般形式:enum

枚举名{枚举常量表列};

其中,enum是定义枚举类型的关键字;枚举名是用户定义的枚举类型的名字;枚举常量分别代表不同的枚举值,每个枚举常量是一个枚举元素。如:enum

star{sp,sy,by,jn,sgz,jx,sz,sn,tc,tx,rm,mj};

研究式学习—C程序设计(第一章)5枚举变量的定义

定义完枚举类型后,就可以用该类型来定义变量。形式如下:

enum

枚举名

变量名表列;

如:enumstarsvalue;注意:

每一个枚举常量的值取决于在定义时排列的先后次序,第一个枚举常量的序号为0(规定序号从0开始),因此,此枚举常量值为0,以后顺序加1。若想改变枚举常量的值,可在定义枚举类型时另行指定枚举常量的值。如:enum

star{sp=1,sy,by,jn,sgz,jx,sz,sn,tp,tx,rm,mj};

6枚举的使用规则

一个枚举变量的值只能是这几个枚举常量之一,可以将枚举常量赋给一个枚举变量,但不能将一个整数赋给它。

svalue=sy;√

svalue=2;×若想将整数值赋给枚举变量须作强制类型转换。如:

svalue=(enumstar)2;上述语句的功能是将顺序号为2的枚举常量赋给svalue,相当于:

svalue=sy;7.2结构体的引入模拟显示数字时钟显示屏上所显示的数字时钟值往往是hh:mm:ss的形式,其中hh代表小时,mm代表分钟,ss代表秒数。要想显示一个数字时钟就必须要有具体的时、分、秒的值,这三个值才共同构成了一个有实际意义的时钟值。要解决此类有多个成员共同构成的数据问题,就需要引入结构体。

先定义一个clock结构类型,该类型由hour、minute、和second三个成员构成。然后定义该类型的变量ck,通过函数Update实现ck的hour、minute、和second成员的更新。second的值从0开始自增;当second自增到60的时候,minute值加1,second归零;minute的值加到60的时候,hour值加1,minute归零;hour值增到24的时候,hour的值又从0开始计时。87.2.2结构体类型的定义与引用

结构体定义的一般形式为:

struct

结构体类型名{

成员表列;};

在定义一个结构体类型时必须对各成员都进行类型说明,即:

类型名

成员名;成员名的定义规则与变量名的定义规则相同。结构体的成员可以是简单变量、数组、指针、结构体、共用体。9结构体变量的定义(1)先定义结构体类型再定义结构体变量

struct

结构体类型名{

成员表列;};

struct

结构体类型名变量名表列;同其他变量一样,结构体变量也必须先定义,然后才能引用。一个结构体变量的定义可以有以下3种方式:(2)在定义结构体类型的同时定义结构体变量其形式如下:struct

结构体类型名{

成员表列;}变量名表列;(3)直接定义结构体变量,无类型名。其形式如下:struct/*无类型名*/{

成员表列;}变量名表列;说明:①以上3种定义结构体变量的形式各有所长。形式一是常用的方法,比较直观,将定义结构体类型和定义结构体变量分开,便于不同的函数甚至不同的文件之间能使用所定义的结构体类型。形式二是形式一的简略形式,结构体类型只在本文件中使用的情况可用形式三。②在定义结构体类型时,系统并不分配内存空间,只有在定义了结构体变量时,系统才为定义的每一个变量分配相应的存储单元。每个结构体变量所占内存长度是各成员所占的内存长度之和。

结构体变量的初始化

和其他类型的变量一样,对结构体变量可以在定义时进行初始化。structstudent{charnum[10];charname[20];charsex;

intage;floatscore[3];floatave;};structstudent

stu1={"2008001","LiNing",'M',19,84.3,82.5,89.4,85.4};在对结构体变量进行初始化时,按成员的顺序和类型依次为每个结构体成员指定初始值。结构体类型变量成员的引用

引用一个结构体类型的变量,实际上是引用该变量以及其中的成员。引用结构体类型的变量成员的一般形式为:结构体变量.成员“.”是结构体成员运算符,其优先级别最高,结合性自左至右。由此对结构体成员就完全可以像操作简单变量一样操作它。

结构体变量的操作规约在C语言中,不准许对结构体变量整体进行各种运算及输入/输出操作,而对其成员则可像简单变量一样进行各种运算、赋值或输入/输出操作。

strcpy(,"LiNing");stu1.sex='M';stu1.age=19;stu1.score[0]=84.3;stu1.score[2]=89.4;stu1.ave=85.4;

可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。

stu1=stu2;

结构体中的结构体成员

日期结构体定义为:structDate{intyear;

intmonth;

intday;};student结构体及变量stu1的定义为:structstudent{charnum[15];charname[10];charsex;

structDatebirthdate;

intage;floatscore[3];floatave;}stu1;在程序中对出生日期的引用方式如下:stu1.birthdate.year=1990;stu1.birthdate.month=4;stu1.birthdate.day=12;可以看出,对结构体中结构体变量的引用方式与其他普通变量的引用方式一样,只是要用两次成员运算符。7.2.3结构体数组及其使用1、结构体数组的定义可以用下面的语句来定义结构体数组stu1:structstudent{charnum[10];charname[20];charsex;

intage;floatscore[3];floatave;}stu1[100];结构体数组stu1有100个元素,每个元素都是structstudent类型,各占49个字节(10+20+1+2+12+4=49)。

7.2.3结构体数组及其使用2.结构体数组的引用结构体数组中每个元素是一个结构体变量,因此在引用时要遵守引用结构体变量的规则。对于第i个结构体数组元素引用如下:stu1[i].numstu1[i].namestu1[i].sexstu1[i].agestu1[i].score[0]stu1[i].score[1]stu1[i].score[2]stu1[i].ave结构体数组元素引用的一般形式:

数组名[下标].成员名如:stu1[i].sex='M';结构体数组在定义的同时可以初始化。

7.2.4结构体变量做参数在C语言中,结构体的引入为函数间传递一组不同类型的数据提供了方便。当以结构体变量成员作为函数的参数时,函数间传递的是单个成员;当以结构体变量作为函数的参数时,函数间传递的是整个结构体;当以结构体数组名作为函数的参数时,传递的是结构体数组的首地址,因为数组名代表它的首地址。7.3共用体的引入

学生成绩表制作假设每个学生的成绩由学号、姓名、平时成绩、考试成绩和总评成绩组成。总评成绩=平时成绩*40%+考试成绩*60%如果总评成绩大于60就显示实际分数,否则总评成绩显示“不及格”。在该问题中,总评成绩可以是“分数”和“不及格”两种不同的状态,二者类型不同而且不会同时出现,该种类型的问题可以用共用体方式加以解决。7.3.2共用体类型的定义与引用1.共用体类型的定义共用体类型的定义与结构体类似,其一般定义格式如下:union

共用体名{

共用体成员名;};其中,union是关键字,称为共用体定义说明符。每个共用体成员的声明都具有如下的形式:数据类型说明符成员名;共用体变量的定义与引用

2、与其他类型相同,共用体类型定义后就可以定义属于该类型的变量,其变量的定义和结构体变量的定义一样有3种形式,例如其中一种定义形式为:union共用体名{

共用体成员表;}变量表列;共用体变量也是要先定义后引用,引用共用体成员,引用形式如下:共用体变量名.成员名3、共用体变量空间的分配union(共用体)的各个成员是以同一个地址开始存放的,每一个时刻只可以存储一个成员。所以,一般情况下共用体类型实际占用存储空间为其最长的成员所占的存储空间。

语法练习1.已知学生记录描述为:

structstudent{ intno;charname[20];charsex;

struct{intyear;intmonth;intday;}birth;};

structstudents;设变量s中的“生日”应是“1984年11月11日”,下列对“生日”的正确赋值方式是()。A.year=1984;month=11;day=11;B.birth.year=1984;birth.month=11;birth.day=11;C.s.year=1984;s.month=11;s.day=11;D.s.birth.year=1984;s.birth.month=11;s.birth.day=11;语法练习2.当说明一个共用体变量时系统分配给它的内存是()。A.各成员所需内存量的总和 B.结构中第一个成员所需内存量C.成员中占用内存量最大者所需的容量

D.结构中最后一个成员所需内存量3.在说明一个结构体变量时系统分配给它的存储空间是()。A.该结构体中第一个成员所需的存储空间B.该结构体中最后一个成员所需的存储空间C.该结构体中占用最大存储空间的成员所需的存储空间D.该结构体中所有成员所需存储空间的总和。语法练习4.C语言共用体类型变量在程序运行期间()。A.所有成员一直驻留在内存中 B.只有一个成员驻留在内存中C.部分成员驻留在内存中 D.没有成员驻留在内存中5.下面对typedef的叙述中不正确的是()。A.用typedef可以定义各种类型名,但不能用来定义变量B.用typedef可以增加新类型C.typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植语法练习6.设有如下枚举类型定义:enumcolor{red=3,yellow,blue=10,white,black};其中枚举量black的值是()。A.7 B.15 C.14 D.12

8.以

温馨提示

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

评论

0/150

提交评论