C语言已知5个学生的4门课程成绩,求出每个学生的平均成绩,然后按平均分从高到低排序
时间: 2024-12-01 10:20:22 浏览: 54
在C语言中,你可以通过数组、结构体以及函数来处理这个问题。首先,你需要定义一个结构体来存储学生的信息,包括姓名和分数。然后,创建一个包含所有学生信息的数组或动态分配内存。接下来,编写函数计算每个学生的平均成绩,并将结果保存在一个新的数组或结构体中。最后,使用循环遍历这个新数组并按照平均分从高到低排序。
以下是简单的步骤:
1. 定义结构体`Student`:
```c
typedef struct {
char name[20];
float scores[4]; // 学生的四门课程成绩
} Student;
```
2. 创建学生数据并计算平均成绩:
```c
Student students[] = {{"Tom", {85, 92, 78, 89}},
{"Jerry", {90, 95, 88, 96}},
// ... 其他学生数据
};
int num_students = sizeof(students) / sizeof(students[0]);
// 计算平均成绩
float* averages = malloc(num_students * sizeof(float));
for (int i = 0; i < num_students; i++) {
float sum = 0;
for (int j = 0; j < 4; j++) {
sum += students[i].scores[j];
}
averages[i] = sum / 4;
}
```
3. 按平均分排序:
```c
qsort(averages, num_students, sizeof(float), compare_scores); // 使用快速排序或其他排序算法
void compare_scores(const void* a, const void* b) {
float avg1 = *(const float*)a, avg2 = *(const float*)b;
return avg2 > avg1 ? 1 : (avg2 == avg1 ? 0 : -1);
}
```
4. 输出结果:
```c
for (int i = 0; i < num_students; i++) {
printf("%s: %.2f\n", students[i].name, averages[i]);
}
// 清理内存
free(averages);
```
阅读全文