收藏 分享(赏)

ch8 结构、联合、位运算和枚举类型.ppt

上传人:gnk289057 文档编号:9901889 上传时间:2019-09-17 格式:PPT 页数:124 大小:613KB
下载 相关 举报
ch8 结构、联合、位运算和枚举类型.ppt_第1页
第1页 / 共124页
ch8 结构、联合、位运算和枚举类型.ppt_第2页
第2页 / 共124页
ch8 结构、联合、位运算和枚举类型.ppt_第3页
第3页 / 共124页
ch8 结构、联合、位运算和枚举类型.ppt_第4页
第4页 / 共124页
ch8 结构、联合、位运算和枚举类型.ppt_第5页
第5页 / 共124页
点击查看更多>>
资源描述

1、2019/9/17,主讲教师:四川大学计算机学院 陈良银,1,主讲教师:* 个人主页:*,C语言程序设计(C99版),四川大学计算机学院,四川大学计算机学院,2019/9/17,主讲教师:四川大学计算机学院 陈良银,2,教材:C语言程序设计(C99版),陈良银 游洪跃 李旭伟 主编 李志蜀 唐宁九 李 涛 主审清华大学出版社 2006年9月出版,2019/9/17,主讲教师:四川大学计算机学院 陈良银,3,本书内容,第1章 基础知识 第2章 C语言的基本要素 第3章 变量名、数据类型、运算符和表达式 第4章 C程序基本控制结构 第5章 函数 第6章 数组和指针 第7章 递归 第8章 结构、联合

2、、位运算和枚举类型 第9章 预处理命令 第10章 文件 第11章 高级话题 第12章 C89 Vs C99 实验 (待安排),2019/9/17,主讲教师:四川大学计算机学院 陈良银,4,枚举类型,本章主要内容,ARM Vector Table,FIQ,IRQ,(Reserved),Data Abort,Prefetch Abort,Software Interrupt,Undefined Instruction,Reset,1,3,2,联合,结构,4,类型定义:typedef,5,位段,2019/9/17,主讲教师:四川大学计算机学院 陈良银,5,本章的节本要求,本章主要介绍C语言的结构、联

3、合、枚举类型、类型定义:typedef和段位的基本概念和使用方法。 本章要求读者能使用结构、联合、枚举类型、类型定义:typedef和段位的编写简单的应用程序。 希望读者在计算机上调试运行教材中的程序。 在网页:http:/ 陈良银,6,8.1 结构 8.1.1概述,在解决实际问题中,一组数据一般具有不同的数据类型。“结构“是一种构造类型,它由若干“成员“组成的。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,7,8.1.2结构的声明,一、结构类型的定义 定义一个结构的一般形式为: struct 结构类型名 成员表列 ; 成员表由若干个成员组成,每个成员都是该结构的一个组成部分。对

4、每个成员也必须作类型说明,其形式为: 类型说明符 成员名; 成员名的命名应符合标识符的书写规定。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,8,8.1.2结构的声明,例如: struct StudentType /* 定义结构类型 */ int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */float score; /* 成绩 */ ;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,9,在上面的结构定义中,结构名为StudentType,此结构由4个成员组成,如下图所示。 第一个成员为num,整型变量;第二个

5、成员为name,字符指针;第三个成员为sex,字符数组;第四个成员为score,实型变量。 注意在括号后的分号是不可缺少的。结构定义后,即可进行变量说明。 凡说明为结构StudentType的变量都由上述4个成员组成。结构是一种构造的数据类型,是数目固定,类型不同的若干有序变量的集合。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,10,二、结构类型变量的定义 以上面定义的SttudentType为例来加以说明 1先定义结构类型,再说明结构变量。 这种定义一个结构变量的一般形式如下:struct 结构类型名 成员表列 ; 结构类型名 结构变量列表;,2019/9/17,主讲教师:四

6、川大学计算机学院 陈良银,11,上面结构变量列表中不同结构变量之间用逗号“,“隔开,例如:struct StudentType /* 定义结构类型 */ int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */float score; /* 成绩 */ ; struct StudentType boy, girl; /* 定义结构变量 */上面定义了两个变量boy和girl为StudentType结构类型。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,12,2在定义结构类型的同时说明结构变量。 这种定义一个结构变量的一般形式

