问题的提出 令例8-1下表为学生的信息表,要求从键盘输入 学生的信息,并将学生成绩小于平均成绩的学 生信息输出。 char name[NI[20 char N; int ageN; float score[NI; 、学号处名性别年龄「成 int num; 1001 Zhang M 19 88.5 1002 18 90.0 1003 Wang 20 89.0 1004 Zhao 83.5 ☆☆第8章结构体、共用体与枚举类型
☆☆ 第8章 结构体、共用体与枚举类型 1 ❖例8-1 下表为学生的信息表,要求从键盘输入 学生的信息,并将学生成绩小于平均成绩的学 生信息输出。 学 号 姓 名 性 别 年 龄 成 绩 1001 Zhang M 19 88.5 1002 Li M 18 90.0 1003 Wang F 20 89.0 1004 Zhao M 19 83.5 int num[N]; char name[N][20]; char sex[N]; int age[N]; floatscore[N]; 问题的提出
问题的提出 #include #define n 4 void main( int numN ∥存放各学生的学号 char nameN20;∥存放各学生的姓名 char sex ne ∥存放各学生的性别 int ageN ∥存放各学生的年龄 float scoreN; ∥存放各学生的成绩 Int l float sum=0,aver;∥/表示总成绩和平均成绩 for(i=0; i<N; i+ scanf("%d", &numi: scanf("%s", nameiD; fflush(stdin) /清除输入缓冲区中剩余的内容 scanf("%", &sexi scanf(%d", &agei scanf("%f", &score i) 问题: sum+=scorei]; num、name、sex、age、 score aver-sum 分别定义为互相独立的数组,难以 printf("n 反映它们之间的内在联系。 for(i=0; i<N; i++) if(scorei<aver) printf("%d %s%c %d%f\n, num il, namei,sex i, agel, score[i; ☆☆第8章结构体、共用体与枚举类型
☆☆ 第8章 结构体、共用体与枚举类型 2 问题的提出 #include #define N 4 void main() { int num[N]; // 存放各学生的学号 char name[N][20]; // 存放各学生的姓名 char sex[N]; // 存放各学生的性别 int age[N]; // 存放各学生的年龄 float score[N]; // 存放各学生的成绩 int i; float sum=0,aver; // 表示总成绩和平均成绩 for(i=0;i<N;i++) { scanf("%d",&num[i]); scanf("%s",name[i]); fflush(stdin); //清除输入缓冲区中剩余的内容 scanf("%c",&sex[i]); scanf("%d",&age[i]); scanf("%f",&score[i]); sum+=score[i]; } aver=sum/N; printf("\n"); for(i=0;i<N;i++) if(score[i]<aver) printf("%d %s %c %d %f\n",num[i],name[i],sex[i], age[i],score[i]); } 问题: num、name、sex、age、score 分别定义为互相独立的数组,难以 反映它们之间的内在联系
第8章结构体、共用体与枚举类型 ◆本章要求 理解构造数据类型的概念 ■掌握结构体变量的定义和使用 掌握结构体数组、结构体指针的定义和使用 了解链表的概念和链表的常见操作 ■了解共用体变量的定义和使用 ■了解枚举数据类型及自定义数据类型的使用 ◆本章难点 结构体数组 结构体指针 ☆☆第8章结构体、共用体与枚举类型
☆☆ 第8章 结构体、共用体与枚举类型 3 第8章 结构体、共用体与枚举类型 ❖本章要求 ▪ 理解构造数据类型的概念 ▪ 掌握结构体变量的定义和使用 ▪ 掌握结构体数组、结构体指针的定义和使用 ▪ 了解链表的概念和链表的常见操作 ▪ 了解共用体变量的定义和使用 ▪ 了解枚举数据类型及自定义数据类型的使用 ❖本章难点 ▪ 结构体数组 ▪ 结构体指针
第8章结构体、共用体与枚举类型 ◆8.1结构体类型与结构体变量 ◆82结构体数组 ◆8.3结构体与函数 ◆8.4动态数据结构—链表 ◆8.5共用体 ◆86枚举类型 ◆8.7自定义类型标识符 ☆☆第8章结构体、共用体与枚举类型
☆☆ 第8章 结构体、共用体与枚举类型 4 第8章 结构体、共用体与枚举类型 ❖8.1 结构体类型与结构体变量 ❖8.2 结构体数组 ❖8.3 结构体与函数 ❖8.4 动态数据结构——链表 ❖8.5 共用体 ❖8.6 枚举类型 ❖8.7 自定义类型标识符
81结构体类型与结构体变量 ◆81.2结构体的声明 °声明结构体类型的一般形式: struct结构体名 声明结构体类型的 关键字,不能省略 数据成员1; 标识符,由用户给定 数据成员2; 今用两个花括号括住的内容}; 数据成员m;÷举例: struct student 是该结构体中的各个成员 i int num; 令每个成员有自己的数据类 char name 20: 型,都应进行类型说明 char sex: int age fle oat score; ☆☆第8章结构体、共用体与枚举类型
☆☆ 第8章 结构体、共用体与枚举类型 5 8.1 结构体类型与结构体变量 ❖8.1.2 结构体的声明 声明结构体类型的 关键字,不能省略 •声明结构体类型的一般形式: struct 结构体名 { 数据成员1; 数据成员2; …… 数据成员n; }; 标识符,由用户给定 ❖ 用两个花括号括住的内容 是该结构体中的各个成员 ❖ 每个成员有自己的数据类 型,都应进行类型说明 ❖举例: structstudent { int num; char name[20]; char sex; int age; floatscore; };
81结构体类型与结构体变量 令有关结构体的几点说明: 1、声明结构体类型只是说明了一种结构体的组织形式,在 编译时并不为它分配存储空间。只是在定义结构体类型变 量后,才为变量按照其组织形式分配内存空间。 2、结构体的成员可以是简单变量、数组、指针,还可以是 另一个已定义的结构体或共用体变量。 当定义一个结构体的成员又是一个结构体类型,这称为 结构体的嵌套定义。 struct student struct date i int num i int year char name[20 int month; char sex: int day; struct date birthday; float score ☆☆第8章结构体、共用体与枚举类型
☆☆ 第8章 结构体、共用体与枚举类型 6 8.1 结构体类型与结构体变量 ❖有关结构体的几点说明: ▪ 1、声明结构体类型只是说明了一种结构体的组织形式,在 编译时并不为它分配存储空间。只是在定义结构体类型变 量后,才为变量按照其组织形式分配内存空间。 ▪ 2、结构体的成员可以是简单变量、数组、指针,还可以是 另一个已定义的结构体或共用体变量。 • 当定义一个结构体的成员又是一个结构体类型,这称为 结构体的嵌套定义。 struct student { int num; char name[20]; char sex; struct date birthday; float score; }; struct date { int year; int month; int day; };
81结构体类型与结构体变量 3、结构体声明可以在函数内部, void maino 也可在函数外部。 struct student 在函数内部声明的结构体,只能在 Int num char name 20; 函数内部使用; char sex: Int age; n在函数外部声明的结构体,从声明 float scores 处到源文件结尾之间的所有函数都可31,t 使用。 4、结构体成员的名字可以同程序 中的其他变量名相同,两者的意 义不同,不会相混。 ☆☆第8章结构体、共用体与枚举类型
☆☆ 第8章 结构体、共用体与枚举类型 7 8.1 结构体类型与结构体变量 3、结构体声明可以在函数内部, 也可在函数外部。 ▪ 在函数内部声明的结构体,只能在 函数内部使用; ▪ 在函数外部声明的结构体,从声明 处到源文件结尾之间的所有函数都可 使用。 4、结构体成员的名字可以同程序 中的其他变量名相同,两者的意 义不同,不会相混。 void main() { struct student { int num; char name[20]; char sex; int age; float score; }stu1,stu2; …… }
81结构体类型与结构体变量 令81.3结构体变量的定义 1、先声明结构体类型,再定义变量 struct student t int num; char name[20]i char sex; int age; float score struct student stul, stu2 ☆☆第8章结构体、共用体与枚举类型 8
☆☆ 第8章 结构体、共用体与枚举类型 8 8.1 结构体类型与结构体变量 ❖8.1.3 结构体变量的定义 ▪ 1、先声明结构体类型,再定义变量 struct student { int num; char name[20]; char sex; int age; float score; }; struct student stu1, stu2;
81结构体类型与结构体变量 令2、在声明类型的同时定义变量 struct结构体名 举例: struct student 成员列表; i int num; char name 20l; }变量名表列 char sex Int age; fe oat score 3stul, stu2; ☆☆第8章结构体、共用体与枚举类型
☆☆ 第8章 结构体、共用体与枚举类型 9 8.1 结构体类型与结构体变量 ❖2、在声明类型的同时定义变量 struct 结构体名 { 成员列表; }变量名表列; 举例: struct student { int num; char name[20]; char sex; int age; float score; }stu1,stu2;
81结构体类型与结构体变量 令3、直接定义结构体类型变量 struct 举例: struct 成员表列; int num; char name 20; }变量名表列; char sex. int age. float score 3stul, stu2; 与第2种方式的区别:未声明结构体类型 不建议使用 ☆☆第8章结构体、共用体与枚举类型
☆☆ 第8章 结构体、共用体与枚举类型 10 8.1 结构体类型与结构体变量 ❖3、直接定义结构体类型变量 struct { 成员表列; }变量名表列; 举例: struct { int num; char name[20]; char sex; int age; float score; }stu1,stu2; •与第2种方式的区别:未声明结构体类型 •不建议使用