关于结构体数组的运用

每个学生信息存储在一个结结构体中,包括学号,数学,英语,计算机成绩,平均成绩五部分。Ave负责计算一个学生的平均成绩,Find负责找到平均成绩最高的学生,printf负责按表格的函数输出全部信息,内容左对齐,表头为“No,Math,Eng,Comp,Ave”,要求输出一个班平均成绩最高的学生(不少于8人)

来自chat gpt 3.5

#include <stdio.h>

#define MAX_STUDENTS 50

// 定义学生结构体类型
typedef struct {
    int no;       // 学号
    int math;     // 数学成绩
    int eng;      // 英语成绩
    int comp;     // 计算机成绩
    double ave;   // 平均成绩
} Student;

// 计算一个学生的平均成绩
void Ave(Student *stu) {
    stu->ave = (double)(stu->math + stu->eng + stu->comp) / 3.0;
}

// 找到平均成绩最高的学生
Student *Find(Student *students, int n) {
    Student *pMax = &students[0];
    for (int i = 1; i < n; i++) {
        if (students[i].ave > pMax->ave) {
            pMax = &students[i];
        }
    }
    return pMax;
}

// 按表格格式输出全部学生信息
void Printf(Student *students, int n) {
    printf("%-5s %-6s %-6s %-6s %-6s\n", "No", "Math", "Eng", "Comp", "Ave");
    for (int i = 0; i < n; i++) {
        printf("%-5d %-6d %-6d %-6d %-6.2f\n",
               students[i].no, students[i].math, students[i].eng,
               students[i].comp, students[i].ave);
    }
}

int main() {
    // 读入学生信息
    int n;
    Student students[MAX_STUDENTS];
    printf("请输入学生数(不超过 %d):", MAX_STUDENTS);
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        printf("请输入第 %d 个学生的信息(No,Math,Eng,Comp):", i+1);
        scanf("%d %d %d %d", &students[i].no, &students[i].math,
              &students[i].eng, &students[i].comp);
        Ave(&students[i]);
    }

    // 找到平均成绩最高的学生,并输出全部学生信息
    Student *pMax = Find(students, n);
    printf("\n平均成绩最高的学生信息如下:\n");
    Printf(pMax, 1);
    printf("\n全部学生信息如下:\n");
    Printf(students, n);

    return 0;
}

这段代码中,我们首先定义了一个学生结构体类型 Student,其中包含学号、数学、英语、计算机成绩和平均成绩五个字段。然后编写了三个函数 Ave、Find 和 Printf,分别用于计算一个学生的平均成绩、找到平均成绩最高的学生和按表格格式输出全部学生信息。

在 main 函数中,我们首先读入学生信息并计算每个学生的平均成绩。然后使用 Find 函数找到平均成绩最高的学生,并使用 Printf 函数输出全部学生信息。最后程序返回 0 表示正常结束。