用c语言写一个程序,输入第一行一个整数n,接下来n行数据,每行包括学号,姓名和三门成绩,例 1 mike 90 90 90,输出n行,一行一个学生信息,每个信息间用单个空格分开,每行包括学号,姓名,三门成绩和总成绩,按总成绩降序排序
时间: 2023-07-29 10:12:04 浏览: 124
以下是使用结构体和指针实现该程序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 1000
#define MAX_NAME_LEN 20
// 定义学生结构体
typedef struct {
int id; // 学号
char name[MAX_NAME_LEN + 1]; // 姓名
int score[3]; // 三门成绩
int total; // 总成绩
} Student;
int compare(const void *a, const void *b) {
Student *s1 = (Student *)a;
Student *s2 = (Student *)b;
return s2->total - s1->total;
}
int main() {
int n;
scanf("%d", &n);
// 动态分配学生数组
Student *students = (Student *)malloc(n * sizeof(Student));
// 读入学生信息
for (int i = 0; i < n; i++) {
scanf("%d %s %d %d %d", &students[i].id, students[i].name,
&students[i].score[0], &students[i].score[1], &students[i].score[2]);
students[i].total = students[i].score[0] + students[i].score[1] + students[i].score[2];
}
// 根据总成绩降序排序
qsort(students, n, sizeof(Student), compare);
// 输出学生信息
for (int i = 0; i < n; i++) {
printf("%d %s %d %d %d %d\n", students[i].id, students[i].name,
students[i].score[0], students[i].score[1], students[i].score[2], students[i].total);
}
// 释放动态分配的内存
free(students);
return 0;
}
```
输入示例:
```
3
1 mike 90 90 90
2 john 80 85 90
3 mary 95 85 90
```
输出示例:
```
3 mary 95 85 90 270
1 mike 90 90 90 270
2 john 80 85 90 255
```
阅读全文