假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的结构类型。输入n(n<50)个学生的成绩信息,按照学生的个人平均分从高到低输出他们的信息。如果平均分相同,按输入的先后顺序排列。
时间: 2023-09-11 12:11:22 浏览: 108
好的,我可以帮你解决这个问题。以下是一个用C语言实现的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LENGTH 20
struct student {
char id[10];
char name[MAX_NAME_LENGTH];
double score[3];
double avg_score;
};
void sort(struct student *s, int n) {
int i, j, max_index;
struct student temp;
for (i = 0; i < n - 1; i++) {
max_index = i;
for (j = i + 1; j < n; j++) {
if (s[j].avg_score > s[max_index].avg_score ||
(s[j].avg_score == s[max_index].avg_score && strcmp(s[j].id, s[max_index].id) < 0)) {
max_index = j;
}
}
if (max_index != i) {
temp = s[i];
s[i] = s[max_index];
s[max_index] = temp;
}
}
}
int main() {
int n, i, j;
struct student s[50];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %s", s[i].id, s[i].name);
for (j = 0; j < 3; j++) {
scanf("%lf", &(s[i].score[j]));
s[i].avg_score += s[i].score[j];
}
s[i].avg_score /= 3.0;
}
sort(s, n);
for (i = 0; i < n; i++) {
printf("%s %s", s[i].id, s[i].name);
for (j = 0; j < 3; j++) {
printf(" %.1lf", s[i].score[j]);
}
printf(" %.1lf\n", s[i].avg_score);
}
return 0;
}
```
这个程序首先定义了一个结构体类型 `struct student`,包含了学生的基本信息,以及平均成绩。然后定义了一个 `sort` 函数,用来对学生信息进行排序。排序的规则是按照平均成绩从高到低排列,如果平均成绩相同,则按照输入顺序排列。
在 `main` 函数中,首先读入学生的成绩信息,计算出每个学生的平均成绩,然后调用 `sort` 函数进行排序,最后输出排序后的学生信息。
希望这个示例代码能够对你有所帮助。如果你有任何问题,可以随时问我。