ch8 结、联合、位运算和枚举类型_第1页
ch8 结、联合、位运算和枚举类型_第2页
ch8 结、联合、位运算和枚举类型_第3页
ch8 结、联合、位运算和枚举类型_第4页
ch8 结、联合、位运算和枚举类型_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 1主讲教师:*个人主页:* 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 2教材:教材:c语言程序设计(语言程序设计(c

2、99版)版)陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 主编主编李志蜀李志蜀 唐宁九唐宁九 李李 涛涛 主审主审清华大学出版社清华大学出版社20062006年年9 9月出版月出版 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 3本书本书内容内容 第第1 1章章 基础知识基础知识第第2 2章章 c c语言的基本要素语言的基本要素第第3 3章章 变量名、数据类型、运算符和表达式变量名、数

3、据类型、运算符和表达式第第4 4章章 c c程序基本控制结构程序基本控制结构第第5 5章章 函数函数第第6 6章章 数组和指针数组和指针第第7 7章章 递归递归第第8 8章章 结构、联合、位运算和枚举类型结构、联合、位运算和枚举类型 第第9 9章章 预处理命令预处理命令 第第1010章章 文件文件 第第1111章章 高级话题高级话题第第1212章章 c89 vs c99c89 vs c99实验实验 (待安排)(待安排) 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章202

4、1-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 4枚举类型枚举类型本章主要内容本章主要内容arm vector tablefiqirq(reserved)data abortprefetch abortsoftware interruptundefined instructionreset0 x1c0 x180 x140 x100 x0c0 x080 x040 x00联合联合结构结构类型定义:类型定义:typedef位段位段 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c9

5、9c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 5本章的节本要求本章的节本要求 本章主要介绍本章主要介绍c语言的语言的结构结构、联合联合、枚枚举类型举类型、类型定义类型定义:typedef和和段位段位的基的基本概念和使用方法。本概念和使用方法。 本章要求读者能使用本章要求读者能使用结构结构、联合联合、枚枚举类型举类型、类型定义类型定义:typedef和和段位段位的编的编写简单的应用程序。写简单的应用程序。 希望读者在计算机上调试运行教材中希望读者在计算机上调试运行教材中的程序。的程序。 在网页:在网页:http:

6、/ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 68.1 结构结构 8.1.1概述概述 在解决实际问题中,一组数据一般具有不在解决实际问题中,一组数据一般具有不同的数据类型。同的数据类型。 结构结构是一种构造类型,它由若干是一种构造类型,它由若干成员成员组成的。组成的。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设

7、计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 78.1.2结构的声明结构的声明 一、结构类型的定义一、结构类型的定义 定义一个结构的一般形式为:定义一个结构的一般形式为: struct 结构类型名结构类型名 成员表列成员表列 ; 成员表由若干个成员组成,每个成员成员表由若干个成员组成,每个成员都是该结构的一个组成部分。对每个都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:成员也必须作类型说明,其形式为:类型说明符类型说明符 成员名成员名; 成员名的命名应符合标识符的书写规成

8、员名的命名应符合标识符的书写规定。定。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 88.1.2结构的声明结构的声明 例如:例如: struct studenttype/* 定义结构类型定义结构类型 */int num;/* 学号学号 */char *name;/* 姓名姓名 */char sex3;/* 性别性别 */float score;/* 成绩成绩 */; 主编:主编:

9、 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 9 在上面的结构定义中,结构名为在上面的结构定义中,结构名为studenttype,此此结构由结构由4个成员组成,如下图所示。个成员组成,如下图所示。 第一个成员第一个成员为为num,整型变量;第二个成员为整型变量;第二个成员为name,字符指字符指针;第三个成员为针;第三个成员为sex,字符数组;第四个成员为字符数组;第四个成员为score,实型

10、变量。实型变量。 注意在括号后的分号是不可缺注意在括号后的分号是不可缺少的。结构定义后,即可进行变量说明。少的。结构定义后,即可进行变量说明。 凡说明凡说明为结构为结构studenttype的变量都由上述的变量都由上述4个成员组成。个成员组成。结构是一种构造的数据类型,是数目固定,类型结构是一种构造的数据类型,是数目固定,类型不同的若干有序变量的集合。不同的若干有序变量的集合。numnamesexscore 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-1

