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