第九章 结构体 主讲教师 :贾月乐 电话:13402866690
SWPU C语言程序设计 第九章 结构体 结构体及结构体变量的定义 9.1 结构体变量的初始化 9.2 结构体变量的引用 9.3
思考一个问题 问题: num name num name sex score sex score 存储一个班级中 5 名学员的信息(学号、姓名、性别和成绩) 解决方案: I. 使用数组 II. 使用多维数组 不能建立数组间的关系 01 02 03 04 05 num III. 使用结构 C 语言不允许一个数组包含多种数据类型 Mary John Peter Rose Kate F M 01 02 03 04 05 89 78.5 67 97.5 64 Mary John Peter Rose Kate C 语言引入了称为结构的数据存储方式 name num name sex score F M sex score 89 78.5 67 97.5 64 “结构” 是一种构造数据类型,它是由若干数据项组合而成的复杂数据对象,这些数据项称为结构的成员。
9.1 结构体及结构体变量的定义 9.1.1 结构体类型定义格式 struct 结构体名 { 结构成员1; 结构成员2; ┆ 结构成员n; SWPU C语言程序设计 9.1 结构体及结构体变量的定义 9.1.1 结构体类型定义格式 说明结构类型 的关键字 域: 结构体类型定义中的每个成员; 成员名的命名规则和变量相同; 同一结构体的同层成员不能同名。 struct 结构体名 { 结构成员1; 结构成员2; ┆ 结构成员n; }; 注意分号
9.1 结构体及结构体变量的定义 例:定义结构体类型student struct student { int num; SWPU C语言程序设计 9.1 结构体及结构体变量的定义 例:定义结构体类型student struct student { int num; char name[50]; char gender; int age; float score; char addr[50]; }; num name gender age score addr 001 小李 M 20 88.5 1栋 该结构体类型的具体实例 结构体类型变量 struct student应作为一个 整体对待,“;”号不能少!
9.1 结构体及结构体变量的定义 结构体变量的定义格式: struct 结构体名 结构体变量名表 先定义结构体类型再定义变量名形式: SWPU C语言程序设计 9.1 结构体及结构体变量的定义 结构体变量的定义格式: struct 结构体名 结构体变量名表 先定义结构体类型再定义变量名形式: struct student { int num; char name[50]; char gender; int age; float score; char addr[50]; }; 定义结构体变量的三种形式 标准定义格式定义结构体变量 定义结构体类型的同时定义变量 直接定义结构体类型的变量 struct student stu1,stu2;
9.1 结构体及结构体变量的定义 在定义结构体类型的同时定义变量 一般形式为: struct 结构体名 { 成员表列 }变量名表列; SWPU C语言程序设计 9.1 结构体及结构体变量的定义 在定义结构体类型的同时定义变量 struct student { int num; char name[50]; char gender; int age; float score; char addr[50]; }student1,student2; 一般形式为: struct 结构体名 { 成员表列 }变量名表列;
9.1 结构体及结构体变量的定义 直接定义结构体类型的变量 一般形式为: struct { 成员表列 }变量名表列; struct SWPU C语言程序设计 9.1 结构体及结构体变量的定义 直接定义结构体类型的变量 struct { int num; char name[50]; char gender; int age; float score; char addr[50]; }student1,student2; 一般形式为: struct { 成员表列 }变量名表列; * 不出现结构体名
9.1 结构体及结构体变量的定义 结构体类型的嵌套定义 struct date { int month; int day; SWPU C语言程序设计 9.1 结构体及结构体变量的定义 结构体类型的嵌套定义 定义:结构体成员又是一个结构体变量 struct date { int month; int day; int year; } ; struct student { char name[50]; char gender; int age; struct date birthday; }stu1,stu2; name gender birthday month day year
9.2 结构体变量的初始化 2、结构体变量的初始化 一般格式: struct 结构体名 变量名={ }; struct student SWPU C语言程序设计 9.2 结构体变量的初始化 2、结构体变量的初始化 一般格式: struct 结构体名 变量名={ }; struct student { int num; char name[20]; char gender; int age; }std2; struct student std1={ 1, “wangming”, ‘F’, 20}; std2=std1; struct student std1; std1={ 1, “wangming”, ‘F’, 20,}
9.1.3 结构体成员的引用 3、结构体成员的引用 一般格式: 结构体名.成员名; struct student { int num; SWPU C语言程序设计 9.1.3 结构体成员的引用 3、结构体成员的引用 一般格式: 结构体名.成员名; struct student { int num; char name[20]; char gender; int age; }std2; struct student std1={ 1, “wangming”, ‘F’, 20}; std2=std1; 引用变量std1的num std1.num 引用变量std2的 name成员 std2.name
9.1.3 结构体成员的引用 3、结构体成员的引用 若某成员又是一个结构体类型,即结构体,则逐级引用 struct date SWPU C语言程序设计 9.1.3 结构体成员的引用 3、结构体成员的引用 若某成员又是一个结构体类型,即结构体,则逐级引用 struct date { int month; int day; int year; }; struct student { char name[20]; struct date birthday; }std1; 引用std1的出生年 std1.birthday.year 引用std1的出生月 std1.birthday.month
9.1.2 结构体变量的定义及初始化 4、结构体变量的动态初始化或输出 struct student { int num; SWPU C语言程序设计 9.1.2 结构体变量的定义及初始化 4、结构体变量的动态初始化或输出 struct student { int num; char name[20]; char gender; int age; float score; }std1; scanf(“%d”,&std1.num); scanf(“%s”,std1.name); scanf(“ %c”,&std1.gender); scanf(“%d”,&std1.age); scanf(“%f”,&std1.score); printf(“%d, %s, %c, %d, %f\n”, std1.num, std1.name, std1.gender, std1.age, std1.score);
9.1.4结构指针变量 一个指针当用来指向一个结构时, 称之为结构指针变量。 结构指针变量中的值是所指向的结构变量的首地址。 结构指针变量声明的一般形式为: struct 结构名 *结构指针变量名 通过结构指针可以访问该结构变量的成员,一般形式为: (*结构指针变量).成员名 或者 结构指针变量->成员名 struct stu *pstu; (*pstu).num 或者: pstu->num
9.1.3结构数组 元素为结构类型的数组称为结构数组。 在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。例如一个班的学员档案,一个公司的职工档案等。 struct student { int num; char* name; char sex; float score; }stu[30]; 定义了一个结构数组stu,共有30个元素,stu[0]~stu[29]。每个数组元素都具有struct student的结构形式。
SWPU C语言程序设计 9.1.5 typedef typedef:C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 struct student { int num; char name[50]; char gender; int age; float score; char addr[50]; }; struct student st1; typedef struct student { int num; char name[50]; char gender; int age; float score; char addr[50]; }mytype; mytype st1;
9.1.5 区分typedef与define typedef char* pStr1; #define pStr2 char * SWPU C语言程序设计 9.1.5 区分typedef与define typedef char* pStr1; #define pStr2 char * pStr1 s1, s2; pStr2 s3, s4;
练 习 课堂练习 一个学生包含如下信息: 设计一个程序:提示用户输入该学生的 对应信息,然后输出这些信息 num name class SWPU C语言程序设计 练 习 课堂练习 一个学生包含如下信息: num name class score computer math english 设计一个程序:提示用户输入该学生的 对应信息,然后输出这些信息
Thank You ! www.themegallery.com