第10章结构、共用及枚举.ppt

上传人:sccc 文档编号:5889010 上传时间:2023-08-30 格式:PPT 页数:25 大小:291.04KB
返回 下载 相关 举报
第10章结构、共用及枚举.ppt_第1页
第1页 / 共25页
第10章结构、共用及枚举.ppt_第2页
第2页 / 共25页
第10章结构、共用及枚举.ppt_第3页
第3页 / 共25页
第10章结构、共用及枚举.ppt_第4页
第4页 / 共25页
第10章结构、共用及枚举.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《第10章结构、共用及枚举.ppt》由会员分享,可在线阅读,更多相关《第10章结构、共用及枚举.ppt(25页珍藏版)》请在三一办公上搜索。

1、复合数据类型,数组指针结构体联合体(共用体)枚举,第九讲 结构、共用及枚举,学习目标掌握结构体类型的声明、结构体变量的定义及使用了解单链表的概念(结构体与指针的典型应用)了解共用体类型的声明及变量的定义了解枚举类型的概念、定义及使用了解自定义类型的定义与使用方法,9.1 结构体,结构体类型的定义结构体变量的定义及初始化结构体成员的引用结构体数组结构体指针,学生成绩表,结构体类型的定义,结构体类型的性质:不同数据类型组成的集合体定义格式,struct 结构体名 类型1 成员名1;类型2 成员名2;类型n 成员名n;,struct DATE int year;int month;int day;,

2、注意:定义结构体类型并不分配内存,定义变量时分配结构体成员可以是与本结构体完全无关的其他结构体类型,但不能是自身,struct cj_list char num10;char name10;int year;char sex;float math,English,computer;,struct DATE date;,结构体变量的定义与初始化,结构体类型的变量定义按照结构体类型分配实际的存储空间声明格式:struct 结构体名 变量名表;例:struct DATE date,brithday;结构体类型变量的初始化按声明顺序逐成员进行例:struct DATE date=2008,8,8;st

3、ruct cj_list stu1=c001,Tom,1990,M,88,90,88;说明:初始化数据必须与结构体类型声明的类型与顺序完全一致,各个成员初始值之间用逗号分隔,struct DATE int year;int month;int day;,struct DATE int year;int month;int day;date,brithday;,可省略,结构体变量所占内存空间,结构体变量所占内存空间是其各个成员所占内存空间之和。例:struct cj_list char num10;char name10;int year;char sex;float math,English,

