C程序设计与实例教程 教学课件 ppt 作者 曾令明 全书教案_ 第7章

上传人:E**** 文档编号:89343552 上传时间:2019-05-23 格式:PPT 页数:132 大小:502.50KB
返回 下载 相关 举报
C程序设计与实例教程 教学课件 ppt 作者 曾令明 全书教案_ 第7章_第1页
第1页 / 共132页
C程序设计与实例教程 教学课件 ppt 作者 曾令明 全书教案_ 第7章_第2页
第2页 / 共132页
C程序设计与实例教程 教学课件 ppt 作者 曾令明 全书教案_ 第7章_第3页
第3页 / 共132页
C程序设计与实例教程 教学课件 ppt 作者 曾令明 全书教案_ 第7章_第4页
第4页 / 共132页
C程序设计与实例教程 教学课件 ppt 作者 曾令明 全书教案_ 第7章_第5页
第5页 / 共132页
点击查看更多>>
资源描述

《C程序设计与实例教程 教学课件 ppt 作者 曾令明 全书教案_ 第7章》由会员分享,可在线阅读,更多相关《C程序设计与实例教程 教学课件 ppt 作者 曾令明 全书教案_ 第7章(132页珍藏版)》请在金锄头文库上搜索。

1、,第7章 结构体与共用体,7.1 结构体概述 7.2 结构体变量 7.3 结构体数组 7.4 结构体与指针 7.5 共用体 7.6 枚举类型 7.7 用typedef定义类型,本章主要介绍C语言中的结构体和共用体两种构造数据类型,同时介绍了枚举类型及如何用typedef定义类型。 学习重点: 结构体类型与结构体变量 共用体类型与共用体变量 枚举类型与枚举变量,7.1.1 结构体的引入 前面的课程我们学习了一些简单数据类型(整型、实型、字符型)的定义和应用,还学习了数组(一维、二维)的定义和应用,这些数据类型的特点是:当定义某一特定数据类型时,就限定该类型变量的存储特性和取值范围。对简单数据类型

2、来说,既可以定义单个的变量,也可以定义数组。而数组的全部元素都具有相同的数据类型,或者说是相同数据类型的一个集合。,7.1 结 构 体 概 述,在日常生活中,我们常会遇到一些需要填写的登记表,如住宿表、成绩表、通讯地址表等。在这些表中,填写的数据是不能用同一种数据类型描述的。在住宿表中我们通常会登记上姓名、性别、身份证号码等项目;在通讯地址表中我们会写下姓名、邮编、邮箱地址、电话号码、E-mail等项目。这些表中集合了多种数据,无法用前面学过的任一种数据类型完全描述,因此C语言引入了一种能集中不同数据类型于一体的数据类型结构体类型。,7.1.2 结构体类型的定义 在上面描述的各种登记表中,让我

3、们仔细观察一下住宿表、成绩表、通讯地址表等。 住宿表由下面的项目构成:,成绩表由下面的项目构成: 通讯地址表由下面的项目构成:,这些登记表用C语言提供的结构体类型描述如下: 住宿表: struct accommod char name20; /*姓名*/ char sex; /*性别*/ char job40; /*职业*/ int age; /*年龄*/ long number; /*身份证号码*/ ;,成绩表: struct score char grade20; /*班级*/ long number; /*学号*/ char name20; /*姓名*/ float os; /*操作系统

4、*/ float datastru; /*数据结构*/ float compnet; /*计算机网络*/ ;,通讯地址表: struct addr char name20; char department30; /*部门*/ char address30; /*住址*/ long box; /*邮编*/ long phone; /*电话号码*/ char email30; /* E-mail*/ ;,这一系列对不同登记表数据结构的描述类型称为结构体类型。可以看出结构体类型属于构造数据类型。 结构体与数组类似,都是由若干分量组成的。数组是由相同类型的数组元素组成,而结构体的分量可以是不同类型的。

5、 结构体中的分量称为结构体的成员。访问数组中的分量(元素)是通过数组的下标,而访问结构体中的成员是通过成员的名字。 在程序中使用结构体之前,首先要对结构体的组成进行描述,称为结构体的定义。结构体的定义说明了该结构体的组成成员,以及每个成员的数据类型。结构体定义的一般形式如下:,struct 结构体名 类型说明符 成员名1; 类型说明符 成员名2; 类型说明符 成员名n; ; 其中,关键字“struct”是结构体的标识符;“结构体名”是所定义的结构体的类型说明符,属于标识符,由用户自己定义;“”中包围的是组成该结构体的成员,,每个成员的数据类型既可以是简单的数据类型,也可以是复杂的构造数据类型。

6、整个定义用分号结束,是一个完整的语句。 结构体名是可以省略的,此时定义的结构体称为无名结构体。,7.2.1 结构体变量的定义 定义一个结构体类型只是描述了此结构体的组织形式,在编译时并不为其分配存储空间,故不能对它进行赋值、存取或运算。为了能在程序中使用结构体类型的数据,应当定义结构体变量,并在其中存放具体的数据。,7.2 结 构 体 变 量,定义结构体变量有以下三种方式: (1) 先定义结构体类型再定义变量。 例如: struct student int num; char name20; char sex; int age;,float score; char addr30; ; stru