11、0主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 10 二、结构类型变量的定义二、结构类型变量的定义 以上面定义的以上面定义的sttudenttype为例来加以为例来加以说明说明 1先定义结构类型,再说明结构变量。先定义结构类型,再说明结构变量。 这种定义一个结构变量的一般形式如下:这种定义一个结构变量的一般形式如下:struct 结构类型名结构类型名 成员表列成员表列 ;结构类型名结构类型名 结构变量列表结构变量列表; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版)

12、清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 11 上面结构变量列表中不同结构变量之间用上面结构变量列表中不同结构变量之间用逗号逗号,隔开,例如:隔开,例如: struct studenttype/* 定义结构类型定义结构类型 */int num;/* 学号学号 */char *name;/* 姓名姓名 */char sex3;/* 性别性别 */float score;/* 成绩成绩 */; struct studenttype boy, girl;/* 定义结构变量定义结构变量 */ 上面定义了两个变量上面定义了两个变量bo

13、y和和girl为为studenttype结构类型。结构类型。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 12 2在定义结构类型的同时说明结构变量。在定义结构类型的同时说明结构变量。 这种定义一个结构变量的一般形式如下:这种定义一个结构变量的一般形式如下:struct 结构类型名结构类型名 成员表列成员表列 结构变量列表结构变量列表; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李

14、旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 13 例如:例如: struct studenttype/* 定义结构类型定义结构类型 */int num;/* 学号学号 */char *name;/* 姓名姓名 */char sex3;/* 性别性别 */float score;/* 成绩成绩 */ boy, girl;/* 定义结构类型变量定义结构类型变量 */ 上面的定义与第一种方法相同,也定义了上面的定义与第一种方法相

15、同,也定义了两个变量两个变量boy和和girl为为studenttype结构类型。结构类型。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 14 3直接说明结构变量直接说明结构变量 这种定义一个结构变量的一般形式如下:这种定义一个结构变量的一般形式如下:struct 成员表列成员表列 结构变量列表结构变量列表; 例如:例如: structint num;/* 学号学号 */char

16、 *name;/* 姓名姓名 */char sex3;/* 性别性别 */float score;/* 成绩成绩 */ boy, girl;/* 定义结构类型变量定义结构类型变量 */ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 15 结构类型的结构类型的成员也可以又是一个结构成员也可以又是一个结构, 即构成了嵌套的结构类型。例如,按即构成了嵌套的结构类型。例如,按下图可给出以下

17、结构定义:下图可给出以下结构定义: numnamesexbirthdayyearmonthdayscore 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 16struct datetype/* 定义结构类型定义结构类型 */int year;/* 年年 */int month;/* 月月 */int day;/* 日日 */;定义结构类型定义结构类型 */int num;/* 学号

18、学号 */char *name;/* 姓名姓名 */char sex3;/* 性别性别 */struct datetype birthday/* 生日生日 */float score;/* 成绩成绩 */ boy, girl;/* 定义结构类型变量定义结构类型变量 */numnamesexbirthdayyearmonthdayscore 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良

19、银 17 在在ansi c中除了允许具有相同类型的中除了允许具有相同类型的结构变量相互赋值以外结构变量相互赋值以外, 一般对结构一般对结构变量的使用,包括赋值、输入、输出、变量的使用,包括赋值、输入、输出、 运算等都是通过结构变量的运算等都是通过结构变量的成员成员来实来实现的。现的。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 188.1.3结构类型变量的引用结构类型变量的引用

20、表示结构变量成员的一般形式是:表示结构变量成员的一般形式是: 结构变量名结构变量名.成员名成员名 结构变量的赋值就是给各成员赋值。结构变量的赋值就是给各成员赋值。 可用输入语句或赋值语句来完成,下可用输入语句或赋值语句来完成,下面通过示例进行说明。面通过示例进行说明。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 19 例例8.1 试编写试编写为结构变量赋值为结构变量赋值并输出其值

21、的并输出其值的程序。程序。 s8_1.c/* 为结构变量为结构变量student赋值赋值 */student.num= 10101; /* 为为num赋值赋值 */= 德华刘德华刘; /* 为为name赋值赋值 */strcpy(student.sex, 男男);/* 为为sex复制赋值复制赋值 */student.birthday.year= 1962;/* 为为year赋值赋值 */student.birthday.month= 8;/* 为为month赋值赋值 */student.birthday.day = 18; /* 为为day赋值赋值 */student.

22、score= 98.1;/* 为为score赋值赋值 */ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 20/* 输出结构变量输出结构变量student */printf(学号学号:%dn, student.num); /* 输出输出num */printf(姓名姓名:%sn, );/* 输出输出name */printf(性别性别:%sn, studen

23、t.sex);/* 输出输出sex */printf(生日生日:%d年年,%d月月,%d日日n,/* 输出输出birthday */student.birthday.year, student.birthday.month, student.birthday.day);printf(成绩成绩:%4.1fn, student.score);/* 输出输出score */ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:

24、四川大学计算机学院 陈良银陈良银 21 程序运行结果如下:程序运行结果如下: 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 228.1.4结构变量的初始化结构变量的初始化 结构体变量也与其他为变量一样,可以在结构体变量也与其他为变量一样,可以在定义的定义的同时进行初始化同时进行初始化,下面通过示例加以说明。,下面通过示例加以说明。 例例 8.2 对结构变量初始化并输出其值。对结构变

25、量初始化并输出其值。s8_2.cstruct studenttype student = /* 定义结构类型变量并同时进行初始化定义结构类型变量并同时进行初始化 */10168,/* 初始化初始化num */学友张学友张,/* 初始化初始化name */男男,/* 初始化初始化sex */1963, 6, 18,/* 初始化初始化birthday */99.8/* 初始化初始化score */; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:

26、四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 238.1.4结构变量的初始化结构变量的初始化/* 输出结构变量输出结构变量student */printf(学号学号:%dn, student.num);/* 输出输出num */printf(姓名姓名:%sn, );/* 输出输出name */printf(性别性别:%sn, student.sex);/* 输出输出sex */printf(生日生日:%d年年%d月月%d日日n, /* 输出输出birthday */student.birthday.year, student.birthday.month

27、, student.birthday.day);printf(成绩成绩:%4.1fn, student.score);/* 输出输出score */ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 248.1.4结构变量的初始化结构变量的初始化 程序运行结果如下:程序运行结果如下: 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语

28、言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 258.1.5结构数组结构数组 数组元素也可以是结构类型的。数组元素也可以是结构类型的。 可以可以构成结构型数组。构成结构型数组。结构数组的每一个结构数组的每一个元素都是具有相同结构类型的下标结元素都是具有相同结构类型的下标结构变量构变量。 在实际应用中,经常用结构在实际应用中,经常用结构数组来表示具有相同结构的一个群体。数组来表示具有相同结构的一个群体。如一个班的学生信息,一个车间职工如一个班的学生信息,一个车间职工信息等。信息等。

29、主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 26 一、结构数组的定义一、结构数组的定义 结构数组的定义方法和结构变量相似,只结构数组的定义方法和结构变量相似,只需说明它为数组类型即可。例如:需说明它为数组类型即可。例如: #define n 3struct studenttype/* 定义结构类型定义结构类型 */int num;/* 学号学号 */char *name;/* 姓

30、名姓名 */char sex3;/* 性别性别 */int age;/* 年龄年龄 */float score;/* 成绩成绩 */;struct studenttype studentn;/* 定义结数组定义结数组 */ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 27 上面定义了数组上面定义了数组student,元素类型为元素类型为stduenttype,数组共有数组共有n个

31、元素,读者也个元素,读者也可象定义结构类型变量一样进行直接定义,可象定义结构类型变量一样进行直接定义,例如例如:#define n 3struct studenttype/* 定义结构类型定义结构类型 */int num;/* 学号学号 */char *name;/* 姓名姓名 */char sex3;/* 性别性别 */int age;/* 年龄年龄 */float score;/* 成绩成绩 */ studentn;/* 定义结构数组定义结构数组 */ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c9

32、9版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 28 或或#define n 3structint num;/* 学号学号 */char *name;/* 姓名姓名 */char sex3;/* 性别性别 */int age;/* 年龄年龄 */float score;/* 成绩成绩 */ studentn;/* 定义结构数组定义结构数组 */ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章202

33、1-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 29 如下图所示。如下图所示。 num name sex age score student0 10101 德华刘 男 42 98.1 student1 10102 靓影张 女 22 99.8 student2 10103 学友张 男 43 96.5 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银

34、30 二、结构数组的初始化二、结构数组的初始化 与其他类型的数组一样,对结构数组可以作初始化赋与其他类型的数组一样,对结构数组可以作初始化赋值,下面通过示例加以说明。值,下面通过示例加以说明。 例例 8.3 对对结构数组初始化结构数组初始化并输出结构变量。并输出结构变量。s8_3.cstruct studenttype studentn =/* 定义结数组并进行初始化定义结数组并进行初始化 */10101, 德华刘德华刘, 男男, 42, 98.1,10102, 靓影张靓影张, 女女, 22, 99.8,10103, 学友张学友张, 男男, 43, 96.5;/* 输出结构数组输出结构数组st

35、udent */for (i = 0; i n; i+)/* 输出第输出第i个学生信息个学生信息 */printf(%8d, studenti.num);/* 输出输出num */printf(%12s, );/* 输出输出name */printf(%6s, studenti.sex);/* 输出输出sex */printf(%6d, studenti.age); /* 输出输出age */printf(%8.1fn, studenti.score);/* 输出输出score */ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计

36、算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 31 程序运行结果如下:程序运行结果如下: 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 32 定义结构数组时,定义结构数组时,可不指定元素个数可不指定元素个数,例,例如如struct studenttyp

37、e student = /* 定义结数组并进行初始化定义结数组并进行初始化 */10101, 德华刘德华刘, 男男, 42, 98.1,10102, 靓影张靓影张, 女女, 22, 99.8,10103, 学友张学友张, 男男, 43, 96.5; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 33 在编译时,系统将根据初始结构个数自动在编译时,系统将根据初始结构个数自动地确定数组

38、元素个数,当然也可采用如下地确定数组元素个数,当然也可采用如下的的直接定义结构数组并初始化直接定义结构数组并初始化的形式:的形式: struct studenttype/* 定义结构类型定义结构类型 */int num;/* 学号学号 */char *name;/* 姓名姓名 */char sex3;/* 性别性别 */int age;/* 年龄年龄 */float score;/* 成绩成绩 */ student = /* 定义结数组并进行初始化定义结数组并进行初始化 */10101, 德华刘德华刘, 男男, 42, 98.1,10102, 靓影张靓影张, 女女, 22, 99.8,1010

39、3, 学友张学友张, 男男, 43, 96.5; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 34 或或structint num;/* 学号学号 */char *name;/* 姓名姓名 */char sex3;/* 性别性别 */int age;/* 年龄年龄 */float score;/* 成绩成绩 */ student = /* 定义结数组并进行初始化定义结数组并进行初

40、始化 */10101, 德华刘德华刘, 男男, 42, 98.1,10102, 靓影张靓影张, 女女, 22, 99.8,10103, 学友张学友张, 男男, 43, 96.5; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 35 三、结构数组实例三、结构数组实例 下面将举一些简单的说明性示例说明结构数组的下面将举一些简单的说明性示例说明结构数组的使用使用方法方法。 例例8.4计算

41、学生的计算学生的平均成绩平均成绩以及以及及格及格的人数。的人数。s8_4.c/* 计算平均成绩及及格学生人数计算平均成绩及及格学生人数 */for (i = 0; i = 60)/* 及格及格, numofpass自加自加1 */countofpass+;av = sum / n; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 36 程序运行结果如下:程序运行结果如下: 主编:主编

