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

通过上述示例,你可以看到如何使用结构体数组来存储和处理复杂的数据:

  1. 定义结构体:使用struct关键字定义结构体,并在花括号内声明成员变量。
  2. 初始化结构体数组:可以在声明时直接初始化,也可以在声明后单独赋值。
  3. 动态输入数据:可以使用循环从用户那里动态输入数据,并存储到结构体数组中。
  4. 处理复杂数据:可以通过遍历结构体数组来处理和分析数据,例如计算平均值等。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)