7、ct student stu1, stu2; 先定义结构体类型struct student,然后定义两个struct student类型的变量stu1、stu2,它们都具有struct student类型的结构。 (2) 在定义结构体类型的同时定义变量。 例如: struct student ,int num; char name20; char sex; int age; float score; char addr30; stu1, stu2; 同样定义了结构体类型struct student及其两个变量stu1、stu2。这种形式定义的一般形式为: struct 结构体名 ,类型说明符

8、成员名1; 类型说明符 成员名2; 类型说明符 成员名n; 变量名1, 变量名2,; (3) 直接定义结构体类型的变量。 一般形式为: struct ,类型说明符 成员名1; 类型说明符 成员名2; 类型说明符 成员名n; 变量名1, 变量名2,; 可以看到,这里省略了结构体名。 例如: struct ,int num; char name20; char sex; int age; float score; char addr30; stu1, stu2; 关于结构体类型及其变量有以下几点说明: (1) 结构体类型与结构体变量是两个不同的概念,其区别如同int类型与int型变量的区别一样。,

9、(2) 结构体类型中的成员名可以与程序中的变量同名,它们代表不同的对象,互不干扰。 (3) 结构体的成员可以是简单变量、数组、指针(后面一章将介绍)以及结构体变量。 例如: struct date int month, day, year; ; struct student ,char name20; char sex; int age; struct date birthday; stu1, stu2; 定义struct student结构体类型时,成员birthday的类型定义为struct date类型变量。struct student的结构如下所示。,7.2.2 结构体变量的引用 在定

10、义了结构体变量后,就可以引用这个变量了。但是,在C语言程序中,不允许对结构体变量整体进行各种运算、赋值或输入/输出操作。 例如,若已定义如下结构体及其变量: struct date int month, day, year; oneday; 则下面的操作都是错误的: scanf(“%d“, ,printf(“%d“, oneday); scanf(“%d%d%d“, ,(2) 结构体可以作为函数的实参、形参和返回值,后面章节将介绍。 在C语言程序中,通常是直接访问结构体变量的成员。 引用结构体变量成员的一般形式为: 结构体变量名.成员名 其中,圆点运算符“.”称为结构体成员运算符,它在C语言中

11、的运算优先级别是最高的,结合性为从左到右。例如,oneday.year就表示引用结构体变量oneday中的year成员,因该成员的类型为int型,所以可以对它执行任何int型变量可以执行的运算。,例如: oneday.year = 2005; scanf(“%d“, 可以看出,结构体变量的一个成员相当于一个简单变量,对结构体成员完全可以像操作简单变量一样操作它。 【例7-1】 输入今天的日期,然后输出该日期。 #include void main() ,struct date /*在函数中定义结构体类型date*/ int year, month, day; ; struct date tod

12、ay; printf(“Please input today date:“); scanf(“%d.%d.%d“, /*输出日期*/ ,程序运行结果为: Please input today date:2005.5.20 Today:2005-5-20 如果结构体成员本身又是结构体类型的,则可继续使用成员运算符取结构体成员的结构体成员,逐级向下,引用最低一级的成员。程序只能对最低一级的成员进行运算。例如,若定义: struct date ,int month, day, year; ; struct student char name20; char sex; int age; struct

13、date birthday; stu1;,则下面的操作是错误的: stu1.birthday = 10, 12, 1978; 而应该使用如下操作: stu1.birthday.month = 10; stu1.birthday.day = 12; stu1.birthday.year = 1978;,7.2.3 结构体变量的初始化 和其他类型变量一样,结构体变量可以在定义时指定初始值,格式与一维数组相似: struct 结构体类型名 结构体变量 = 初始化值; 【例7-2】 结构体变量的初始化示例。 #include void main() struct student ,char name2

14、0; char sex; int age; float score; stu1 = “Wangwu“, M, 20, 88.5; struct student stu2 = “Zengying“, F, 21, 98; printf(“% -10s %c %4d %5.1fn“, stu1.name, stu1.sex, stu1.age, stu1.score); printf(“% -10s %c %4d %5.1fn“, stu2.name, stu2.sex, stu2.age, stu2.score); ,程序运行结果为: Wangwu M 20 88.5 Zengying F 21 98.0 对于结构体变量的初始化需要注意以下几点: (1) 初始化数据之间用逗号隔开。 (2) 初始化数据的个数一般与成员的个数相同,若小于成员数,则剩余的成员将被自动初始化为0或NULL。 (3) 初始化数据的类型要与相应成员的类型一致。 (4) 不能对结构体类型中的各成员进行初始化赋值。例如:,struct student = “Zengying“, F, 21, 98; 是错误的,因为结构体类型没有被分配存储空间。,7.2.4 结构体变量作函数参数 结构体变量作函数参数分以下两种情况: (

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

最新文档


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

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