7、如下:struct 结构类型名 成员表列 结构变量列表;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,13,例如: struct StudentType /* 定义结构类型 */ int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */float score; /* 成绩 */ boy, girl; /* 定义结构类型变量 */上面的定义与第一种方法相同,也定义了两个变量boy和girl为StudentType结构类型。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,14,3直接说明结构变量 这种定义一个结构变量

8、的一般形式如下:struct 成员表列 结构变量列表;例如: struct int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */float score; /* 成绩 */ boy, girl; /* 定义结构类型变量 */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,15,结构类型的成员也可以又是一个结构, 即构成了嵌套的结构类型。例如,按下图可给出以下结构定义:,2019/9/17,主讲教师:四川大学计算机学院 陈良银,16,struct DateType /* 定义结构类型 */ int year; /* 年 */i

9、nt month; /* 月 */int day; /* 日 */ ; 定义结构类型 */ int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */struct DateType birthday /* 生日 */float score; /* 成绩 */ boy, girl; /* 定义结构类型变量 */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,17,在ANSI C中除了允许具有相同类型的结构变量相互赋值以外, 一般对结构变量的使用,包括赋值、输入、输出、 运算等都是通过结构变量的成员来实现的。,2019/9/17,主

10、讲教师:四川大学计算机学院 陈良银,18,8.1.3结构类型变量的引用,表示结构变量成员的一般形式是: 结构变量名.成员名 结构变量的赋值就是给各成员赋值。 可用输入语句或赋值语句来完成,下面通过示例进行说明。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,19,例8.1 试编写为结构变量赋值并输出其值的程序。 S8_1.C/* 为结构变量student赋值 */student.num = 10101; /* 为num赋值 */student.name = “德华刘“; /* 为name赋值 */strcpy(student.sex, “男“); /* 为sex复制赋值 */stu

11、dent.birthday.year = 1962;/* 为year赋值 */student.birthday.month= 8; /* 为month赋值 */student.birthday.day = 18; /* 为day赋值 */student.score = 98.1;/* 为score赋值 */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,20,/* 输出结构变量student */printf(“学号:%dn“, student.num); /* 输出num */printf(“姓名:%sn“, student.name); /* 输出name */printf(“

12、性别:%sn“, student.sex); /* 输出sex */printf(“生日:%d年,%d月,%d日n“, /* 输出birthday */student.birthday.year, student.birthday.month,student.birthday.day);printf(“成绩:%4.1fn“, student.score); /* 输出score */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,21,程序运行结果如下:,2019/9/17,主讲教师:四川大学计算机学院 陈良银,22,8.1.4结构变量的初始化,结构体变量也与其他为变量一样,可以在

13、定义的同时进行初始化,下面通过示例加以说明。 例 8.2 对结构变量初始化并输出其值。S8_2.Cstruct StudentType student = /* 定义结构类型变量并同时进行初始化 */10168, /* 初始化num */“学友张“, /* 初始化name */“男“, /* 初始化sex */1963, 6, 18, /* 初始化birthday */99.8 /* 初始化score */;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,23,8.1.4结构变量的初始化,/* 输出结构变量student */printf(“学号:%dn“, student.num

14、);/* 输出num */printf(“姓名:%sn“, student.name);/* 输出name */printf(“性别:%sn“, student.sex); /* 输出sex */printf(“生日:%d年%d月%d日n“, /* 输出birthday */student.birthday.year, student.birthday.month, student.birthday.day);printf(“成绩:%4.1fn“, student.score);/* 输出score */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,24,8.1.4结构变量的初始

15、化,程序运行结果如下:,2019/9/17,主讲教师:四川大学计算机学院 陈良银,25,8.1.5结构数组,数组元素也可以是结构类型的。 可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。 在实际应用中,经常用结构数组来表示具有相同结构的一个群体。如一个班的学生信息,一个车间职工信息等。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,26,一、结构数组的定义 结构数组的定义方法和结构变量相似,只需说明它为数组类型即可。例如: #define N 3struct StudentType /* 定义结构类型 */ int num; /* 学号 */char *

16、name; /* 姓名 */char sex3; /* 性别 */int age; /* 年龄 */float score; /* 成绩 */ ;struct StudentType studentN; /* 定义结数组 */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,27,上面定义了数组student,元素类型为StduentType,数组共有N个元素,读者也可象定义结构类型变量一样进行直接定义,例如:#define N 3struct StudentType /* 定义结构类型 */ int num; /* 学号 */char *name; /* 姓名 */char sex

17、3; /* 性别 */int age; /* 年龄 */float score; /* 成绩 */ studentN; /* 定义结构数组 */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,28,或 #define N 3struct int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */int age; /* 年龄 */float score; /* 成绩 */ studentN; /* 定义结构数组 */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,29,如下图所示。,2019/9/17,主讲教师:四川大

18、学计算机学院 陈良银,30,二、结构数组的初始化 与其他类型的数组一样,对结构数组可以作初始化赋值,下面通过示例加以说明。 例 8.3 对结构数组初始化并输出结构变量。S8_3.Cstruct StudentType studentN = /* 定义结数组并进行初始化 */10101, “德华刘“, “男“, 42, 98.1,10102, “靓影张“, “女“, 22, 99.8,10103, “学友张“, “男“, 43, 96.5;/* 输出结构数组student */for (i = 0; i N; i+) /* 输出第i个学生信息 */printf(“%8d“, studenti.n

19、um); /* 输出num */printf(“%12s“, studenti.name); /* 输出name */printf(“%6s“, studenti.sex); /* 输出sex */printf(“%6d“, studenti.age); /* 输出age */printf(“%8.1fn“, studenti.score);/* 输出score */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,31,程序运行结果如下:,2019/9/17,主讲教师:四川大学计算机学院 陈良银,32,定义结构数组时,可不指定元素个数,例如struct StudentType st

20、udent = /* 定义结数组并进行初始化 */10101, “德华刘“, “男“, 42, 98.1,10102, “靓影张“, “女“, 22, 99.8,10103, “学友张“, “男“, 43, 96.5 ;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,33,在编译时,系统将根据初始结构个数自动地确定数组元素个数,当然也可采用如下的直接定义结构数组并初始化的形式:struct StudentType /* 定义结构类型 */ int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */int age; /* 年龄 *

21、/float score; /* 成绩 */ student = /* 定义结数组并进行初始化 */10101, “德华刘“, “男“, 42, 98.1,10102, “靓影张“, “女“, 22, 99.8,10103, “学友张“, “男“, 43, 96.5 ;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,34,或struct int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */int age; /* 年龄 */float score; /* 成绩 */ student = /* 定义结数组并进行初始化 */10

22、101, “德华刘“, “男“, 42, 98.1,10102, “靓影张“, “女“, 22, 99.8,10103, “学友张“, “男“, 43, 96.5 ;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,35,三、结构数组实例 下面将举一些简单的说明性示例说明结构数组的使用方法。 例8.4计算学生的平均成绩以及及格的人数。S8_4.C/* 计算平均成绩及及格学生人数 */for (i = 0; i = 60) /* 及格, numOfPass自加1 */countOfPass+;av = sum / N;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,36,程

23、序运行结果如下:,2019/9/17,主讲教师:四川大学计算机学院 陈良银,37,例8.5 建立同学通讯录。S8_5.Cfor (i = 0; i NUM; i+) /* 输入通讯信息 */printf(“n输入第%d个人通讯信息:n“, i + 1);printf(“输入姓名:“);gets(menberi.name);printf(“输入电话号码:“);gets(menberi.phone);printf(“nn姓名ttt电话号码nn“);for (i = 0; i NUM; i+) /* 输出个人通讯信息 */ printf(“%sttt%sn“,menberi.name,menberi

24、.phone);,2019/9/17,主讲教师:四川大学计算机学院 陈良银,38,程序参考运行结果如下:,2019/9/17,主讲教师:四川大学计算机学院 陈良银,39,8.1.5指向结构类型的指针,一、指向结构变量的指针 当指针变量用来指向一个结构变量时,这样的指针变量称之为结构指针变量。结构指针变量中的值就是所指向的结构变量的首地址。读者可通过结构指针访问该结构变量,结构指针变量说明的一般形式为: 结构类型名 *结构指针变量名 例如,在前面的例8.1定义了StudentType这个结构类型, 如要说明一个指向StudentType的指针变量pStudent,可写为:struct Stude

