第10章结构、共用及枚举

上传人:ni****g 文档编号:579908183 上传时间:2024-08-27 格式:PPT 页数:25 大小:291.02KB
返回 下载 相关 举报
第10章结构、共用及枚举_第1页
第1页 / 共25页
第10章结构、共用及枚举_第2页
第2页 / 共25页
第10章结构、共用及枚举_第3页
第3页 / 共25页
第10章结构、共用及枚举_第4页
第4页 / 共25页
第10章结构、共用及枚举_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《第10章结构、共用及枚举》由会员分享,可在线阅读,更多相关《第10章结构、共用及枚举(25页珍藏版)》请在金锄头文库上搜索。

1、1 C 程序设计基础程序设计基础复合数据类型复合数据类型数组数组指针指针结构体结构体联合体联合体 (共用体共用体)枚举枚举2 C 程序设计基础程序设计基础第九讲第九讲 结构、共用及枚举结构、共用及枚举 学习目标学习目标掌握掌握结构体结构体类型的声明、结构体变量的定类型的声明、结构体变量的定义及使用义及使用了解单链表的概念了解单链表的概念 (结构体与指针的典型应用结构体与指针的典型应用)了解了解共用体共用体类型的声明及变量的定义类型的声明及变量的定义了解了解枚举类型枚举类型的概念、定义及使用的概念、定义及使用了解了解自定义类型自定义类型的定义与使用方法的定义与使用方法3 C 程序设计基础程序设计

2、基础9.1 结构体结构体结构体类型的定义结构体类型的定义结构体变量的定义及初始化结构体变量的定义及初始化结构体成员的引用结构体成员的引用结构体数组结构体数组结构体指针结构体指针4 C 程序设计基础程序设计基础学生成绩表学生成绩表学号姓名出生年份性别数学英语计算机c001Tom1985M889088c002Jack1983M895880c003Rose1986F778374c004David1985M726377c005Mike1986M546258c006John1984F7065855 C 程序设计基础程序设计基础结构体类型的定义结构体类型的定义结构体类型的性质:不同数据类型组成的集合体结构

3、体类型的性质:不同数据类型组成的集合体定义格式定义格式structstruct 结构体名结构体名结构体名结构体名 类型类型类型类型1 1 成员名成员名成员名成员名1; 1; 类型类型类型类型2 2 成员名成员名成员名成员名2; 2; 类型类型类型类型n n 成员名成员名成员名成员名n n; ; ;structstruct DATE DATE intint yearyear; ; intint monthmonth; ; intint dayday; ; ;注意:注意:注意:注意: 定义结构体类型并不分配内存,定义变量时分配定义结构体类型并不分配内存,定义变量时分配定义结构体类型并不分配内存,定

4、义变量时分配定义结构体类型并不分配内存,定义变量时分配 结构体成员可以是与本结构体完全无关的其他结构体类结构体成员可以是与本结构体完全无关的其他结构体类结构体成员可以是与本结构体完全无关的其他结构体类结构体成员可以是与本结构体完全无关的其他结构体类型,但不能是自身型,但不能是自身型,但不能是自身型,但不能是自身struct cj_list char num10; char name10 ; int year ; char sex ; float math ,English ,computer ; ;struct DATE date;6 C 程序设计基础程序设计基础结构体变量的定义与初始化结构体

5、变量的定义与初始化结构体类型的变量定义结构体类型的变量定义按照结构体类型分配实际的按照结构体类型分配实际的存储空间存储空间声明格式:声明格式: struct 结构体名结构体名 变量名表变量名表;例:例:struct DATE date,brithday;结构体类型变量的初始化结构体类型变量的初始化按声明顺序逐成员进行按声明顺序逐成员进行例例: struct DATE date = 2008, 8, 8 ;struct cj_list stu1=c001,Tom,1990,M,88,90,88; 说明:初始化数据必须与结构体类型声明的类型与顺序完说明:初始化数据必须与结构体类型声明的类型与顺序完

6、全一致,各个成员初始值之间用逗号分隔全一致,各个成员初始值之间用逗号分隔structstruct DATE DATE intint yearyear; ; intint monthmonth; ; intint dayday; ; ; ;structstruct DATE DATE intint yearyear; ; intint monthmonth; ; intint dayday; ; date,brithdaydate,brithday; ;可可省省略略7 C 程序设计基础程序设计基础结构体变量所占内存空间结构体变量所占内存空间 C001Tom1985 M889088结构体变量所占内

7、存空间是其结构体变量所占内存空间是其各个成员所占内存空间之和各个成员所占内存空间之和。 例:struct cj_list char num10; char name10 ; int year ; char sex ; float math ,English ,computer ; stu1,stu2,stu3;程序中,可用sizeof(变量名或类型标识符),求得结构体变量所占内存空间的大小。例如,printf(%d,sizeof(stu1); printf(“%d”,sizeof(struct cj_list); 8 C 程序设计基础程序设计基础结构体成员的引用结构体成员的引用成员选择操作符成

8、员选择操作符“.” - 通过通过结构体变量结构体变量格式:格式:结构体变量名结构体变量名.成员名成员名例:例:struct DATE date; date.year = 2008;成员选择操作符成员选择操作符“” - 通过通过结构体指针结构体指针格式:格式:结构体变量名结构体变量名成员名成员名例:例:struct DATE *p = &date; pyear = 2008;说明:说明: pyear (*p).yearyearmonthday date9 C 程序设计基础程序设计基础例例10.1 编写程序定义一个结构体变量,并从键盘输入一组数编写程序定义一个结构体变量,并从键盘输入一组数 据,计

9、算出总分,并输出所有信息据,计算出总分,并输出所有信息 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,&stu1.year, &stu1.sex,&stu1.math,&stu1.English,&puter);

10、stu1.total=stu1.math+stu1.English+puter; printf (姓名姓名:%s,学号学号:%s,出生年份出生年份:%d,性别性别:%c,数学数学:%f,英语英语:%f, 计算机计算机:%f,总分总分:n%f,stu1.name,stu1.num,stu1.year, stu1.sex,stu1.math,stu1.English,puter,stu1.total);10 C 程序设计基础程序设计基础结构体数组结构体数组是结构体和数组的结合是结构体和数组的结合由同一结构体类型的结构体变量构成的数组由同一结构体类型的结构体变量构成的数组例:例:结构体数组结构体数组

11、 struct cj_list char num10; char name10; int year; char sex; float math, English, computer, total; stu40; 或或 struct cj_list stu40; stu5.name0=T; stu5. math=90.5; 11 C 程序设计基础程序设计基础结构体嵌套示例结构体嵌套示例structstruct Date Date intint year; year; intint month; month; intint day; day; ;structstruct cj_listcj_lis

12、t stst; ;stst. .birthdaybirthday. .yearyear = 1990; = 1990;stst. .birthdaybirthday. .monthmonth = 5; = 5;stst. .birthdaybirthday. .dayday = 14; = 14;struct cj_list char num10; char name10; int year; char sex; float math, English, computer, total; ;Date Date birthdaybirthday; ;12 C 程序设计基础程序设计基础结构体指针结

13、构体指针指向结构体变量的指针指向结构体变量的指针 声明格式:声明格式: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 = &a;结构体成员的引用结构体成员的引用 一般例:一般例:(*p).height = 0.83; 或或 p height = 0.83; 嵌套引用例:嵌套引用例:(*p).birthd

14、ay.year = 2003; 或或 p birthday.year = 2003; 13 C 程序设计基础程序设计基础结构体与指针的一个重要应用结构体与指针的一个重要应用 链表是一种动态进行存储分配的数据结构。链表是一种动态进行存储分配的数据结构。 链表的组成:由一系列结点组成链表的组成:由一系列结点组成 头指针:存放一个地址,该地址指向一个头指针:存放一个地址,该地址指向一个( (头头) )结点结点 结点:实际数据和链接下一个节点的指针结点:实际数据和链接下一个节点的指针9.2 链表链表14 C 程序设计基础程序设计基础链表的建立链表的建立用结构体建立链表:用结构体建立链表:structs

15、truct student student intint num num; float scorefloat score; structstruct student *next student *next; ; ; 其中成员其中成员numnum和和scorescore用来存放结点中的用户需要用到的用来存放结点中的用户需要用到的数据,数据,nextnext是指针类型的成员,它指向结构体是指针类型的成员,它指向结构体structstruct studentstudent类型数据类型数据( (下一个结点下一个结点) )15 C 程序设计基础程序设计基础简单链表 #include #define NU

16、LL 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.score=90; c. num=10107; c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do printf(%ld %5.1fn, p-num, p-score); p=p-next; while(p!=NULL

17、); 运行结果运行结果:10101 89.510103 90.010107 85.016 C 程序设计基础程序设计基础9.3 共用体共用体共用体类型的声明共用体类型的声明共用体变量的定义共用体变量的定义共用体成员的引用共用体成员的引用应注意的问题应注意的问题17 C 程序设计基础程序设计基础共用体类型的声明共用体类型的性质共用体类型的性质不同数据类型组成的集合体不同数据类型组成的集合体各个成员共享同一片存储空间各个成员共享同一片存储空间,其他性质与结构,其他性质与结构体完全相同体完全相同声明格式声明格式union union 共用体名共用体名共用体名共用体名 数据类型数据类型数据类型数据类型1

18、 1 成员名成员名成员名成员名1; 1; 数据类型数据类型数据类型数据类型2 2 成员名成员名成员名成员名2; 2; 数据类型数据类型数据类型数据类型n n 成员名成员名成员名成员名n n; ; ;union union cjcj intint scroescroe; ; char rank; char rank; ; 又称又称联合联合体体18 C 程序设计基础程序设计基础共用体成员的引用示例共用体成员的引用示例建立课程表,其中包括:建立课程表,其中包括:课程号课程号、开课年级、开课年级、课程性质课程性质、任课、任课老师、成绩,老师、成绩,课程性质课程性质若为若为P填分数,若为填分数,若为E则

19、填等级。则填等级。structstruct Course Course intint id; id;intint grade; grade;char type;char type;char teacher10;char teacher10; union union cjcj course_cjcourse_cj; ; ;structstruct Course c_table10; Course c_table10;嵌套的共用体变量嵌套的共用体变量嵌套的共用体变量嵌套的共用体变量course_cjcourse_cj作为作为作为作为结构体类型结构体类型结构体类型结构体类型CourseCourse的

20、成员的成员的成员的成员 union union cjcj float score; float score; char rank; char rank; course_cjcourse_cj; ;19 C 程序设计基础程序设计基础共用体成员的引用示例共用体成员的引用示例建立教师与学生登记表,其中包括建立教师与学生登记表,其中包括ID识别号、姓名、身份标识别号、姓名、身份标志、职称(教师)或年级(学生),如若身份标志为志、职称(教师)或年级(学生),如若身份标志为S则填年级信息,若身份标志为则填年级信息,若身份标志为T则填职称信息则填职称信息structstruct PERSON PERSON

21、intint idid; ; char char namename10;10; char char levelflaglevelflag; ; unionunion intint gradegrade; ; char char jobtitlejobtitle10;10; levellevel; ; ;structstruct PERSON PERSON personperson; ;嵌套的共用体变量嵌套的共用体变量嵌套的共用体变量嵌套的共用体变量levellevel作为结构作为结构作为结构作为结构体类型体类型体类型体类型PERSONPERSON的成员的成员的成员的成员 注意:起作用的是最后一

22、注意:起作用的是最后一次赋值的成员次赋值的成员即:每个时刻只有一个成员即:每个时刻只有一个成员起作用,换言之,联合体的起作用,换言之,联合体的成员不能同时起作用成员不能同时起作用20 C 程序设计基础程序设计基础9.4 枚举类型及其应用枚举类型及其应用如果一个变量只有几种可能的值,可以如果一个变量只有几种可能的值,可以定义为枚举类型。定义为枚举类型。所谓所谓“枚举枚举”是指将变量的值一一列举是指将变量的值一一列举出来,变量的值只限于列举出来的值的出来,变量的值只限于列举出来的值的范围内。范围内。声明枚举类型用声明枚举类型用enum开头开头 enum Color red, yellow, blu

23、e ; enum Sex male, female ;enumerate列举列举21 C 程序设计基础程序设计基础枚举类型的声明枚举类型的声明枚举类型的声明枚举类型的声明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-en

24、d;22 C 程序设计基础程序设计基础关于枚举类型的说明关于枚举类型的说明枚举类型声明中的元素为枚举文字,不是变量枚举类型声明中的元素为枚举文字,不是变量枚举文字的枚举文字的值值缺省时从缺省时从0开始,依次递增开始,依次递增显式定义枚举文字的值也是允许的显式定义枚举文字的值也是允许的例:例: enum weekday SUN=7, MON=1, TUE, WED, THU, FRI, SAT workday;枚举变量可用于比较或判断操作枚举变量可用于比较或判断操作例:例:if( month = DEC ) 整数要先进行类型转换才可以赋给枚举变量整数要先进行类型转换才可以赋给枚举变量workda

25、y=(weekday)5; 即:即:FRI23 C 程序设计基础程序设计基础9.5 类型别名定义类型别名定义类型别名定义的一般格式类型别名定义的一般格式typedef 原类型标识原类型标识 新类型名新类型名;例一:例一:typedef int INTEGER;例二:例二:enum BOOL_TAG FALSE, TRUE ; typedef enum Boolean;类型别名定义的性质类型别名定义的性质新类型与原类型相同,并未产生新类型,新类型与原类型相同,并未产生新类型,重新命名的自定义重新命名的自定义类型使程序更易理解类型使程序更易理解类型别名定义不是简单的类型替换:类型别名定义不是简单的

26、类型替换: typedef char* PCHAR; PCHAR p, q; 定义了两个指针变量定义了两个指针变量p 、q,等价于:等价于: char * p,*q; 而不是一个指针变量而不是一个指针变量p与一个字符变量与一个字符变量q24 C 程序设计基础程序设计基础复合数据结构复合数据结构复合数据结构复合数据结构数组数组定义与使用方法定义与使用方法 字符型数组字符型数组 同类型数据组成同类型数据组成 int a10; 下标下标: 0 9 char s8;指针指针概念,指针基本运算,指针与数组的关系概念,指针基本运算,指针与数组的关系 指针与目标对象指针与目标对象 p *p a &a结构体结

27、构体类型声明、结构体变量的定义与用法类型声明、结构体变量的定义与用法 不同类型数据组成不同类型数据组成 struct man.name共用体共用体类型声明、共用体变量的定义与用法类型声明、共用体变量的定义与用法枚举类型枚举类型的概念、定义与使用方法的概念、定义与使用方法类型别名定义类型别名定义的方法与使用的方法与使用struct PERSON char name8; char sex6; DATE birthday; char department10; int score; man;structstruct DATE DATE intint yearyear; ; intint monthmonth; ; intint dayday; ; ;25 C 程序设计基础程序设计基础作作 业业第第201页:页:第一题(填空)第一题(填空) 第第1 10小题小题

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号