第8章结构体、共用体和枚举类型 本章要点 81复杂数据类型概述 82结构体类型和结构体变量 8.3结构体变量的使用和初始化 84结构体数据的输入腧出y 8.5结构体变量作函数参数 86带有位段成员的结构体 8.7链表 8.8共用体类型 8.9枚举类型 8.10实例演示:“极限俱乐部会员信息系统”程序
第8章 结构体、共用体和枚举类型 本章要点 8.1 复杂数据类型概述 8.2 结构体类型和结构体变量 8.3 结构体变量的使用和初始化 8.4 结构体数据的输入/输出 8.5 结构体变量作函数参数 8.6 带有位段成员的结构体 8.7 链表 8.8 共用体类型 8.9 枚举类型 8.10 实例演示:“极限俱乐部会员信息系统”程序
本章要点 ◆结构体、共用体和枚举类型三种构造类型的定义形 式、成员类型 令◆动态数据结构——链表
❖ 本章要点 ❖ ◆ 结构体、共用体和枚举类型三种构造类型的定义形 式、成员类型 ❖ ◆ 动态数据结构——链表
8.1复杂数据类型概述 在第2章介绍过数据类型有基本数据类型和构造类型之分, 前几章的程序设计都是围绕基本数据类型(整型、实型和字 符型)以及由相同数据类型的集合——数组而展开的。 冷本章讨论构造类型——结构体类型和共用体(联合体)类型。 构造类型的定义比较自由,用户可以定义出形式多样的数据 类型。它们有一个共同特点是可以由不同数据类型组成,并 且一旦定义以后,就可定义相应类型的变量和数组
8.1复杂数据类型概述 ❖ 在第2章介绍过数据类型有基本数据类型和构造类型之分, 前几章的程序设计都是围绕基本数据类型(整型、实型和字 符型)以及由相同数据类型的集合——数组而展开的。 ❖ 本章讨论构造类型——结构体类型和共用体(联合体)类型。 构造类型的定义比较自由,用户可以定义出形式多样的数据 类型。它们有一个共同特点是可以由不同数据类型组成,并 且一旦定义以后,就可定义相应类型的变量和数组
8.2结构体类型和结构体变量 8.2.1结构体类型的定义 ☆结构型是一种较为复杂但却非常灵活的构造型数据类型, 是数目固定、类型不同的若干有序变量的集合。一个结构 体类型由若于个称为成员(或域)的成分组成。其中,结构 体类型的成员允许为不同的数据类型,在C程序中使用保 留字 struct定义结构体类型。结构体类型定义格式为 struct结构体类型名 类型名1成员名1; 类型名2成员名2; 类型名n成员名n
8.2 结构体类型和结构体变量 ❖ 8.2.1结构体类型的定义 ❖ 结构型是一种较为复杂但却非常灵活的构造型数据类型, 是数目固定、类型不同的若干有序变量的集合。一个结构 体类型由若干个称为成员(或域)的成分组成。其中,结构 体类型的成员允许为不同的数据类型,在C程序中使用保 留字struct定义结构体类型。结构体类型定义格式为: ❖ struct结构体类型名 ❖ { ❖ 类型名1成员名1; ❖ 类型名2成员名2; ❖ …… ❖ 类型名n成员名n; ❖ };
说明: 冷(1)结构体类型名的命名应该符合C语言中标识符的命名规 则 冷(2)结构体类型的成员表用花括弧括起来,结构体类型定义 完成时使用分号结束 冷(3)结构体类型各成员的定义方法与变量相同,可以是C语 言提供的任何数据类型,成员名的命名规则也与变量相同, 各成员定义之间用分号分隔开
说明: ❖ (1)结构体类型名的命名应该符合C语言中标识符的命名规 则。 ❖ (2)结构体类型的成员表用花括弧括起来,结构体类型定义 完成时使用分号结束。 ❖ (3)结构体类型各成员的定义方法与变量相同,可以是C语 言提供的任何数据类型,成员名的命名规则也与变量相同, 各成员定义之间用分号分隔开
在结构体类型定义中要注意以下几点: (1)结构体类型定义中不允许对结构体本身递归定义 (2)结构体类型定义中可以包含另外的结构体,即结构体 是可以嵌套的 令(3)结构体类型是设计者根据不同对象来定乂的,所以结 构体类型并非只有一种,而是根据所描述的对象的不同有很 多种,各种结构体类型都可以有自己的结构体名,可以包含 不同数目的成员 (4)定义了一个结构体类型以后,并不意味着已分配一段 内存单元来存放这些结构体成员,此时只是定义了类型而不 整型(nt)或实型(oa)一样,数据类型不占内存E。,就像 分配内存单元。只定义数据类型系统不分配内存单元 (5)结构体中的成员名可以和程序中其他地方的变量名相 同,两者互不干扰。如程序中定义 个整型变量pay和 struct Worker中的成员pay代表不同的对象,互不千扰 (6)同名结构体类型不可以重复定义
在结构体类型定义中要注意以下几点: ❖ (1)结构体类型定义中不允许对结构体本身递归定义 ❖ (2)结构体类型定义中可以包含另外的结构体,即结构体 是可以嵌套的。 ❖ (3)结构体类型是设计者根据不同对象来定义的,所以结 构体类型并非只有一种,而是根据所描述的对象的不同有很 多种,各种结构体类型都可以有自己的结构体名,可以包含 不同数目的成员。 ❖ (4)定义了一个结构体类型以后,并不意味着已分配一段 内存单元来存放这些结构体成员,此时只是定义了类型而不 分配内存单元。只定义数据类型系统不分配内存单元,就像 整型(int)或实型(float)一样,数据类型不占内存单元。 ❖ (5)结构体中的成员名可以和程序中其他地方的变量名相 同,两者互不干扰。如程序中定义了一个整型变量pay和 struct Worker中的成员pay代表不同的对象,互不干扰。 ❖ (6)同名结构体类型不可以重复定义
822结构体变量的定义 冷先定义结构体类型,再定义结构体类型的变量 在定义结构体类型的同时定义结构体类型的变量 直接定义结构体类型的变量
8.2.2 结构体变量的定义 ❖ 先定义结构体类型,再定义结构体类型的变量 ❖ 在定义结构体类型的同时定义结构体类型的变量 ❖ 直接定义结构体类型的变量
8.3结构体变量的使用和初始化 令结构体变量的使用一般可分为两种情况:一种是结构体成员 的使用;另一种是结构体变量整体的使用。 8.3.1结构体变量成员的引用 引用的一般形式为: 结构体变量名.成员名 “.”是成员运算符,它在所有运算符中优先级最高
8.3 结构体变量的使用和初始化 ❖ 结构体变量的使用一般可分为两种情况:一种是结构体成员 的使用;另一种是结构体变量整体的使用。 ❖ 8.3.1结构体变量成员的引用 ❖ 引用的一般形式为: ❖ 结构体变量名.成员名 ❖ “.”是成员运算符,它在所有运算符中优先级最高
例8-1】建立一个简单的学生信息表 令# nclude main i struct student i char name[20]: char sex Int age; float score; 3s printf("input name gets(stu name printf(input sex: stu sex=getchar printf("input age: ) scanf(%d", &stu age) printf("input score: scanf(%f", &stu score) printf("name: %s, sex: %C, age: %d, score %5.2f\n", stu name, stu. sex, stu age, stu score): 1
【例8-1】建立一个简单的学生信息表。 ❖ #include main() { struct student { char name[20]; char sex; int age; float score; }stu; printf("input name:"); gets(stu.name); printf("input sex:"); stu.sex=getchar(); printf("input age:"); scanf("%d",&stu.age); printf("input score:"); scanf("%f",&stu.score); printf("name:%s,sex:%c,age:%d,score: %5.2f\n",stu.name,stu.sex,stu.age,stu.score);}
运行结果为 c:"E:\C\test\ Debug test.exe input name: Li Lin nput sex: M input age: 20 input score: 90 name: Li Lin, sex: M, age: 20, score: 90.00 Press any key to continue
运行结果为: