精品-清华大学C语言课件 第12章02 结构体数组概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体数组概述
本讲大纲
1.定义结构体数组 2.初始化结构体数组 实例3 比较计数 实例4 找出最高分
定义结构体数组
定义一个结构体数组的方式与定义结构体变量的方法相同,只是结构体变量替换成数组。定义结构体数组 的一般形式如下:
struct 结构体名 { 成员列表; }数组名;
例如,定义学生信息的结构体数组,其中包含5个学生的信息:
m = i;/*记录最大成绩下标*/ printf("最高分是:%5.1f\n", maxscore);/*输出最大成绩*/
printf("最高分学生的学号: %d\n", stu[m].num);/*最大成绩的学号*/ printf(“最高分学生的姓名: %s\n”, stu[m].name);/*最大成绩的姓名*/
struct Student/*学生结构*/ { char cName[20];/*姓名*/ int iNumber;/*学号*/ char cSex[3];/*性别*/ int iGrade;/*年级*/ } student[5];/*定义结构体数组*/
这种定义的结构体数组的方式是,声明结构体类型的同时定义结构体数组,可以看到结构体数组和结 构体变量的位置是相同的。
student[ ]={…};
定义结构体数组的方法,可以先进行声明结构体类型,然后再定义结构体数组。同样为结构体数组 进行初始化操作也可以使用同样的方式,例如:
student[5]={{"王红玉",12062212,"男",3}, {"孙佳",12062213, "女",3}, {"张海波",12062214, "女",3}, {"李仕平",12062215, "男",3}, {"王雪",12062216, "女",3}};
运行结果如图12.8所示。 图12.8 比较计数
实例4 找出最高分
通过结构体变量记录学生成绩,比较得到记录中的最高成绩,输出该学生的信息。
#include<stdio.h> struct student/*结构体成员*/
int num; char name[20]; float score; void main() int i, m; float maxscore; struct student stu[5] =
为数组进行初始化时,最外层的大括号是表示所列出的是数组中的元素。因为每一个是结构类型,所 以每一个元素也使用大括号,其中是每一个结构体元素的成员数据。
在定义数组student时,也可以不用指定数组中的元素个数。这个时候编译器会根据数组后面的初始 化值列表中给出的元素个数,来确定数组中元素的个数。例如:
{101, "李明", 89} , {102, "苑达", 95}, {103, "孙佳", 89}, {104, "王子川", 85}, {105, “刘春月”, 75} m = 0; maxscore = stu[0].score;/*初始化最大成绩*/ for (i = 1; i < 5; i++) if (stu[i].score > maxscore) maxscore = stu[i].score;/*记录最大成绩*/
就像定义结构体变量一样,定义结构体数组也可以有不同的方式,例如先声明结构体类型再进行定义 结构体数组:
struct Student student[5];/*定义结构体数组*/
上面的代码都是定义一个数组,其中的元素为struct Student类型的数据,每个数据中又有4个成员 变量,如图12.5所示:
运行程序,显示效果如图12.7所示: 图12.7 输出学生信息
实例3 比较计数
用“比较计数”法对结构数组a按字段num进行升序排序,num的值从键盘中输入。
#include <stdio.h> #define N 5 struct order/*定义结构体用来存储数据及它的排序*/ int num; int con; }a[20];/*定义结构体数组a*/ main() { int i,j; for(i=0;i<N;i++) scanf("%d",&a[i].num);/*输入要进行排序的5个数字*/ a[i].con=0; for(i=N-1;i>=1;i--) for(j=i-1;j>=0;j--) if(a[i].num<a[j].num)/*对数组中的每个元素和其他元素比较*/ a[j].con++;/*记录排序号*/ else a[i].con++; printf("各数的顺序是:\n"); for(i=0;i<N;i++) printf("%3d%3d\n",a[i].num,a[i].con);/*将数据及其排序输出*/ }
struct Student/*学生结构*/ { char cName[20];/*姓名*/ int iNumber;/*学号*/ char cSex[3];/*性别*/ int iGrade;/*年级*/ } student[5]={{"王红玉",12062212, "男",3}, {"孙佳",12062213, "女",3}, {"张海波",12062214, "女",3}, {"李仕平",12062215, "男",3}, {"王雪",12062216, "女",3}};/*定义数组并设置初始值*/
【例12.1】 初始化结构体数组,并输出学生信息。
在本实例中,结构体数组通过初始化的方式保存学生信息。输出查看学生的信息,因为所查看的学 生信息是一样的,因此可以使用循环操作。
#include<stdio.h> struct Student/*学生结构*/ char cName[20];/*姓名*/ int iNumber;/*学号*/ char cSex[3];/*性别*/ int iGrade;} student[5]={{"王红玉",12062212, "男",3}, {"孙佳",12062213, "女",3}, {"张海波",12062214, "女",3}, {"李仕平",12062215, "男",3}, {"王雪",12062216, "女",3}};/*定义数组并设置初始值*/
程序运行效果如图12.9所示。 图12.9 找出最高分
Thank you
图12.5 结构体数组 数组中的各数据在内存中的存储是连续的,如图ห้องสมุดไป่ตู้2.6所示:
图12.6 数组数据在内存中
初始化结构体数组
与初始化基本类型的数组相同,也可以为结构体数组进行初始化操作。初始化结构体数组一般形式如 下:
struct 结构体名 { 成员列表; }数组名={初始值列表};
例如为学生信息结构体数组进行初始化操作:
本讲大纲
1.定义结构体数组 2.初始化结构体数组 实例3 比较计数 实例4 找出最高分
定义结构体数组
定义一个结构体数组的方式与定义结构体变量的方法相同,只是结构体变量替换成数组。定义结构体数组 的一般形式如下:
struct 结构体名 { 成员列表; }数组名;
例如,定义学生信息的结构体数组,其中包含5个学生的信息:
m = i;/*记录最大成绩下标*/ printf("最高分是:%5.1f\n", maxscore);/*输出最大成绩*/
printf("最高分学生的学号: %d\n", stu[m].num);/*最大成绩的学号*/ printf(“最高分学生的姓名: %s\n”, stu[m].name);/*最大成绩的姓名*/
struct Student/*学生结构*/ { char cName[20];/*姓名*/ int iNumber;/*学号*/ char cSex[3];/*性别*/ int iGrade;/*年级*/ } student[5];/*定义结构体数组*/
这种定义的结构体数组的方式是,声明结构体类型的同时定义结构体数组,可以看到结构体数组和结 构体变量的位置是相同的。
student[ ]={…};
定义结构体数组的方法,可以先进行声明结构体类型,然后再定义结构体数组。同样为结构体数组 进行初始化操作也可以使用同样的方式,例如:
student[5]={{"王红玉",12062212,"男",3}, {"孙佳",12062213, "女",3}, {"张海波",12062214, "女",3}, {"李仕平",12062215, "男",3}, {"王雪",12062216, "女",3}};
运行结果如图12.8所示。 图12.8 比较计数
实例4 找出最高分
通过结构体变量记录学生成绩,比较得到记录中的最高成绩,输出该学生的信息。
#include<stdio.h> struct student/*结构体成员*/
int num; char name[20]; float score; void main() int i, m; float maxscore; struct student stu[5] =
为数组进行初始化时,最外层的大括号是表示所列出的是数组中的元素。因为每一个是结构类型,所 以每一个元素也使用大括号,其中是每一个结构体元素的成员数据。
在定义数组student时,也可以不用指定数组中的元素个数。这个时候编译器会根据数组后面的初始 化值列表中给出的元素个数,来确定数组中元素的个数。例如:
{101, "李明", 89} , {102, "苑达", 95}, {103, "孙佳", 89}, {104, "王子川", 85}, {105, “刘春月”, 75} m = 0; maxscore = stu[0].score;/*初始化最大成绩*/ for (i = 1; i < 5; i++) if (stu[i].score > maxscore) maxscore = stu[i].score;/*记录最大成绩*/
就像定义结构体变量一样,定义结构体数组也可以有不同的方式,例如先声明结构体类型再进行定义 结构体数组:
struct Student student[5];/*定义结构体数组*/
上面的代码都是定义一个数组,其中的元素为struct Student类型的数据,每个数据中又有4个成员 变量,如图12.5所示:
运行程序,显示效果如图12.7所示: 图12.7 输出学生信息
实例3 比较计数
用“比较计数”法对结构数组a按字段num进行升序排序,num的值从键盘中输入。
#include <stdio.h> #define N 5 struct order/*定义结构体用来存储数据及它的排序*/ int num; int con; }a[20];/*定义结构体数组a*/ main() { int i,j; for(i=0;i<N;i++) scanf("%d",&a[i].num);/*输入要进行排序的5个数字*/ a[i].con=0; for(i=N-1;i>=1;i--) for(j=i-1;j>=0;j--) if(a[i].num<a[j].num)/*对数组中的每个元素和其他元素比较*/ a[j].con++;/*记录排序号*/ else a[i].con++; printf("各数的顺序是:\n"); for(i=0;i<N;i++) printf("%3d%3d\n",a[i].num,a[i].con);/*将数据及其排序输出*/ }
struct Student/*学生结构*/ { char cName[20];/*姓名*/ int iNumber;/*学号*/ char cSex[3];/*性别*/ int iGrade;/*年级*/ } student[5]={{"王红玉",12062212, "男",3}, {"孙佳",12062213, "女",3}, {"张海波",12062214, "女",3}, {"李仕平",12062215, "男",3}, {"王雪",12062216, "女",3}};/*定义数组并设置初始值*/
【例12.1】 初始化结构体数组,并输出学生信息。
在本实例中,结构体数组通过初始化的方式保存学生信息。输出查看学生的信息,因为所查看的学 生信息是一样的,因此可以使用循环操作。
#include<stdio.h> struct Student/*学生结构*/ char cName[20];/*姓名*/ int iNumber;/*学号*/ char cSex[3];/*性别*/ int iGrade;} student[5]={{"王红玉",12062212, "男",3}, {"孙佳",12062213, "女",3}, {"张海波",12062214, "女",3}, {"李仕平",12062215, "男",3}, {"王雪",12062216, "女",3}};/*定义数组并设置初始值*/
程序运行效果如图12.9所示。 图12.9 找出最高分
Thank you
图12.5 结构体数组 数组中的各数据在内存中的存储是连续的,如图ห้องสมุดไป่ตู้2.6所示:
图12.6 数组数据在内存中
初始化结构体数组
与初始化基本类型的数组相同,也可以为结构体数组进行初始化操作。初始化结构体数组一般形式如 下:
struct 结构体名 { 成员列表; }数组名={初始值列表};
例如为学生信息结构体数组进行初始化操作: