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

上传人:sccc 文档编号:5666795 上传时间:2023-08-07 格式:PPT 页数:54 大小:553.01KB
返回 下载 相关 举报
第六章(续)结构体等构造数据类型.ppt_第1页
第1页 / 共54页
第六章(续)结构体等构造数据类型.ppt_第2页
第2页 / 共54页
第六章(续)结构体等构造数据类型.ppt_第3页
第3页 / 共54页
第六章(续)结构体等构造数据类型.ppt_第4页
第4页 / 共54页
第六章(续)结构体等构造数据类型.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《第六章(续)结构体等构造数据类型.ppt》由会员分享,可在线阅读,更多相关《第六章(续)结构体等构造数据类型.ppt(54页珍藏版)》请在三一办公上搜索。

1、第六章 结构体等构造数据类型,第6章 结构体等构造数据类型,6.1 结构体6.2 共用体6.3 枚举型6.4 Typedef的用途,C的数据类型:,整型 int 基本数据类型 浮点型 float double 字符型 char 数组 以 为标志 结构 struct 构造类型 复杂数据类型 联合 union 枚举 enum 指针类型 以*为标志 空类型,结构体类型的数据由若干个变量组成,每一个变量既可以是一个基本数据类型的数据,也可以是另一个构造类型的数据。结构体实际上是C编译没有提供的数据类型。,6.1 结构体,结构体的说明 一般格式:struct 结构体名 类型名1 结构体成员名表1;类型名

2、2 结构体成员名表2;。类型名n 结构体成员名表n;,例:要先定义一个结构体类型:time。time是时间,当然可以用三个整型变量来表示一个时间,int hour;int minute;int second;但是不能表示三个变量之间的逻辑关系。,若把时间说明为TIME,而TIME含有小时、分、秒三个成分,则TIME的结构体说明是:struct TIME int hour;int minute;int second;,其中struct 是关键字,TIME是结构体的类型名,它实际上规定了一种新的复杂数据类型。在随后的程序中就可以使用TIME定义结构体变量了。例:struct TIME meetin

3、g_begin;,结构体类型变量的定义,结构体变量定义有三种方法:方法一:先说明结构体,再定义结构体变量。例:struct point int x;int y;struct point p1,p2;,方法二:在说明结构体类型的同时定义结构体变量。例如:struct TIME int hour;int minute;int second;meeting_begin,meeting_end;,这种方法的语法格式是:struct 结构体名 类型名1 结构体成员名表1;类型名2 结构体成员名表2;。类型名n 结构体成员名表n;结构体变量表;,方法三:是在说明结构体时直接定义结构体变量,并且不用指定结构

4、体名。struct int hour;int minute;int second;meeting_begin,meeting_end;,这种方法的语法格式是:struct 类型名1 结构体成员名表1;类型名2 结构体成员名表2;。类型名n 结构体成员名表n;结构体变量表;,结构体成员的引用 C语言中对结构体变量的使用是通过对其成员的引用来实现的。一般不能对结构体变量进行整体的引用。引用的方法:结构体变量名.成员名 符号“.”是依据结构体变量名存取结构体成员的运算符。,#include stdio.hvoid main()struct TIME int hour;int minute;int s

5、econd;struct TIME mt_begin;,例:用符号“.”引用结构体变量的成员。,mt_begin.hour=8;mt_begin.minute=30;mt_begin.second=00;printf(n meeting time is%2d:%2d:%2d,mt_begin.hour,mt_begin.minute,mt_begin.second);,运行结果:meeting time is 8:30:00,结构体的初始化 对结构体变量的初始化与对数组的初始化相似,因为存储分配时,通常按照各成员在结构体中出现的先后顺序连续排列。struct TIME audit_begin=

6、8,30,0;如果初始化数值的个数小于结构体成员的个数,系统会自动将其它成员初始化为0。,#include stdio.hvoid main()struct TIME int hour;int minute;int second;struct TIME meeting_begin=8,30,00;,例:结构体变量的初始化,printf(n audition time is%2d:%2d:%2d,audit_begin.hour,audit_begin.minute,audit_begin.second);,运行结果:meeting time is 8:30:00,struct student_

7、type long int num;/*学号*/struct date_type int month;int day;int year;birthday;/*出生日期*/stu;可以使用scanf(“%d”,&stu.birthday.day)输入数据。但是不能引用stu.birthday。,结构体的嵌套,注意,对嵌套结构体的引用必须引用到最末一级。,注:结构体类型和结构变量,结构体类型和结构体变量是不同概念。先定义结构类型,再定义结构变量。定义结构类型后,不会为其分配内存空间。只有当变量被说明,才会为其分配存储空间。结构类型不能进行运算、赋值,而结构变量可以。,结构体中包含数组,struct

8、 student_type long int num;/*学号*/char name10;/*姓名*/struct date_type int month;int day;int year;birthday;/*出生日期*/stu;,例:结构体中包含数组。#include stdio.hvoid main()int i;struct STOCK char stockname16;/*股票名称*/char stockcode7;/*股票代码*/float price3;/*买入价、卖出价、成交价*/;,Struct STOCK sfz=ShenFaZhan,000001,8.77,8.78,8.

9、78;/*用深发展的数据初始化结构体变量sfz*/printf(n%s%s,sfz.stockname,sfz.stockcode);/*输出股票名称和股票代码*/for(i=0;i3;i+)/*输出股票的买入价、卖出价和成交价*/printf(%6.2f,sfz.pricei);,结构体数组,定义结构体数组的语法:struct 结构体名 数组名长度;访问结构体数组中的结构体成员的方法是:数组名下标.成员名,6.2 公用体,公用体又称为联合体。在编制一些比较高级的程序时,有时需要把不同类型的变量放在同一存储区域内。一个变量x,它既可以用来存储一个单字符还可以存储一个浮点数或是一个整数,当然,在

10、一个时间点,它只能存放其中的一种数据,新的数据覆盖老的数据,新的数据是什么数据类型,x变量就是什么数据类型。,一般格式:union 公用体名 类型名1 公用体成员名表1;类型名2 公用体成员名表2;。类型名n 公用体成员名表n;公用体变量名表;,共用体的说明,例如,union mixed char c;float f;int i;注:mixed为公用体名,与说明结构体一样,说明一个公用体,只是说明了一种新的数据类型,并不引起内存的分配。,联合体变量的定义 联合体变量的定义方法也有三种:先说明联合体,再定义联合体变量在说明联合体类型的同时定义联合体变量直接定义联合体变量。,union mixed

11、 char c;float f;int i;union mixed x;,union char c;float f;int i;x;,union mixed char c;float f;int i x;,与结构体变量不同的是,公用体变量在内存中所占的字节数是成员表中最大的,而不象结构体变量是所有成员所占字节数的总和。,union mixed x=a;这时,系统按成员c对第一个字节赋值,其余单元的值为0。,在定义时共用体的初始化,对于公用体变量成员的直接引用是使用运算符“.”,语法是:公用体变量名.成员名。例如x.f,可以将x.f看成一个普通的浮点型数据进行存取。,共用体的引用,注:不能对联合

12、体变量x直接存取内容。如:x=15.00是错误的,只能对x的三个成员进行操作,这三个成员是x.f、x.i和x.c,并且这三个联合体成员不可能同时存在。,例:在下面的程序中,执行语句x.i=10;以后x.f的值是不能够确定的。#include stdio.h union mixed char c;float f;int i;void main()union mixed x;x.i=10;printf(%f,x.f);/*x.f的值不确定*/,练习,1、定义一个包括年、月、日的结构体变量,将其转换成这年中的第几天输入。(不考虑闰年,2月为28天)2、利用结构体编写程序,实现输入三个学生的学号,姓名

13、,数学成绩,将他们按成绩的高低进行排列,并输出,struct date_type int month;int day;int year;date;main()int i,j=0;scanf(%d%d,题1,6.3 枚举 使用枚举变量的主要目的是提高程序的可读性,所谓“枚举”就是把所有可能的取值情况列举出来。例如,真和假表示了逻辑值的两种情况,男和女是性别的两种取值,选修课成绩有“优”、“良”、“中”、“及格”和“不及格”五种取值。,枚举的说明和枚举变量的定义枚举的说明格式为:enum 枚举名 枚举元素表(逗号分隔);,enum color red,green,blue,yellow,white

14、;enum bool false,true;,枚举元素是常量,有固定的数值,按枚举的顺序分别是整数0、1、2,不能将其当作变量使用,也就是说不能在赋值号的左边使用枚举元素。例如,true=1;是错误的。注意,不能有两个相同名字的枚举元素,枚举元素也不能与其它的变量同名。,枚举变量的定义与结构体相类似,也有三种:(1)与枚举说明分开定义enum 枚举名 变量名表;例如:enum color red,green,blue,yellow,white;enum color select,change;select和change是枚举变量。,(2)与枚举说明一起定义例如:enum color red,g

15、reen,blue,yellow,white select,change;(3)不说明枚举名,直接定义枚举变量例如:enum red,green,blue,yellow,white select,change;,枚举变量的使用 枚举变量的使用与结构体变量完全不同。如果一个变量被定义为是一个枚举变量,则它的取值只能取自对应的枚举元素,而不能是其它任何数。,如果有定义 enum red,green,blue,yellow,white select,change;则select=red;和change=white;都是正确的,而select=red_white是错误的,因为red_white并没有在

16、枚举元素表中出现。,枚举元素是常量,有固定的数值,按枚举的顺序分别是整数0、1、2,不能将其当作变量使用,也就是说不能在赋值号的左边使用枚举元素。例如,true=1;是错误的。注意,不能有两个相同名字的枚举元素,枚举元素也不能与其它的变量同名。,C编译对枚举元素作为常整数处理,遇到枚举元素时,编译程序把其中第一个枚举元素赋值为0,第2个赋值为1,所以select=red;和change=white;两句赋值语句执行以后,select的值为0,change的值为4。,C语言允许程序员将某些枚举元素强制赋值,指定为一整数常量,被强制赋值的枚举元素后面的值按顺序逐个增1。enum color red

17、,green,blue=5,yellow,white/*实际值为0,1,5,6,7*/;,枚举元素是常量,有固定的数值,按枚举的顺序分别是整数0、1、2,不能将其当作变量使用,也就是说不能在赋值号的左边使用枚举元素。例如,true=1;是错误的。注意,不能有两个相同名字的枚举元素,枚举元素也不能与其它的变量同名。,使用枚举类型时,不提倡将整型值与枚举元素直接联系起来,只要简单地把这些变量看成具有某种特点的枚举类型的变量。enum bool false,true flag;if(flag=false),6.4类型定义 使用类型定义的目的是简化结构体和联合体等构造类型的类型说明,同时可以增强可读性

18、。类型定义的一般格式是:typedef 原类型名 新类型名;功能:将原类型名表示的数据类型用新类型名代替。,typedef int COUNTER;现在COUNTER 是int的另一个名字,那么,使用COUNTER i,j,k;定义变量i、j和k以后,它们实际上都是整型数,用COUNTER 定义可以明确地表示这几个变量是做计数器的。,typedef char STRING81;STRING text,input_line;text和input_line是包含81个字符的数组。typedef char*STRING_PTR;STRING_PTR buffer;buffer为指向字符的指针。,ty

19、pedef struct time int hour;int minute;int second;TIME;TIME可以直接作为一种新的数据类型说明符,而不必再使用关键字struct了。TIME birth;birth 变量的数据类型是time结构体类型。,typedef int COUNTER;现在COUNTER 是int的另一个名字,那么,使用COUNTER i,j,k;定义变量i、j和k以后,它们实际上都是整型数,用COUNTER 定义可以明确地表示这几个变量是做计数器的。,类型定义的步骤:第一步:象说明一个普通的变量一样,用希望 新命名的数据类型定义一个变量。例如,int i;第二步:将第二步定义的变量名用新的类型名代替。例如,int COUNTER;第三步:将第二步定义的句子前加上typedef。例如,typedef int COUNTER;COUNTER成为一种新的数据类型名。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号