已知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;
}