25、ntType *pStudent;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,40,也可在定义结构类型的同时说明pStudent,例如:struct StudentType /* 定义结构类型 */ int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */DateType birthday; /* 生日 */float score; /* 成绩 */ *pStudent;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,41,或struct int num; /* 学号 */char *name; /* 姓名 *

26、/char sex3; /* 性别 */DateType birthday; /* 生日 */float score; /* 成绩 */ *pStudent;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,42,结构指针变量必须要赋值之后才能使用,赋值是将结构变量的首地址赋予该指针变量, 不能将结构类型名的地址赋值给指针变量,例如:struct StudentType /* 定义结构类型 */ int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */DateType birthday; /* 生日 */float score;

27、 /* 成绩 */ ;struct StudentType boy, *pStudent; /* boy为结构变量,pStudent为结构指针变量 */pStudent = 错误,不能将结构类型名的地址赋值给pStudent */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,43,有了结构指针变量,就能更方便地访问结构变量的各个成员。其访问的一般形式为: (*结构指针变量).成员名 或 结构指针变量-成员名,2019/9/17,主讲教师:四川大学计算机学院 陈良银,44,例如: (*pStudent).num 或 pStudent-num 注意:(*pStudent)两侧的括号不

28、可少,这是由于成员符“.“的优先级高于“*“。如去掉括号写作*pStudent.num则等效于*( pStudent.num),意义是完全不对了。下面通过例子来说明结构指针变量的具体说明和使用方法。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,45,例8.6 结构指示使用示例。 S8_6.C 说明:在C语言中,pStudent-num与(*pStudent).num等价,但前者更直观,希望读者多使用前者的形式。struct StudentType /* 定义结构类型 */int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 *

29、/struct DateType birthday; /* 生日 */float score; /* 成绩 */;struct StudentType student; /* 定义结构类型变量student */struct StudentType *pStudent;/* 结构指针变量pStudent */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,46,pStudent = /* 为score赋值 */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,47,/* 输出学生信息 */printf(“学号:%dn“, pStudent-num); /* 输出num *

30、/printf(“姓名:%sn“, pStudent-name); /* 输出name */printf(“性别:%sn“, pStudent-sex); /* 输出sex */printf(“生日:%d年,%d月,%d日n“, /* 输出birthday */pStudent-birthday.year, pStudent-birthday.month,pStudent-birthday.day);printf(“成绩:%4.1fn“, pStudent-score);/* 输出score */说明:在C语言中,pStudent-num与(*pStudent).num等价,但前者更直观,希望

31、读者多使用前者的形式。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,48,二、指向结构数组变量的指针 前面已介绍过可使用指向数组元素的指针,同样地对于结构数组,也可用指针来指向结构数组元素,设pStudent为指向结构数组元素的指针变量,则pStudent也指向该结构数组的1个元素,pStudent + 1指向2号元素,pStudent + i则指向i+1号元素。 这与普通数组的情况是一致的。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,49,例8.7 用指针变量输出结构数组。 S8_7.C/* 输出结构数组student */for (pStudent = stu

32、dent; pStudent num); /* 输出num */printf(“%12s“, pStudent-name); /* 输出name */printf(“%6s“, pStudent-sex); /* 输出sex */printf(“%6d“, pStudent-age); /* 输出age */printf(“%8.1fn“, pStudent-score);/* 输出score */ 程序运行结果如下所示:,2019/9/17,主讲教师:四川大学计算机学院 陈良银,50,8.2 联合 8.2.1联合的概念,与结构类型一样,联合类型也是一种构造类型。 在一个联合类型内可以定义多种

