C语言程序设计 第五章复杂构造数据类型 济南大学
C语言程序设计 第五章 复杂构造数据类型 —————————————————————————— —————————— 济南大学
第五章复杂构造数据类 >51结构体 >52共用体 >53枚举类型 >5.4链表
第五章 复杂构造数据类型 ➢ 5.1 结构体 ➢ 5.2 共用体 ➢ 5.3 枚举类型 ➢ 5.4 链表
51结构体 在解决实际问题时,有时需要将多个不同类型的数据组合在 起表达一个整体的信息。 例如:描述一个学生的完整信息时,有学号、姓名、年龄、成 绩、家庭地址等项。 nuln name sex age score addr 5001 Li Ming M 1996.5 Beijing int num: char name 20] C语言提供了这种数据结构:允许用户将不 char sex: 同类型的数据组合成一个有机的整体,这些数据 int age. 互相联系;这种数据结构称为结构体( structure float score: char addr 30; 心U
5.1 结构体 在解决实际问题时,有时需要将多个不同类型的数据组合在一 起表达一个整体的信息。 例如:描述一个学生的完整信息时,有学号、姓名、年龄、成 绩、家庭地址等项。 num name sex age score addr 5001 Li Ming M 19 96.5 Beijing int num; char name[20]; char sex; int age; float score; char addr[30]; C语言提供了这种数据结构:允许用户将不 同类型的数据组合成一个有机的整体,这些数据 互相联系;这种数据结构称为结构体(structure)
结构体类型在使用之前应先定义,然后再定义该类型变量, 才能使用。 定义一个结构体类型的一般形式: struct student struct结构体名 int num: 类型标识符1成员名1; char name20i 类型标识符2成员名2;成员表列 char sex; (域表)‖ int age; ●·● float score: 类型标识符n成员名n; char addr 30e
结构体类型在使用之前应先定义,然后再定义该类型变量, 才能使用。 定义一个结构体类型的一般形式: struct 结构体名 { 类型标识符1 成员名1; 类型标识符2 成员名2; …… …… 类型标识符n 成员名n; }; 成员表列 (域表) struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
1定义结构体类型变量的方法 1、先定义结构体类型再定义结构体变量 struct student int num; struct student stu 1, stu2. char name 20: num 2B float score: 结构体类型名变量列表 name 20B stul score 4B 在定义了结构体变量后,系统会为之分配mum.2B 内存单元 name 20B 5stu2 sizeof(stul)=2+ 20+4=26 score 4B C
1 定义结构体类型变量的方法 1、先定义结构体类型再定义结构体变量 struct student { int num; char name[20]; float score; }; struct student stu1,stu2; 结构体类型名 变量列表 在定义了结构体变量后,系统会为之分配 内存单元。 sizeof(stu1)= 2 + 20 + 4 = 26 num 2B name 20B score 4B num 2B name 20B score 4B stu1 stu2
2、在定义结构体类型的同时定义变量 struct student int num: char name 20; float score 3stul, stu2 3、直接定义结构体类型变量(不出现结构体类型名) struct int num: char name 20; float score: 3stul, stu2 心U
2、在定义结构体类型的同时定义变量 struct student { int num; char name[20]; float score; }stu1, stu2; 3、直接定义结构体类型变量 struct { int num; char name[20]; float score; }stu1, stu2; (不出现结构体类型名)
4、说明 ①、类型与变量是不同的概念,不要混淆: 只能对变量赋值、存取或运算,而不能对一个类型赋值、存取 或运算;在编译时,对类型不分配内存空间,只对变量分配空间。 ②、结构体变量可以嵌套定义; struct student struct date i int num; { char name 20; int years char sex: int month; struct date birth int day; char addr[ 30]; }; sizeof(struct student)=? 2+20+1+6+30=59 心U
4、说明 ①、类型与变量是不同的概念,不要混淆: 只能对变量赋值、存取或运算,而不能对一个类型赋值、存取 或运算;在编译时,对类型不分配内存空间,只对变量分配空间。 ②、结构体变量可以嵌套定义; struct date { int year; int month; int day; }; struct student { int num; char name[20]; char sex; struct date birth; char addr[30]; }; sizeof(struct student)=? 2+20+1+6+30=59
2结构体变量的引用 成员运算符,优先级最高 1、引用形式: 结构体变量名城员名 struct student t int num; struct student stul, stu2; char name[20] stu 1. num= 10001. float score strcpy(stul. name, Li Ming"); stu 1 score=95
2 结构体变量的引用 1、引用形式: 结构体变量名.成员名 成员运算符,优先级最高 struct student { int num; char name[20]; float score; }; struct student stu1,stu2; stu1.num=10001; strcpy(stu1.name, "Li Ming"); stu1.score=95;
例、定义一个结构体类型 Student,成员包括学号、姓名和成绩,请 输入并输出该学生的信息。 问题: 如何定义一个结构体类型? 如何使用结构体类型? 定义相应的变量 结构体类型定义在何处?函数内还是函数外? 都可以,但一般放在函数外面,且放在所有函数之前,预处理命令 之后,以便所有的函数都可以使用;类似全局变量 如何输入输出结构体成员? 逐个输入输出成员
例、定义一个结构体类型student,成员包括学号、姓名和成绩,请 输入并输出该学生的信息。 问题: ➢如何定义一个结构体类型? ➢如何使用结构体类型? 定义相应的变量 ➢结构体类型定义在何处?函数内还是函数外? 都可以,但一般放在函数外面,且放在所有函数之前,预处理命令 之后,以便所有的函数都可以使用;类似全局变量 ➢如何输入输出结构体成员? 逐个输入输出成员
include struct student Int num; char name[20] float score: void main( struct student s printf("nnum:); printf("nnum scanf(%d", &s num) scanf("%d", &snum printf("name getchar) scanf("%s", s name);) printf("name: ) gets(s name) printf("score: ) scanf("%f", &sscore) 说明:在使用gets函数前使用 printf( "\nnum: %d\n" snum) getchar函数,把上次的回车 printf("name: %sIn",Sname); 读走 printf("score: %fn",sscore)
#include struct student { int num; char name[20]; float score; }; void main( ) { } struct student s; printf("\nnum:"); scanf("%d",&s.num); printf("name:"); scanf("%s",s.name); printf("score:"); scanf("%f",&s.score); printf("\nnum:%d\n",s.num); printf("name:%s\n",s.name); printf("score:%f\n",s.score); printf("\nnum:"); scanf("%d",&s.num); getchar( ); printf("name:"); gets(s.name); 说明:在使用gets函数前使用 getchar函数,把上次的回车 读走