每个学生信息存储在一个结结构体中,包括学号,数学,英语,计算机成绩,平均成绩五部分 。Ave负责计算一个学生的平均成绩,Find负责找到平均成绩最高的学生,printf负责按表格的函数输出全部信息,内容左对齐,表头为“No,Math,Eng,Comp,Ave”,要求输出一个班平均成绩最高的学生(不少于8人)
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENTS 100 // 定义学生最大数量
struct student {
int id;
float math;
float english;
float computer;
float ave;
};
// 计算一个学生的平均成绩
void calculate_average(struct student s) {
s.ave = (s.math + s.english + s.computer) / 3.0;
}
// 找到平均成绩最高的学生
void find_highest_average(struct student students[], int n, float *最高平均成绩, int *最高平均成绩学生) {
*最高平均成绩 = 0.0;
*最高平均成绩学生 = -1;
for (int i = 0; i < n; i++) {
if (students[i].ave > *最高平均成绩) {
*最高平均成绩 = students[i].ave;
*最高平均成绩学生 = i;
}
}
}
// 按表格的函数输出全部信息
void print_table(struct student students[], int n) {
// 输出表头
printf("No,Math,Eng,Comp,Ave\n");
// 输出每个学生的信息
for (int i = 0; i < n; i++) {
printf("%d,%0.2f,%0.2f,%0.2f,%0.2f\n", students[i].id, students[i].math, students[i].english, students[i].computer, students[i].ave);
}
}
int main() {
struct student students[MAX_STUDENTS]; // 学生数组
int n = 0; // 学生数量
float class_average = 0.0; // 班级平均成绩
int class_average_student = -1; // 班级平均成绩最高的学生
// 输入每个学生的信息
while (n < MAX_STUDENTS) {
int id;
float math, english, computer;
printf("请输入第%d个学生的学号,数学成绩,英语成绩,计算机成绩(按顺序输入),以空格分隔:", n + 1);
scanf("%d%f%f%f", &id, &math, &english, &computer);
students[n].id = id;
students[n].math = math;
students[n].english = english;
students[n].computer = computer;
calculate_average(students[n]); // 计算平均成绩
class_average += students[n].ave; // 更新班级平均成绩
n++;
if (n == MAX_STUDENTS) {
break; // 学生数量已达到最大值,结束输入
}
}
class_average /= n; // 计算班级平均成绩
// 找到平均成绩最高的学生
find_highest_average(students, n, &class_average, &class_average_student);
// 输出全部信息
print_table(students, n);
return 0;
}