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,如果大于则输出该学生的全部信息。此程序常用于统计划分不同分数层次的学生。