第五章复杂构造数据类型 今5.1结构体 5,2共用体 今5.3枚举类型
❖ 5.1 结构体 ❖ 5.2 共用体 ❖ 5.3 枚举类型 第五章 复杂构造数据类型
5.1结构体 51结构体的引出及使用 特点:数据与数据之间有关联,是一个整体。 学生信息:学号,姓名,性别,年龄,入学成绩,所属 学院等信息 如:0501,李明,男,19,610,信息 职工编号姓名性别民族出生日期职称学历单位工龄 1997025孙杰男汉|1974.9讲师大学信息9
5.1 结构体 5.1 结构体的引出及使用 ➢特点:数据与数据之间有关联,是一个整体。 职工编号 姓名 性别 民族 出生日期 职称 学历 单位 工龄 1997025 孙杰 男 汉 1974.9 讲师 大学 信息 9 学生信息:学号,姓名,性别,年龄,入学成绩,所属 学院等信息。 如:0501,李明,男,19,610,信息
511结构体的引出及使用 结构体的引出 学生信息:学号,姓名,性别,年龄,入学成绩,所属 学院等信息。 如:0501,李明,男,19,610,信息 如何表示这样的数据信息? >由一些逻辑相关,但数据类型不同的分量组成的 组数据,定义为结构体 匚学号姓名性别「年龄入学成绩所属学院 int num char name[101 charsex int age int score char institute[201
5.1.1 结构体的引出及使用 如何表示这样的数据信息? ➢由一些逻辑相关, 但数据类型不同的分量组成的一 组数据,定义为结构体。 学号 姓名 性别 年龄 入学成绩 所属学院 int num char name[10] char sex int age int score char institute[20] 一、结构体的引出 学生信息:学号,姓名,性别,年龄,入学成绩,所属 学院等信息。 如:0501,李明,男,19,610,信息
511结构体的引出及使用 例5-1输入三个学生的信息,并输出。 #include void main( 定义学生的结构体类型 &struct student int num char name 101 char sex. int age: int score 定义3个结构体类型的变量, char institute 20] 用来存放3个学生的信息 struct student sl, S2, S3
5.1.1 结构体的引出及使用 例5-1 输入三个学生的信息,并输出。 #include void main( ) { struct student { int num ; char name[10] ; char sex; int age; int score ; char institute[20] }; struct student s1, s2, s3; 定义学生的结构体类型 定义3个结构体类型的变量, 用来存放3个学生的信息
511结构体的引出及使用 void main( scanf(%c %d %d %d", &slsex, &sl num, &sl age, &sl score) gets(sl name); gets(slinstitute); 输入一个学生的信息 scanf("%c %d %d %d",&s2. sex, &s2. num, &s2. age, &s2score); gets(s2. name); gets(s2institute); scanf(%c %d %d %d",&s3. sex, &s3. num, &s3. age, &s3. score); gets(s3. name); gets(s3 institute) printi%6d‰10s‰c%3d”,sl.num, sI name,sl.sex, sI age) printf(%5d %20s In",sl score, sIinstitue) 输出学生信息 printi(%6d‰10s‰c‰3d”,s2num,S2name,s2.sex,S2age); printf(“%5d%20sⅦn”,s2 score,s2 institue); prin(“%6d%10s%2c‰3d”,S3num,s3.name,s3,sex,s3.agel) prin(5d%20sⅦn”,s3 score,s3. institue);
5.1.1 结构体的引出及使用 void main( ) { : scanf(“%c %d %d %d”, &s1.sex , &s1.num , &s1.age, &s1.score); gets(s1.name); gets(s1.institute); scanf(“%c %d %d %d”, &s2.sex , &s2.num , &s2.age, &s2.score); gets(s2.name); gets(s2.institute); scanf(“%c %d %d %d”, &s3.sex , &s3.num , &s3.age, &s3.score); gets(s3.name); gets(s3.institute); 输入一个学生的信息 printf(“%6d %10s %2c %3d ”, s1.num, s1.name, s1.sex, s1.age); printf(“%5d %20s \n”, s1.score, s1.institue); printf(“%6d %10s %2c %3d ”, s2.num, s2.name, s2.sex, s2.age); printf(“%5d %20s \n”, s2.score, s2.institue); printf(“%6d %10s %2c %3d ”, s3.num, s3.name, s3.sex, s3.age); printf(“%5d %20s \n”, s3.score, s3.institue); } 输出学生信息
511结构体的引出及使用 结构体的定义及使用 struct student 1、结构体类型的定义 用户定义{ int num 的标识符 har name 10 i struct结构体类型名 char sex; 关数据类型成员名 int age: int score 键数据类型成员名2;成员表列, char instit20 字 数据类型成员名n; 注意不要忘了分号 注意:定义了结构体类型,仅仅是定义了数据的组织形式,创立了 种数据类型。但并不会为这种结构体类型分配内存空间 只有定义了结构体变量,才会为变量分配空间
struct student { int num ; char name[10] ; char sex; int age; int score ; char institute[20] }; 二、结构体的定义及使用 5.1.1 结构体的引出及使用 注意: 定义了结构体类型,仅仅是定义了数据的组织形式,创立了 一种数据类型。但并不会为这种结构体类型分配内存空间 只有定义了结构体变量,才会为变量分配空间。 注意不要忘了分号 成员表列 1、结构体类型的定义: struct 结构体类型名 { 数据类型 成员名1; 数据类型 成员名2; : : 数据类型 成员名n; } ; 关 键 字 用户定义 的标识符
511结构体的引出及使用 2、定义结构体变量的方法 name 1)先定义结构体类型,再定义变量 age struct student stl 结构体 2 char namel101;类型定义」name int age i 结构体 age int sI 2 st2 变量定义 S2 struct student stI, st2 i 内存中结构体变量占有一片连续的存储单元,其占用的字节数 可用 sizeof运算符算出: printf(odin, sizeof(struct student)) printf(se odn”, sizeof(st1)) 结构体变量s和st2各自都需要16个字节的存储空间
5.1.1 结构体的引出及使用 2、 定义结构体变量的方法 (1) 先定义结构体类型, 再定义变量 struct student { char name[10] ; int age ; int s1 , s2 ; } ; struct student st1 , st2 ; st1 st2 name age s1 s2 name age s1 s2 ➢内存中结构体变量占有一片连续的存储单元, 其占用的字节数 可用sizeof 运算符算出: printf(“%d\n” , sizeof(struct student) ) ; printf(“%d\n” , sizeof(st1) ) ; ➢结构体变量st1和st2各自都需要16个字节的存储空间 结构体 类型定义 结构体 变量定义
511结构体的引出及使用 2、定义结构体变量的方法 (2)定义结构体类型同时定义变量 struct student i char name 10; int age int s1. s2 3 stl,st2 定义结构体变量 (3)直接定义结构体变量 struct 注意这里没有结构体类型名 char namel101;这种方式有时使用并不方便 int age i 因此不建议大家采用 int sI, s2 i 3 stI, st2 i
5.1.1 结构体的引出及使用 2、 定义结构体变量的方法 (2) 定义结构体类型同时定义变量 struct student { char name[10] ; int age ; int s1 , s2 ; } st1 , st2 ; (3) 直接定义结构体变量 struct { char name[10] ; int age ; int s1 , s2 ; } st1 , st2 ; 注意:这里没有结构体类型名 这种方式有时使用并不方便 因此不建议大家采用 定义结构体变量
511结构体的引出及使用 结构体类型可以嵌套定义 例: struct date 或: struct stud int year i i char name 101; int month struct date int day i int year i int month struct stud int day i char name; 3 birthday i struct date birthday int s1, S2 int sI. s2
5.1.1 结构体的引出及使用 例: struct date { int year ; int month ; int day ; } ; struct stud { char name[10] ; struct date birthday ; int s1 , s2 ; } ; ➢结构体类型可以嵌套定义 或 : struct stud { char name[10] ; struct date { int year ; int month ; int day ; } birthday ; int s1 , s2 ; } ;
511结构体的引出及使用 3、结构体变量的引用 格式:结构体变量名。成员名 struct student struct student stI i { char name10; strep(stl.name,“Mary”); int age stl age=21; int SI, S2 stl. sI=78 st1.s2=86; 说明: (1)一般情况下都是对结构体变量的成员进行赋值和 输入输出 (2)特殊情况下结构体变量可以进行整体赋值 (3)可以引用结构体变量的地址和其成员的地址
5.1.1 结构体的引出及使用 3、结构体变量的引用 格式: 结构体变量名. 成员名 struct student { char name[10] ; int age ; int s1 , s2 ; } ; struct student st1 ; strcpy(st1. name, “Mary” ); st1. age = 21 ; st1. s1 = 78 ; st1. s2 = 86 ; 说明: (1) 一般情况下都是对结构体变量的成员进行赋值和 输入\输出 (2) 特殊情况下结构体变量可以进行整体赋值 (3) 可以引用结构体变量的地址和其成员的地址