每个学生的信息包括学生学号, 姓名,三门成绩。 输入n个学生的信息,按总成绩降序排序, 并输出这n个学生的信息到屏幕上。(采用结构体数组, 输入、排序和输出用函数完成)c语言
时间: 2024-02-12 20:09:07 浏览: 81
好的,这是一个经典的排序问题,我们可以按照以下步骤来解决:
1. 定义一个结构体,包括学生学号、姓名和三门成绩。
2. 定义一个输入函数,用来输入n个学生的信息。
3. 定义一个排序函数,按照总成绩降序排序。
4. 定义一个输出函数,将排序后的n个学生信息输出到屏幕上。
下面是具体的代码实现:
```c
#include <stdio.h>
#include <string.h>
struct student {
char id[10];
char name[20];
int score[3];
int total_score;
};
void input(struct student stu[], int n) {
int i, j;
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名和三门成绩:\n", i+1);
scanf("%s%s", stu[i].id, stu[i].name);
stu[i].total_score = 0;
for (j = 0; j < 3; j++) {
scanf("%d", &stu[i].score[j]);
stu[i].total_score += stu[i].score[j];
}
}
}
void sort(struct student stu[], int n) {
int i, j, max, temp;
struct student t;
for (i = 0; i < n-1; i++) {
max = i;
for (j = i+1; j < n; j++) {
if (stu[j].total_score > stu[max].total_score) {
max = j;
}
}
if (max != i) {
t = stu[i];
stu[i] = stu[max];
stu[max] = t;
}
}
}
void output(struct student stu[], int n) {
int i, j;
printf("按总成绩降序排列的学生信息如下:\n");
for (i = 0; i < n; i++) {
printf("%s %s ", stu[i].id, stu[i].name);
for (j = 0; j < 3; j++) {
printf("%d ", stu[i].score[j]);
}
printf("总成绩:%d\n", stu[i].total_score);
}
}
int main() {
int n;
printf("请输入学生人数:\n");
scanf("%d", &n);
struct student stu[n];
input(stu, n);
sort(stu, n);
output(stu, n);
return 0;
}
```
在这个程序中,我们定义了一个结构体`student`,包括学生学号、姓名和三门成绩,以及总成绩。然后我们分别实现了输入、排序和输出三个函数,最后在主函数中调用这三个函数即可。
阅读全文