33、不同的数据类型,在一个被说明为该联合类型的变量中,各个成员共享同一个存储空间。 联合类型与结构类型有一些相似之处。但两者有本质上的不同。在结构类型中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在联合类型中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,51,8.2.2 联合的定义,定义一个联合类型的一般形式为:union 联合类型名 成员表 ;成员表中含有若干成员,成员的一般形式为:类型说明符 成员名; 成员名的命名应符合标识符的规定。,2019/9/17,主讲教师:四川大学计算机学院 陈良

34、银,52,例如: union ClassOrOfficeType int clas; /* 班级 */char office10; /* 教研室 */ ;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,53,8.2.3联合变量的说明,(1) 选定义联合类型,再说明联合变量union ClassOrOfficeType int clas; /* 班级 */char office10; /* 教研室 */ ; union ClassOrOfficeType classOrOffice;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,54,(2)定义联合类型的同时说明联合变量

35、union ClassOrOfficeType int clas; /* 班级 */char office10; /* 教研室 */ classOrOffice; (3)和直接说明联合变量。union int clas; /* 班级 */char office10; /* 教研室 */ classOrOffice;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,55,经说明后的classAndOffice变量为ClassAndOfficeType类型。 它们的内存分配示意图如下图所示。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,56,8.2.4联合变量的赋值和使用,

36、对联合变量的赋值,只能对变量的成员进行赋值。 联合变量的成员表示为: 联合变量名.成员名 例如,classOrOffice被说明为ClassOrOfficeType类型的变量之后,可对classOrOffice.clas或classOrOffice.office进行赋值。 不允许对联合变量作初始化赋值,赋值只能在程序中进行。还要再强调说明的是,一个联合变量, 每次只能赋予一个成员值。换句话说,一个联合变量的值就是联合变员的某一个成员值。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,57,例8.8设有一个教师与学生通用的表格,教师数据有姓名,年龄,身份,教研室四项。学生有姓名,年龄

