C语言练习(19)
已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各学生的成绩记录排序(成绩最高的学生排在数组最前面的行,成绩最低的学生排在数组最后面的行)。
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
typedef struct Student {
float scores[4]; // 4门课的成绩
float average; // 平均成绩
} Student;
// 计算平均成绩的函数
void calculateAverage(Student* students, int num_students) {
int i, j;
for (i = 0; i < num_students; i++) {
float sum = 0;
for (j = 0; j < 4; j++) {
sum += students[i].scores[j];
}
students[i].average = sum / 4;
}
}
// 交换两个学生结构体的函数
void swapStudents(Student* a, Student* b) {
Student temp = *a;
*a = *b;
*b = temp;
}
// 冒泡排序函数,按照平均成绩从高到低排序
void bubbleSort(Student* students, int num_students) {
int i, j;
for (i = 0; i < num_students - 1; i++) {
for (j = 0; j < num_students - i - 1; j++) {
if (students[j].average < students[j + 1].average) {
swapStudents(&students[j], &students[j + 1]);
}
}
}
}
int main() {
Student students[5]; // 定义存储5个学生信息的数组
int i, j;
// 输入5个学生的4门课成绩
printf("请依次输入5个学生的4门课成绩:\n");
for (i = 0; i < 5; i++) {
printf("学生 %d 的成绩:\n", i + 1);
for (j = 0; j < 4; j++) {
scanf_s("%f", &students[i].scores[j]);
}
}
// 计算每个学生的平均成绩
calculateAverage(students, 5);
// 对学生成绩记录按照平均成绩从高到低排序
bubbleSort(students, 5);
// 输出排序后的学生成绩信息
printf("按照平均成绩从高到低排序后的学生成绩信息:\n");
for (i = 0; i < 5; i++) {
printf("学生 %d 的平均成绩:%.2f,4门课成绩分别为:", i + 1, students[i].average);
for (j = 0; j < 4; j++) {
printf("%.2f ", students[i].scores[j]);
}
printf("\n");
}
return 0;
}