用c语言编程:一个班上有 30名学生,每个学生的数据作为一个记录,每个记录包括学号、姓名、三门课程的成绩和三门课程平均成绩。从键盘输入学生的学号、姓名及三门课的成绩。要求打印三门课程平均成绩最高分的学生记录
时间: 2024-10-16 17:12:53 浏览: 68
在 C 语言中,我们可以创建一个结构体(struct)来表示一名学生的信息,然后使用数组或者链表存储所有学生的数据。以下是一个简单的示例,说明如何实现这个功能:
```c
#include <stdio.h>
#include <string.h>
// 定义学生信息结构体
typedef struct {
int id;
char name[50];
float score1, score2, score3; // 三门课程的成绩
float average; // 平均成绩
} Student;
// 比较平均成绩函数
int compare_average(const void *a, const void *b) {
const Student *s1 = a, *s2 = b;
return s2->average - s1->average;
}
int main() {
// 初始化学生数组或动态内存分配,假设我们有30个学生
Student students[30] = {0};
size_t num_students = sizeof(students) / sizeof(students[0]);
for (size_t i = 0; i < num_students; ++i) {
printf("请输入学生 %d 的信息(学号姓名分数1分数2分数3): ", i + 1);
scanf("%d", &students[i].id);
fgets(students[i].name, sizeof(students[i].name), stdin); // 去除换行符
scanf("%f%f%f", &students[i].score1, &students[i].score2, &students[i].score3);
// 计算平均成绩并存储
students[i].average = (students[i].score1 + students[i].score2 + students[i].score3) / 3.0;
// 如果这是第一个学生或者当前学生的平均成绩更高,更新最高分学生的记录
if (i == 0 || students[i].average > students[max_index].average) {
max_index = i;
}
}
// 使用qsort排序,并通过compare_average函数找到平均成绩最高的学生
qsort(students, num_students, sizeof(Student), compare_average);
printf("平均成绩最高的学生记录:\n");
printf("学号:%d\n姓名:%s\n分数1:%f\n分数2:%f\n分数3:%f\n平均成绩:%f\n",
students[max_index].id, students[max_index].name, students[max_index].score1, students[max_index].score2,
students[max_index].score3, students[max_index].average);
return 0;
}
```
在这个程序中,`qsort` 函数用于对学生们按平均成绩降序排列,然后 `max_index` 存储的是最高平均成绩学生的索引。记得处理 `fgets` 的输入,防止包含换行符。
阅读全文