019. 使用结构体数组存储复杂数据
在C语言中,结构体数组是一种非常强大的工具,用于存储和管理复杂的数据集合。通过定义一个结构体,并创建该结构体的数组,可以方便地存储和操作多个相关数据项。以下将通过具体示例展示如何使用结构体数组来存储复杂数据。
示例1:定义一个结构体并创建结构体数组
假设我们需要存储一个班级学生的详细信息,包括姓名、年龄、成绩等。
定义结构体
#include <stdio.h>
#include <string.h>
// 定义一个结构体来存储学生信息
struct Student {
char name[50]; // 学生姓名
int age; // 学生年龄
float score; // 学生成绩
};
创建并初始化结构体数组
int main() {
// 定义一个结构体数组,存储3个学生的数据
struct Student students[3] = {
{"Alice", 20, 85.5},
{"Bob", 22, 90.0},
{"Charlie", 21, 78.5}
};
// 遍历结构体数组并打印每个学生的信息
for (int i = 0; i < 3; i++) {
printf("Student %d:\n", i + 1);
printf(" Name: %s\n", students[i].name);
printf(" Age: %d\n", students[i].age);
printf(" Score: %.2f\n", students[i].score);
printf("\n");
}
return 0;
}
输出结果
Student 1:
Name: Alice
Age: 20
Score: 85.50
Student 2:
Name: Bob
Age: 22
Score: 90.00
Student 3:
Name: Charlie
Age: 21
Score: 78.50
示例2:动态输入数据到结构体数组
假设我们需要从用户那里动态输入学生的信息,并存储到结构体数组中。
定义结构体
#include <stdio.h>
#include <string.h>
// 定义一个结构体来存储学生信息
struct Student {
char name[50]; // 学生姓名
int age; // 学生年龄
float score; // 学生成绩
};
动态输入数据
int main() {
int n;
printf("Enter the number of students: ");
scanf("%d", &n);
// 创建一个结构体数组
struct Student students[n];
// 动态输入学生信息
for (int i = 0; i < n; i++) {
printf("Enter details for student %d:\n", i + 1);
printf(" Name: ");
scanf("%s", students[i].name);
printf(" Age: ");
scanf("%d", &students[i].age);
printf(" Score: ");
scanf("%f", &students[i].score);
}
// 打印所有学生的信息
printf("\nStudent Details:\n");
for (int i = 0; i < n; i++) {
printf("Student %d:\n", i + 1);
printf(" Name: %s\n", students[i].name);
printf(" Age: %d\n", students[i].age);
printf(" Score: %.2f\n", students[i].score);
printf("\n");
}
return 0;
}
示例输入和输出
假设用户输入:
Enter the number of students: 2
Enter details for student 1:
Name: Alice
Age: 20
Score: 85.5
Enter details for student 2:
Name: Bob
Age: 22
Score: 90.0
输出结果:
Student Details:
Student 1:
Name: Alice
Age: 20
Score: 85.50
Student 2:
Name: Bob
Age: 22
Score: 90.00
示例3:使用结构体数组处理复杂数据
假设我们需要存储一个公司员工的信息,包括姓名、职位、工资等,并计算平均工资。
定义结构体
#include <stdio.h>
#include <string.h>
// 定义一个结构体来存储员工信息
struct Employee {
char name[50]; // 员工姓名
char position[50]; // 员工职位
float salary; // 员工工资
};
创建并初始化结构体数组
int main() {
// 定义一个结构体数组,存储3个员工的数据
struct Employee employees[3] = {
{"Alice", "Manager", 75000.0},
{"Bob", "Developer", 60000.0},
{"Charlie", "Intern", 30000.0}
};
float totalSalary = 0.0;
// 遍历结构体数组并打印每个员工的信息
for (int i = 0; i < 3; i++) {
printf("Employee %d:\n", i + 1);
printf(" Name: %s\n", employees[i].name);
printf(" Position: %s\n", employees[i].position);
printf(" Salary: %.2f\n", employees[i].salary);
printf("\n");
totalSalary += employees[i].salary; // 累加工资
}
// 计算平均工资
float averageSalary = totalSalary / 3.0;
printf("Average Salary: %.2f\n", averageSalary);
return 0;
}
输出结果
Employee 1:
Name: Alice
Position: Manager
Salary: 75000.00
Employee 2:
Name: Bob
Position: Developer
Salary: 60000.00
Employee 3:
Name: Charlie
Position: Intern
Salary: 30000.00
Average Salary: 55000.00
通过上述示例,你可以看到如何使用结构体数组来存储和处理复杂的数据:
- 定义结构体:使用
struct
关键字定义结构体,并在花括号内声明成员变量。 - 初始化结构体数组:可以在声明时直接初始化,也可以在声明后单独赋值。
- 动态输入数据:可以使用循环从用户那里动态输入数据,并存储到结构体数组中。
- 处理复杂数据:可以通过遍历结构体数组来处理和分析数据,例如计算平均值等。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)