C语言程序设计(第二版)-电子教案-王伟 第8章

上传人:E**** 文档编号:89423366 上传时间:2019-05-25 格式:PPT 页数:49 大小:206.50KB
返回 下载 相关 举报
C语言程序设计(第二版)-电子教案-王伟 第8章_第1页
第1页 / 共49页
C语言程序设计(第二版)-电子教案-王伟 第8章_第2页
第2页 / 共49页
C语言程序设计(第二版)-电子教案-王伟 第8章_第3页
第3页 / 共49页
C语言程序设计(第二版)-电子教案-王伟 第8章_第4页
第4页 / 共49页
C语言程序设计(第二版)-电子教案-王伟 第8章_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《C语言程序设计(第二版)-电子教案-王伟 第8章》由会员分享,可在线阅读,更多相关《C语言程序设计(第二版)-电子教案-王伟 第8章(49页珍藏版)》请在金锄头文库上搜索。

1、第八章 结构体和共用体,本章目录,8.1 结构体,8.2结构体数组,8.3指向结构体类型数据的指针,8.4链表,8.5 共用体,前面已经介绍了C语言中的大部分数据类型,包括基本类型、数组类型、指针类型等。但在实际生活中有许多需要由不同类型的数据共同描述的实体,比如通讯录可由姓名、地址、电话、邮政编码等组成;一个学生的情况可由姓名、性别、年龄、成绩、家庭住址等数据项组成。C 语言提供了这样一种数据结构,它们是结构体类型和共用体类型。,8.1 结构体,在C语言中,基本类型数据在系统已经有系统定义好了,编程人员只要直接应用它们就可以了。但是结构体是一种构造类型,在使用该类型的数据之前必须先给出类型定

2、义即先定义后使用。 8.1.1结构体类型的定义 1. 结构体类型的定义的一般形式为: struct 结构体类型名 数据类型1 成员名1; 数据类型2 成员名2; 数据类型n 成员名n; ; 结构体名的命名应该遵守标识符的命名规则。打括号内可以包含若干个成员,每个成员应有具体的数据类型。,8.1 结构体,例如,描述日期定义的结构体类型: struct date int year; int month; int day; ; 其中date是结构体名,该结构体类型是由三个成员组成。成员都是整型,编者可根据自己需求编写成员,成员的数据类型可以是任何数据类型,当然也可以包含结构体类型。注意最后大括号后要

3、加上分号“;”作为结束。,8.1 结构体,例如 struct student char name8; char sex2; struct date birthday; ; 结构体类型struct student的定义中,成员birthday是结构体类型,这就形成了结构体的嵌套。 结构体类型的定义完成后,我们就可以应用该结构体类型的变量,它的使用和int ,float等相同,如上例中定义了struct date结构体类型,在struct student结构体定义中用到了struct date结构体类型的变量birthday。,8.1 结构体,8.1.2结构体变量的定义 定义了结构体类型之后,就可

4、以在此基础上定义结构体类型的变量,结构体变量的定义可以采用以下三种方法: 1先定义结构体类型再定义变量,例如上面已定义了一个结构体类型 struct date,可以用它来定义变量: struct date birthday; 2在定义类型的同时定义变量上面可改写为: 例如 struct date int year; int month; int day; student1,student2; 即在结构体类型定义后直接写出变量名。,8.1 结构体,3直接定义结构体类型变量,即不定义结构体类型名,在写出结构体类型后直接写出变量名 struct int year; int month; int da

5、y; student1,student2; 定义变量后,编译系统会为它分配存储空间,存储空间的大小是结构体各成员变量所占内存单元的总和。 结构体类型变量说明: )类型与变量的概念不同。对结构体类型变量来说,在定义时一般先定义结构体类型,然后再定义该结构体类型的变量。只能对结构体类型的变量赋值、存取或运算,而不能对结构体类型赋值、存取或运算。在编译时对类型是不分配存储空间的,只对变量分配存储空间。,8.1 结构体,)对结构体变量中的成员,可以单独使用,其作用与地 位相当于普通变量。 )结构体类型的成员可以是一个已定义的结构体类型变 量。如 结构体类型struct student中的struct

6、date birthday; 这样先定义了一个struct date类型,它包括三个成 员,然后在定义结构体类型struct student时,成员 birthday被定义为struct date类型。 )结构体类型中的成员可以与程序中的变量同名,二 者不代表同一对象。,8.1 结构体,8.1.3结构体变量的引用 在定义结构体变量以后,可以引用这个变量中的成员。但是怎样引用?在C语言中一般不整体引用。对结构体变量的使用主要是对其成员的操作, 引用成员的一般形式为: 结构体变量名.成员名 其中“.”是成员运算符,它优先级别最高, 引用结构体变量应遵守以下规则: 1不能将一个结构体变量作为一个整体

