【问题描述】
学生信息包括:学号、姓名、数学成绩、英语成绩、计算机成绩。共有N个人(N<=10,可在程序内部定义, 如用#define N 3) 的信息。
要求计算每人的总成绩,并按总成绩由高到低的顺序输出所有人的信息。最后 输出各门课程平均成绩(保留2位小数)。(此题只按照3个学生考虑)
【输入形式】
输入分N行,每行为一个学生的学号、姓名、数学成绩、英语成绩、计算机成绩信息。
【输出形式】
输出为N+4行。第一行为固定字符串;第2~N+1行为按总成绩由高到低顺序输出的所有人信息;最后3行输 出各门课程的平均成绩。
要求:
1、输出的第一行,每个元素的后面空3个空格,“Total”后不加空格。
2、输出的第二行到第N+1行,每个元素后面空4个空格,最后一个元素,如“258”后面不加空格, 且每行以回车符结束。
3、输出的最后三行没有空格,每行仅以回车符结束。 提醒:由于本题格式比较麻烦,请同学务必按照规定输出,不然你的程序将会被判错。
【样例输入】
1001 zhang 90 80 88
1002 huang 78 80 82
1003 xiong 88 85 80
【样例输出】
NO Name Maths English Computer Total
1001 zhang 90 80 88 258
1003 xiong 88 85 80 253
1002 huang 78 80 82 240
average of Maths:85.33
average of English:81.67
average of Computer:83.33
实现代码
#include <stdio.h>
#include <string.h>
#define N 3
typedef struct {
int id;
char name[20];
int math;
int english;
int computer;
int total;
} Student;
void sortStudents(Student students[]) {
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - i - 1; j++) {
if (students[j].total < students[j + 1].total) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
int main() {
Student students[N];
float avgMath = 0, avgEnglish = 0, avgComputer = 0;
// 输入学生信息
for (int i = 0; i < N; i++) {
printf("请输入第%d个学生的学号、姓名、数学成绩、英语成绩、计算机成绩:", i + 1);
scanf("%d %s %d %d %d", &students[i].id, students[i].name, &students[i].math, &students[i].english, &students[i].computer);
students[i].total = students[i].math + students[i].english + students[i].computer;
avgMath += students[i].math;
avgEnglish += students[i].english;
avgComputer += students[i].computer;
}
sortStudents(students);
printf("NO Name Maths English Computer Total\n");
for (int i = 0; i < N; i++) {
printf("%-2d %-8s %-5d %-7d %-8d %-5d\n", students[i].id, students[i].name, students[i].math, students[i].english, students[i].computer, students[i].total);
}
printf("average of Maths:%.2f\n", avgMath / N);
printf("average of English:%.2f\n", avgEnglish / N);
printf("average of Computer:%.2f\n", avgComputer / N);
return 0;
}
在这段代码中,我们首先定义了一个 Student
结构体,包含学生的各项信息。然后在 sortStudents
函数中使用冒泡排序对学生信息按总成绩进行排序。接着,在 main
函数中,我们输入学生信息,并计算各门课程的平均成绩。最后按照规定格式输出学生信息和平均成绩。