42、: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 37 例例8.5 建立同学建立同学通讯录通讯录。s8_5.cfor (i = 0; i num; i+)/* 输入通讯信息输入通讯信息 */printf(n输入第输入第%d个人通讯信息个人通讯信息:n, i + 1);printf(输入姓名输入姓名:);gets();printf(输入电话号码输入电话号码:);gets(m

43、enberi.phone);printf(nn姓名姓名ttt电话号码电话号码nn);for (i = 0; i 成员名成员名 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 44 例如:例如:(*pstudent).num 或或pstudent-num 注意注意:(*pstudent)两侧的括号不可少,这两侧的括号不可少,这是由于成员符是由于成员符.的优先级高于的优先级高于*。如去。

44、如去掉括号写作掉括号写作*pstudent.num则等效于则等效于*( pstudent.num),意义是完全不对了。下意义是完全不对了。下面通过例子来说明结构指针变量的具体说面通过例子来说明结构指针变量的具体说明和使用方法。明和使用方法。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 45 例例8.6 结构指示使用示例。结构指示使用示例。 s8_6.c 说 明 : 在说 明 :

45、在 c 语 言 中 ,语 言 中 , p s t u d e n t - n u m 与与(*pstudent).num等价,但前者更直观,希望读者多使等价,但前者更直观,希望读者多使用前者的形式。用前者的形式。struct studenttype/* 定义结构类型定义结构类型 */int num;/* 学号学号 */char *name;/* 姓名姓名 */char sex3;/* 性别性别 */struct datetype birthday;/* 生日生日 */float score;/* 成绩成绩 */;struct studenttype student; /* 定义结构类型变量定义

46、结构类型变量student */struct studenttype *pstudent;/* 结构指针变量结构指针变量pstudent */ 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 46pstudent = &student;/* 将将student地址赋值给地址赋值给pstudent */* 为结构为结构(*pstudent)赋值赋值 */(*pstudent).

47、num= 10101;/* 为为num赋值赋值 */(*pstudent).name= 德华刘德华刘; /* 为为name赋值赋值 */strcpy(*pstudent).sex, 男男);/* 为为sex复制赋值复制赋值 */(*pstudent).birthday.year= 1962;/* 为为year赋值赋值 */(*pstudent).birthday.month= 8;/* 为为month赋值赋值 */(*pstudent).birthday.day= 18;/* 为为day赋值赋值 */(*pstudent).score= 98.1;/* 为为score赋值赋值 */ 主编:主编

48、: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 47/* 输出学生信息输出学生信息 */printf(学号学号:%dn, pstudent-num); /* 输出输出num */printf(姓名姓名:%sn, pstudent-name);/* 输出输出name */printf(性别性别:%sn, pstudent-sex);/* 输出输出sex */printf(生日生日:%d年年,%d

49、月月,%d日日n, /* 输出输出birthday */pstudent-birthday.year, pstudent-birthday.month, pstudent-birthday.day);printf(成绩成绩:%4.1fn, pstudent-score);/* 输出输出score */ 说明:在说明:在c语言中,语言中,pstudent-num与与(*pstudent).num等价,但前者更直观,等价,但前者更直观,希望读者多使用前者的形式。希望读者多使用前者的形式。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设

50、计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 48 二、指向结构数组变量的指针二、指向结构数组变量的指针 前面已介绍过可使用指向数组元素的指针,同前面已介绍过可使用指向数组元素的指针,同样地对于结构数组,也样地对于结构数组,也可用指针来指向结构数可用指针来指向结构数组元素组元素,设,设pstudent为指向结构数组元素的指为指向结构数组元素的指针变量,则针变量,则pstudent也指向该结构数组的也指向该结构数组的1个元个元素,素,pstudent + 1指向指向2号元素,号元素,pstu

