(续)结构体等构造数据类型.ppt

上传人:max****ui 文档编号:3344601 上传时间:2019-12-12 格式:PPT 页数:54 大小:748.31KB
返回 下载 相关 举报
(续)结构体等构造数据类型.ppt_第1页
第1页 / 共54页
(续)结构体等构造数据类型.ppt_第2页
第2页 / 共54页
(续)结构体等构造数据类型.ppt_第3页
第3页 / 共54页
点击查看更多>>
资源描述
第六章结构体等构造数据类型,第6章结构体等构造数据类型,6.1结构体6.2共用体6.3枚举型6.4Typedef的用途,C的数据类型:,整型int基本数据类型浮点型floatdouble字符型char数组以为标志结构struct构造类型复杂数据类型联合union枚举enum指针类型以*为标志空类型,结构体类型的数据由若干个变量组成,每一个变量既可以是一个基本数据类型的数据,也可以是另一个构造类型的数据。结构体实际上是C编译没有提供的数据类型。,6.1结构体,结构体的说明一般格式:struct结构体名类型名1结构体成员名表1;类型名2结构体成员名表2;。类型名n结构体成员名表n;,例:要先定义一个结构体类型:time。time是时间,当然可以用三个整型变量来表示一个时间,inthour;intminute;intsecond;但是不能表示三个变量之间的逻辑关系。,若把时间说明为TIME,而TIME含有小时、分、秒三个成分,则TIME的结构体说明是:structTIMEinthour;intminute;intsecond;,其中struct是关键字,TIME是结构体的类型名,它实际上规定了一种新的复杂数据类型。在随后的程序中就可以使用TIME定义结构体变量了。例:structTIMEmeeting_begin;,结构体类型变量的定义,结构体变量定义有三种方法:方法一:先说明结构体,再定义结构体变量。例:structpointintx;inty;structpointp1,p2;,方法二:在说明结构体类型的同时定义结构体变量。例如:structTIMEinthour;intminute;intsecond;meeting_begin,meeting_end;,这种方法的语法格式是:struct结构体名类型名1结构体成员名表1;类型名2结构体成员名表2;。类型名n结构体成员名表n;结构体变量表;,方法三:是在说明结构体时直接定义结构体变量,并且不用指定结构体名。structinthour;intminute;intsecond;meeting_begin,meeting_end;,这种方法的语法格式是:struct类型名1结构体成员名表1;类型名2结构体成员名表2;。类型名n结构体成员名表n;结构体变量表;,结构体成员的引用C语言中对结构体变量的使用是通过对其成员的引用来实现的。一般不能对结构体变量进行整体的引用。引用的方法:结构体变量名.成员名符号“.”是依据结构体变量名存取结构体成员的运算符。,#includestdio.hvoidmain()structTIMEinthour;intminute;intsecond;structTIMEmt_begin;,例:用符号“.”引用结构体变量的成员。,mt_begin.hour=8;mt_begin.minute=30;mt_begin.second=00;printf(nmeetingtimeis%2d:%2d:%2d,mt_begin.hour,mt_begin.minute,mt_begin.second);,运行结果:meetingtimeis8:30:00,结构体的初始化对结构体变量的初始化与对数组的初始化相似,因为存储分配时,通常按照各成员在结构体中出现的先后顺序连续排列。structTIMEaudit_begin=8,30,0;如果初始化数值的个数小于结构体成员的个数,系统会自动将其它成员初始化为0。,#includestdio.hvoidmain()structTIMEinthour;intminute;intsecond;structTIMEmeeting_begin=8,30,00;,例:结构体变量的初始化,printf(nauditiontimeis%2d:%2d:%2d,audit_begin.hour,audit_begin.minute,audit_begin.second);,运行结果:meetingtimeis8:30:00,structstudent_typelongintnum;/*学号*/structdate_typeintmonth;intday;intyear;birthday;/*出生日期*/stu;可以使用scanf(“%d”,/*学号*/charname10;/*姓名*/structdate_typeintmonth;intday;intyear;birthday;/*出生日期*/stu;,例:结构体中包含数组。#includestdio.hvoidmain()inti;structSTOCKcharstockname16;/*股票名称*/charstockcode7;/*股票代码*/floatprice3;/*买入价、卖出价、成交价*/;,StructSTOCKsfz=ShenFaZhan,000001,8.77,8.78,8.78;/*用深发展的数据初始化结构体变量sfz*/printf(n%s%s,sfz.stockname,sfz.stockcode);/*输出股票名称和股票代码*/for(i=0;i3;i+)/*输出股票的买入价、卖出价和成交价*/printf(%6.2f,sfz.pricei);,结构体数组,定义结构体数组的语法:struct结构体名数组名长度;访问结构体数组中的结构体成员的方法是:数组名下标.成员名,6.2公用体,公用体又称为联合体。在编制一些比较高级的程序时,有时需要把不同类型的变量放在同一存储区域内。一个变量x,它既可以用来存储一个单字符还可以存储一个浮点数或是一个整数,当然,在一个时间点,它只能存放其中的一种数据,新的数据覆盖老的数据,新的数据是什么数据类型,x变量就是什么数据类型。,一般格式:union公用体名类型名1公用体成员名表1;类型名2公用体成员名表2;。类型名n公用体成员名表n;公用体变量名表;,共用体的说明,例如,unionmixedcharc;floatf;inti;注:mixed为公用体名,与说明结构体一样,说明一个公用体,只是说明了一种新的数据类型,并不引起内存的分配。,联合体变量的定义联合体变量的定义方法也有三种:先说明联合体,再定义联合体变量在说明联合体类型的同时定义联合体变量直接定义联合体变量。,unionmixedcharc;floatf;inti;unionmixedx;,unioncharc;floatf;inti;x;,unionmixedcharc;floatf;intix;,与结构体变量不同的是,公用体变量在内存中所占的字节数是成员表中最大的,而不象结构体变量是所有成员所占字节数的总和。,unionmixedx=a;这时,系统按成员c对第一个字节赋值,其余单元的值为0。,在定义时共用体的初始化,对于公用体变量成员的直接引用是使用运算符“.”,语法是:公用体变量名.成员名。例如x.f,可以将x.f看成一个普通的浮点型数据进行存取。,共用体的引用,注:不能对联合体变量x直接存取内容。如:x=15.00是错误的,只能对x的三个成员进行操作,这三个成员是x.f、x.i和x.c,并且这三个联合体成员不可能同时存在。,例:在下面的程序中,执行语句x.i=10;以后x.f的值是不能够确定的。#includestdio.hunionmixedcharc;floatf;inti;voidmain()unionmixedx;x.i=10;printf(%f,x.f);/*x.f的值不确定*/,练习,1、定义一个包括年、月、日的结构体变量,将其转换成这年中的第几天输入。(不考虑闰年,2月为28天)2、利用结构体编写程序,实现输入三个学生的学号,姓名,数学成绩,将他们按成绩的高低进行排列,并输出,structdate_typeintmonth;intday;intyear;date;main()inti,j=0;scanf(%d%d,题1,6.3枚举使用枚举变量的主要目的是提高程序的可读性,所谓“枚举”就是把所有可能的取值情况列举出来。例如,真和假表示了逻辑值的两种情况,男和女是性别的两种取值,选修课成绩有“优”、“良”、“中”、“及格”和“不及格”五种取值。,枚举的说明和枚举变量的定义枚举的说明格式为:enum枚举名枚举元素表(逗号分隔);,enumcolorred,green,blue,yellow,white;enumboolfalse,true;,枚举元素是常量,有固定的数值,按枚举的顺序分别是整数0、1、2,不能将其当作变量使用,也就是说不能在赋值号的左边使用枚举元素。例如,true=1;是错误的。注意,不能有两个相同名字的枚举元素,枚举元素也不能与其它的变量同名。,枚举变量的定义与结构体相类似,也有三种:(1)与枚举说明分开定义enum枚举名变量名表;例如:enumcolorred,green,blue,yellow,white;enumcolorselect,change;select和change是枚举变量。,(2)与枚举说明一起定义例如:enumcolorred,green,blue,yellow,whiteselect,change;(3)不说明枚举名,直接定义枚举变量例如:enumred,green,blue,yellow,whiteselect,change;,枚举变量的使用枚举变量的使用与结构体变量完全不同。如果一个变量被定义为是一个枚举变量,则它的取值只能取自对应的枚举元素,而不能是其它任何数。,如果有定义enumred,green,blue,yellow,whiteselect,change;则select=red;和change=white;都是正确的,而select=red_white是错误的,因为red_white并没有在枚举元素表中出现。,枚举元素是常量,有固定的数值,按枚举的顺序分别是整数0、1、2,不能将其当作变量使用,也就是说不能在赋值号的左边使用枚举元素。例如,true=1;是错误的。注意,不能有两个相同名字的枚举元素,枚举元素也不能与其它的变量同名。,C编译对枚举元素作为常整数处理,遇到枚举元素时,编译程序把其中第一个枚举元素赋值为0,第2个赋值为1,所以select=red;和change=white;两句赋值语句执行以后,select的值为0,change的值为4。,C语言允许程序员将某些枚举元素强制赋值,指定为一整数常量,被强制赋值的枚举元素后面的值按顺序逐个增1。enumcolorred,green,blue=5,yellow,white/*实际值为0,1,5,6,7*/;,枚举元素是常量,有固定的数值,按枚举的顺序分别是整数0、1、2,不能将其当作变量使用,也就是说不能在赋值号的左边使用枚举元素。例如,true=1;是错误的。注意,不能有两个相同名字的枚举元素,枚举元素也不能与其它的变量同名。,使用枚举类型时,不提倡将整型值与枚举元素直接联系起来,只要简单地把这些变量看成具有某种特点的枚举类型的变量。enumboolfalse,trueflag;if(flag=false),6.4类型定义使用类型定义的目的是简化结构体和联合体等构造类型的类型说明,同时可以增强可读性。类型定义的一般格式是:typedef原类型名新类型名;功能:将原类型名表示的数据类型用新类型名代替。,typedefintCOUNTER;现在COUNTER是int的另一个名字,那么,使用COUNTERi,j,k;定义变量i、j和k以后,它们实际上都是整型数,用COUNTER定义可以明确地表示这几个变量是做计数器的。,typedefcharSTRING81;STRINGtext,input_line;text和input_line是包含81个字符的数组。typedefchar*STRING_PTR;STRING_PTRbuffer;buffer为指向字符的指针。,typedefstructtimeinthour;intminute;intsecond;TIME;TIME可以直接作为一种新的数据类型说明符,而不必再使用关键字struct了。TIMEbirth;birth变量的数据类型是time结构体类型。,typedefintCOUNTER;现在COUNTER是int的另一个名字,那么,使用COUNTERi,j,k;定义变量i、j和k以后,它们实际上都是整型数,用COUNTER定义可以明确地表示这几个变量是做计数器的。,类型定义的步骤:第一步:象说明一个普通的变量一样,用希望新命名的数据类型定义一个变量。例如,inti;第二步:将第二步定义的变量名用新的类型名代替。例如,intCOUNTER;第三步:将第二步定义的句子前加上typedef。例如,typedefintCOUNTER;COUNTER成为一种新的数据类型名。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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