37、,身份,班级四项。编程输入人员数据, 再以表格输出。 S8_8.C/* 输入个人个息 */for (i = 0; i N; i+) /* 输入第i+1个人信息 */printf(“第%d个人的输入姓名,年龄,身份,班级或教研室n“, i + 1);scanf(“%s %d %c“, personi.name, ,2019/9/17,主讲教师:四川大学计算机学院 陈良银,58,/* 输出个人个息 */printf(“nn姓名t年龄t身份t班级/教研室n“);for (i = 0; i N; i+) /* 输出第i+1个人的信息 */if (personi.identity = s) /* 输出学

38、生信息 */printf(“%st%3dt%3ct%dn“, personi.name, personi.age,personi.identity,personi.classOrOffice.clas);else /* 输出教师信息 */printf(“%st%3dt%3ct%dn“,personi.name, personi.age,personi.identity,personi.classOrOffice.office);,2019/9/17,主讲教师:四川大学计算机学院 陈良银,59,程序运行结果如下所示:,2019/9/17,主讲教师:四川大学计算机学院 陈良银,60,8.3 枚举类

39、型,在实际问题中, 有些变量的取值被限定在一个有限的范围内。为此,语言提供了一种所谓的枚举的类型。在枚举类型的定义中列举出所有可能的取值, 被说明为该枚举类型的变量取值不能超过定义的范围。应该说明的是, 枚举类型是一种基本数据类型,而不是一种构造类型, 因为它不能再分解为任何基本类型。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,61,8.3.1枚举类型的定义和枚举变量的说明,一、枚举类型的定义 枚举类型定义的一般形式为: enum 枚举类型名 枚举值表 ;在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,62,例如

40、:enum WeekdayType sun, mou, tue, wed, thu, fri, sat ;此枚举类型名为WeekdayType,枚举值共有7个,即一周中的七天。 凡被说明为WeekdayType类型变量的取值只能是七天中的某一天。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,63,二、枚举变量的说明 (1) 先定义后说明 enum WeekdayType sun, mou, tue, wed, thu, fri, sat ; enum WeekdayType today, yesterday, tomorrow,2019/9/17,主讲教师:四川大学计算机学院 陈

41、良银,64,(2)同时定义说明enum WeekdayType sun, mou, tue, wed, thu, fri, sat today, yesterday, tomorrow; (3)直接说明enum sun, mou, tue, wed, thu, fri, sat today, yesterday, tomorrow;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,65,三、枚举类型变量的使用 枚举类型在使用中有以下规定: 1枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举WeekdayType的元素再作以下赋值: sun = 5; mon = 2

42、; sun = mon; 都是错误的。 2枚举元素本身由系统定义了一个表示序号的数值,缺省从0 开始顺序定义为0,1,2。如在WeekdayType中,sun值为0,mon值为1, ,sat值为6。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,66,例8.9 枚举元素值示例S8_9.Cenum WeekdayType /* 定义枚举类型 */sun, mon, tue, wed, thu, fri, sat;enum WeekdayType weekday; /* 定义枚举变量 */weekday = sun;printf(“%6dn“, weekday); /* 输出sum值

43、*/weekday = mon;printf(“%6dn“, weekday); /* 输出mon值 */weekday = tue;printf(“%6dn“, weekday); /* 输出tue值 */weekday = wed;printf(“%6dn“, weekday); /* 输出wed值 */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,67,程序运行结果如下所示:,2019/9/17,主讲教师:四川大学计算机学院 陈良银,68,要使枚举值从1到7,可使用如下方式定义: enum WeekdayType /* 定义枚举类型 */sun = 1, mon, tue,

44、 wed, thu, fri, sat ;,2019/9/17,主讲教师:四川大学计算机学院 陈良银,69,3只能将枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。例如: weekday = sun; 是正确的,而 weekday = 0; 是错误的。 如一定要把数值赋予枚举变量,则必须用强制类型转换,如: weekday = ( WeekdayType)6; 其意义是将顺序号为6的枚举元素赋予枚举变量weekday,相当于: weekday = sat; 还应该说明的是枚举元素是标识符,而不是字符常量也不是字符串常量, 使用时不要加单、双引号。,2019/9/17,主讲教师:四川大学计

45、算机学院 陈良银,70,例8.10 在口袋中装有红、黄、蓝和白4种颜色的小球苦干个,每次从口袋中先后取出3个小球,试编程输出在得到的3种不同色的球的可能取法的排列情况。S8_10.C 用枚举类型来表示不同的颜色,用count对不同色球的排列进行计数。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,71,/* 显示颜色color */ void PrintColor(enum ColorType color) switch (color)case red: /* 显示红色 */printf(“%-10s“, “red“);break;case yellow: /* 显示黄色 */pr

46、intf(“%-10s“, “yellow“);break;case blue: /* 显示蓝色 */printf(“%-10s“, “blue“);break;case white: /* 显示白色 */printf(“%-10s“, “white“);break; ,2019/9/17,主讲教师:四川大学计算机学院 陈良银,72,for (i = 0; i 4; i+)color_i = (enum ColorType)i;/* 强制转换成枚举类型 */for (j = 0; j 4; j+)color_j = (enum ColorType)j;/* 强制转换成枚举类型 */ if (c

47、olor_i != color_j)for (k = 0; k 4; k+)color_k = (enum ColorType)k;/* 强制转换成枚举类型 */ if (color_k != color_i /* 换行 */,2019/9/17,主讲教师:四川大学计算机学院 陈良银,73,2019/9/17,主讲教师:四川大学计算机学院 陈良银,74,8.4 类型定义:typedef,可使用typedef声明新的类型名来代替已有的类型名。 typedef定义的一般形式为: typedef 原类型名 新类型名; 例如,在一个程序中,如果一个整型变量用来计数,可将整型int声明为CountTyp

48、e,具体代码如下: typedef int CountType; 这样在程序中使用声明: CountType i; 定义CountType类型的变量i,其意义更加明确,可读性更强。,2019/9/17,主讲教师:四川大学计算机学院 陈良银,75,可以声明结构类型如下: typedef struct int num; /* 学号 */char *name; /* 姓名 */char sex3; /* 性别 */int age; /* 年龄 */float score; /* 成绩 */ StudentType; 可用新声明的类型名StudentType代替上面的结构类型,进行如下的变量声明: StudentType person; /* person为结构变量 */ StudentType *pStudent; /* pStudent为指向结构类型的指针 */,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报