51、dent + i则则指向指向i+1号元素。号元素。 这与普通数组的情况是一致这与普通数组的情况是一致的。的。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 49 例例8.7 用指针变量输出结构数组。用指针变量输出结构数组。 s8_7.c/* 输出结构数组输出结构数组student */for (pstudent = student; pstudent num);/* 输出输出num

52、 */printf(%12s, pstudent-name); /* 输出输出name */printf(%6s, pstudent-sex);/* 输出输出sex */printf(%6d, pstudent-age); /* 输出输出age */printf(%8.1fn, pstudent-score);/* 输出输出score */ 程序运行结果如下所示:程序运行结果如下所示: 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计

53、算机学院主讲教师:四川大学计算机学院 陈良银陈良银 508.2 联合联合 8.2.1联合的概念联合的概念 与结构类型一样,与结构类型一样,联合类型联合类型也是一种构造也是一种构造类型。类型。 在一个联合类型内可以定义多种不在一个联合类型内可以定义多种不同的数据类型,在一个被说明为该联合类同的数据类型,在一个被说明为该联合类型的变量中,型的变量中,各个成员共享同一个存储空各个成员共享同一个存储空间间。 联合类型与结构类型有一些相似之处。但联合类型与结构类型有一些相似之处。但两者有本质上的不同。在结构类型中各成两者有本质上的不同。在结构类型中各成员有各自的内存空间,员有各自的内存空间, 一个结构变

54、量的总一个结构变量的总长度是各成员长度之和。而在联合类型中,长度是各成员长度之和。而在联合类型中,各成员共享一段内存空间,各成员共享一段内存空间, 一个联合变量一个联合变量的长度等于各成员中最长的长度。的长度等于各成员中最长的长度。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 518.2.2 联合的定义联合的定义 定义一个联合类型的一般形式为:定义一个联合类型的一般形式为: un

55、ion 联合类型名联合类型名 成员表成员表 ; 成员表中含有若干成员,成员的一般成员表中含有若干成员,成员的一般形式为:形式为:类型说明符类型说明符 成员名成员名; 成员名的命名应符合标识符的规定。成员名的命名应符合标识符的规定。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 52 例如:例如: union classorofficetypeint clas;/* 班级班级 */c

56、har office10;/* 教研室教研室 */; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 538.2.3联合变量的说明联合变量的说明 (1) 选定义联合类型,再说明联合选定义联合类型,再说明联合变量变量union classorofficetypeint clas;/* 班级班级 */char office10;/* 教研室教研室 */; union classoroff

57、icetype classoroffice; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 54 (2)定义联合类型的同时说明联合变量)定义联合类型的同时说明联合变量union classorofficetypeint clas;/* 班级班级 */char office10;/* 教研室教研室 */ classoroffice; (3)和直接说明联合变量。和直接说明联合变量。un

58、ionint clas;/* 班级班级 */char office10;/* 教研室教研室 */ classoroffice; 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 55 经说明后的经说明后的classandoffice变量为变量为classandofficetype类型。类型。 它们的它们的内存分配示内存分配示意图如下图所示意图如下图所示。clasofficeclassa

59、ndoffice 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出版社第八章2021-11-10主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 陈良银陈良银 568.2.4联合变量的赋值和使用联合变量的赋值和使用 对联合变量的赋值,只能对变量的成员进对联合变量的赋值,只能对变量的成员进行赋值。行赋值。 联合变量的成员表示为:联合变量的成员表示为: 联合变量名联合变量名.成员名成员名 例如,例如,classoroffice被说明为被说明为classorofficetype类型

60、的变量之后,可对类型的变量之后,可对classoroffice.clas或或classoroffice.office进进行赋值。行赋值。 不允许对联合变量作初始化赋值,赋值只不允许对联合变量作初始化赋值,赋值只能在程序中进行。还要再强调说明的是,能在程序中进行。还要再强调说明的是,一个联合变量,一个联合变量, 每次只能赋予一个成员值。每次只能赋予一个成员值。换句话说,一个联合变量的值就是联合变换句话说,一个联合变量的值就是联合变员的某一个成员值。员的某一个成员值。 主编:主编: 陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 四川大学计算机学院四川大学计算机学院 c c语言程序设计(语言程序设计(c99c99版)版) 清华大学出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论