7、加以引用,只能引用结构体变量中的成员。经常把结构体变量名.成员名看作一个整体进行操作。 例如: student1.year=2008; student1.month=8;,8.1 结构体,2如果成员本身又属于一个结构体类型,则需要再次使用取成员运算符“”,这样逐级的应用成员运算符找到最低级的成员。 例如: student1.birthday.year 3对结构体类型变量的成员所能执行的操作,与具有相同类型的普通变量所能执行的操作相同,包括赋值、输入输出、运算等。 例如: student1.year+; 4. C语言允许两个同类型的结构体变量之间相互赋值。在执行 “student2=studen

8、t1;” 不允许用赋值语句将一组常量直接赋给一个结构体变量。输入下面语句不合法: Student1 = Wang Li,18,M,12,15,1974,89101,89.5; 下面通过程序来应用结构体变量的成员。,8.1 结构体,例8.1 学生信息输出。 struct date int month; int day; int year; ; struct stud_type char name20; int age; char sex; struct date birthday; long num; float score; ; main ( ) ,8.1 结构体,struct stud_ty

9、pe student1=“Wang Li“,20,M,12,15,1978,89101,89.5; struct stud_type student2; student2=student1; printf(“student1:%s,%d,%c,%d,%d,%d,%ld,%5.2fn“,student1.name, student1.age, student1.sex,student1.birthday.month,student1.birthday.day, student1.birthday.year,student1.num,student1.score); printf(“student

10、2:%s,%d,%c,%d,%d,%d,%ld,%5.2fn“,student2.name, student2.age, student2.sex,student2.birthday.month,student2.birthday.day, student2.birthday.year,student2.num,student2.score); 运行情况如下:,8.2结构体数组,一个结构体变量中可以存放一组数据(如一个学生的考号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型

11、的数据,它们都分别包括各个成员(分量)项。 8.2.1 定义结构体数组 和定义结构体变量的方法相仿,只需说明其为数组即可。例如: struct student int num; char name20; char sex; int age ; float score; char addr30; struct student stu3;,8.2结构体数组,以上定义了一个数组stu,数组有3个元素,均为struct student 类型数据。也可以直接定义一个结构体数组,例如: struct student int num; . stu 3; 或者 struct int num; . stu3;,

12、8.2结构体数组,8.2.2结构体数组的初始化 1. 与其他类型的数组一样,对结构体数组可以初始化。结构体数组初始化的一般形式是在定义数组的后面加上“初值表列;” 例如: struct student int num; char name20; char sex; int age; float score; char add30; stu3=10101,”li lin”, M ,18,87.5,” 103 Bei jing Road”,10102,”Zhang fun”,M,19,99,”130 Shanghai Road”,10104,” Wang Min”,F, 20,78.5,”1010

13、 Zhongshan Road”;,8.2结构体数组,定义数组stu时,元素个数可以不指定,即写成以下形式: stu =,;数组成员见图8-1 num name sex age score addr,10101,10102,10104,LiLin,ZhangFun,WangMing,M,M,F,18,19,20,87.5,99,78.5,103 Bingji Road,103 Shanghi Road,1010 Zhongshan Road,数组各元素在内存中连续存放。 编译时,系统会根据给出初值的结构体常量的个数来确定数组元素的个数。一个结构体常量结构体中全部成员的值。,8.2结构体数组,当

14、然,数组的初始化也可以用以下形式: struct student int num; char name20; char sex; int age; float score; char add30; ; struct student stu = ,; 即先声明本类型,然后定义数组为该结构体类型,在定义数组时初始化。,8.2结构体数组,2 举一个简单的例子来说明结构体数组的定义和引用。 例8.2 对候选人得票的统计程序。设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。 程序如下: #include #include struct person char name20; i

15、nt count; leader3=“Li“,0,“Zhang“,0,“Fun“,0; main() int i,j; char leader_name20; for(i=1;i=10;i+),8.2结构体数组, scanf(“%s“,leader_name); for(j=0;j3;j if (strcmp(leader_name,leaderj.name)= 0 ) leaderj.count+; printf(“n“); for(i=0;i3;i+) printf(“%5s:%dn“,leaderi.name,leaderi.count); 运行结果:,8.2结构体数组,程序定义一个全局的结构体数组leader,它有3个元素,每一个元素包含两个成员name(姓名)和 count( 票数)。在定义数组时使之初始化,使3位候选人的票数都先置零。 在主函数中定义字符数组leader_name,它代表被选人的具体人名,然后把它与3个候选人姓名相比,看它和哪一个候选人的名字相同。注意leader_name是和结构体数组中的leaderj.name相比,leaderj是结构体数组中的字符数组leader的第j个元素,它包含两个成员项,leader_name应该和leader数组第j个元素的name成员相比。若j为某一值时,输

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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