4、computer;stu1,stu2,stu3;程序中,可用sizeof(变量名或类型标识符),求得结构体变量所占内存空间的大小。例如,printf(%d,sizeof(stu1);printf(“%d”,sizeof(struct cj_list);,结构体成员的引用,成员选择操作符“.”-通过结构体变量格式:结构体变量名.成员名例:struct DATE date;date.year=2008;成员选择操作符“”-通过结构体指针格式:结构体变量名成员名例:struct DATE*p=说明:pyear(*p).year,例10.1 编写程序定义一个结构体变量,并从键盘输入一组数 据,计算出总

5、分,并输出所有信息,main()struct cj_list char num10;char name10;int year;char sex;float math,English,computer,total;stu1;printf(n input name,num,year,sex,math,English,computern);scanf(%s%s%d%c%f%f%f,stu1.name,stu1.num,结构体数组,是结构体和数组的结合由同一结构体类型的结构体变量构成的数组例:结构体数组 struct cj_list char num10;char name10;int year;ch

6、ar sex;float math,English,computer,total;stu40;或 struct cj_list stu40;stu5.name0=T;stu5.math=90.5;,结构体嵌套示例,struct Date int year;int month;int day;,struct cj_list st;st.birthday.year=1990;st.birthday.month=5;st.birthday.day=14;,struct cj_list char num10;char name10;int year;char sex;float math,Englis

7、h,computer,total;,Date birthday;,结构体指针,指向结构体变量的指针 声明格式:struct 结构体名*结构体指针变量名;例:struct Child float height;float weight;Date brithday;char sex;struct Child*p;struct Child a=0.83,30.0,2003,5,17,M;p=,结构体与指针的一个重要应用 链表是一种动态进行存储分配的数据结构。链表的组成:由一系列结点组成 头指针:存放一个地址,该地址指向一个(头)结点 结点:实际数据和链接下一个节点的指针,9.2 链表,链表的建立,用

8、结构体建立链表:struct student int num;float score;struct student*next;;其中成员num和score用来存放结点中的用户需要用到的数据,next是指针类型的成员,它指向结构体struct student类型数据(下一个结点),简单链表,#include#define NULL 0 struct student long num;float score;struct student*next;main()struct student a,b,c,*head,*p;a.num=10101;a.score=89.5;b.num=10103;b.s

9、core=90;c.num=10107;c.score=85;head=,运行结果:10101 89.510103 90.010107 85.0,9.3 共用体,共用体类型的声明共用体变量的定义共用体成员的引用应注意的问题,共用体类型的声明,共用体类型的性质不同数据类型组成的集合体各个成员共享同一片存储空间,其他性质与结构体完全相同声明格式,union 共用体名 数据类型1 成员名1;数据类型2 成员名2;数据类型n 成员名n;,union cj int scroe;char rank;,又称联合体,共用体成员的引用示例,建立课程表,其中包括:课程号、开课年级、课程性质、任课老师、成绩,课程性

10、质若为P填分数,若为E则填等级。,struct Courseint id;int grade;char type;char teacher10;union cj course_cj;struct Course c_table10;,嵌套的共用体变量course_cj作为结构体类型Course的成员,union cj float score;char rank;course_cj;,共用体成员的引用示例,建立教师与学生登记表,其中包括ID识别号、姓名、身份标志、职称(教师)或年级(学生),如若身份标志为S则填年级信息,若身份标志为T则填职称信息,struct PERSON int id;char

11、 name10;char levelflag;union int grade;char jobtitle10;level;struct PERSON person;,嵌套的共用体变量level作为结构体类型PERSON的成员,注意:起作用的是最后一次赋值的成员即:每个时刻只有一个成员起作用,换言之,联合体的成员不能同时起作用,9.4 枚举类型及其应用,如果一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。声明枚举类型用enum开头 enum Color red,yellow,blue;enum Sex male,femal

12、e;,enumerate列举,枚举类型的声明,枚举类型的声明enum 枚举名 元素名1,元素名2,元素名n;例:enum MONTH JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC;枚举类型变量的定义例:enum MONTH month;例:enum weekday sun,mon,tue,wed,thu,fri,sat workday,week-end;,关于枚举类型的说明,枚举类型声明中的元素为枚举文字,不是变量枚举文字的值缺省时从0开始,依次递增显式定义枚举文字的值也是允许的例:enum weekday SUN=7,MON=1,TUE,WE

13、D,THU,FRI,SAT workday;枚举变量可用于比较或判断操作例:if(month=DEC)整数要先进行类型转换才可以赋给枚举变量workday=(weekday)5;即:FRI,9.5 类型别名定义,类型别名定义的一般格式typedef 原类型标识 新类型名;例一:typedef int INTEGER;例二:enum BOOL_TAG FALSE,TRUE;typedef enum Boolean;类型别名定义的性质新类型与原类型相同,并未产生新类型,重新命名的自定义类型使程序更易理解类型别名定义不是简单的类型替换:typedef char*PCHAR;PCHAR p,q;定义了

14、两个指针变量p、q,等价于:char*p,*q;而不是一个指针变量p与一个字符变量q,复合数据结构,复合数据结构数组定义与使用方法 字符型数组 同类型数据组成 int a10;下标:0 9 char s8;指针概念,指针基本运算,指针与数组的关系 指针与目标对象 p*p a&a结构体类型声明、结构体变量的定义与用法 不同类型数据组成 struct man.name共用体类型声明、共用体变量的定义与用法枚举类型的概念、定义与使用方法类型别名定义的方法与使用,struct PERSON char name8;char sex6;DATE birthday;char department10;int score;man;,struct DATE int year;int month;int day;,作 业,第201页:第一题(填空)第1 10小题,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号