9.2 使用结构体数组
一个结构体变变量中可以存放一组有关联的数据(如一个学生的学号,姓名,成绩等)。如果由10个学生的数据需要参加运算,显然应该用到数组,这就是结构体数组。
结构体数组与之前的数值型的不同之处在于每一个数组元素都是一个结构体类型的数据,它们分别包括各个成员项。
9.2.1 定义结构体数组
例题:有3个候选人,每个选民只能投票选一人,要求编写一个统计选票的程序,先输入被选人的名字,最后输入各人的得票结果。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
struct Person{
char name[20];
int count;
}leader[3] = { "a",0, "b", 0, "c", 0};
int main(){
int i, j;
char leader_name[20];
printf("请输入你选择的候选人姓名\n");
for (i = 0; i < 10; i++){
scanf("%s", leader_name);
for (j = 0; j <= 3; j++){
if (strcmp(leader_name, leader[j].name) == 0){
leader[j].count++;
}
}
}
printf("\n选票结果如下:\n");
for (i = 0; i < 3; i++){
printf("%5s:%d\n", leader[i].name, leader[i].count);
}
return 0;
}
运行结果如下(输入5次a,3次b,2次c):
程序分析:定义了一个全局的结构体数组leader,它有3个元素,每个元素包含两个成员name(姓名)和count(票数)。在定义数组时初始化{ "a",0, "b", 0, "c", 0}。
在主函数main中定义一个字符数组leader_name,用它存放被选人的姓名。在每次循环中输入一个被选人的姓名,然后把它与结构体数组中的3个候选人名单相比。一旦相等,该姓名对应count自增。一共循环10次。
说明:
(1)定义结构体数组一般形式是:
- struct 结构体名{成员表列} 数组名[数组长度];
- 结构体类型 数组名 [数组长度];先声明一个结构体类型(如struct Person),然后再用此类型定义结构体数组。
(2)对结构体数组初始化的形式是在定义数组的后面加上: = {初值表列};如:
struct Person leader = {"a",0,"b",0,"c",0};
9.2.2 结构体数组的应用举例