5.3.5 C51的结构数组
结构数组是指由具有相同结构类型的下标结构变量组成的数组。结构数组中的每个数组元素都是结构变量。在实际程序设计中,常用结构数组来表示具有相同数据结构的一个数据的集合。例如,一个班级或者学校的学生成绩档案、一个公司职员的工资表等。
1.结构数组的声明
在C51语言中,声明结构数组的方法与声明结构变量相类似,可以先声明结构,再声明结构数组,示例如下。
struct student//声明结构
{
int num;//学号
char name[20];//姓名
char sex[2];//性别
int age;//年龄
float score;//成绩
};
struct student class1[5];//声明结构数组
本例中,先声明结构student,再声明结构数组class1,结构数组class1共有5个元素,class1[0]~class1[4],每个数组元素都具有结构student的形式。
用户也可以在声明结构时,同时声明结构数组,示例如下。
struct student//声明结构
{
int num;//学号
char name[20];//姓名
char sex[2];//性别
int age;//年龄
float score;//成绩
}class1[5];//声明结构数组
这种方式声明的结构数组与上一种方式是相同的。
2.结构数组的初始化
与结构变量一样,在声明结构数组的同时,也可以对其进行初始化赋值。示例如下。
struct student//声明结构
{
int num;//学号
char name[20];//姓名
char sex[2];//性别
int age;//年龄
float score;//成绩
}class1[5]={//声明结构数组并初始化
{100“Alice”,“F”,24,90.5},
{101,“Bob”,“M”,24,88.0},
{102,“Jack”,“M”,25,95.5},
{103,“Twis”,“M”,23,69.5},
{104,“Bohm”,“M”,21,82.5}
};
结构数组的初始化的程序示例如下。
include<stdio.h>//头文件
struct student//声明结构
{
int num;//学号
char name[20];//姓名
char sex[2];//性别
int age;//年龄
float score;//成绩
}class1[5]={//声明结构数组并初始化
{100“Alice”,“F”,24,90.5},
{101,“Bob”,“M”,24,88.0},
{102,“Jack”,“M”,25,95.5},
{103,“Twis”,“M”,23,69.5},
{104,“Bohm”,“M”,21,82.5}
};
void main()//主函数
{
int i;
for(i=0;i<5;i++)//循环
{
if(boy[i].score>=90.0)//判断成绩是否大于90,如果大于则输出
printf(“%d%s%s%d%f\n”,class1[i].num,class1[i].name,class1[i].sex,class1[i].age,class1[i].score);
}
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
100 Alice F 24 90.500000
102 Jack M 25 95.500000
本例中,先声明了结构数组class1[5]并初始化。然后在主函数中,通过一个for循环语句,判断每个学生的分数是否大于90.0,即结构数组class1的结构成员score的值是否大于90.0,如果大于则输出该学生的全部信息。此程序常用于统计划分不同分数层次的学生。