用 c 语言写以下题目:有n名学生,每个学生的数据包含学号、姓名、三门课的成绩。可以从键盘输入n个学生的数据,按总成绩从小到大排序,打印包含学号、姓名、三门课成绩和总成绩的成绩单。(测试时,数据从键盘输入。) 输入:第1行为整数n,后面n行表示n个人的信息,包括学号、姓名、和三门课的成绩,每行的数据间用空格隔开。 输出:n行,表示n个人的信息,包括学号、姓名、三门课的成绩和总成绩,数据间一个空格,末尾无空格。 样例: 输入: 2 2021001 li 60 80 70 2021002 wang 100 90 80 输出: 2021001 li 60 70 80 210 2021002 wang 100 90 80 270
时间: 2024-03-26 21:34:56 浏览: 86
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX 100
struct Student {
char id[MAX];
char name[MAX];
int score1;
int score2;
int score3;
int total;
};
void sort(struct Student students[], int n);
int main() {
int n;
struct Student students[MAX];
printf("请输入学生数:");
scanf("%d", &n);
// 读入学生信息
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名和三门课的成绩:", i + 1);
scanf("%s%s%d%d%d", students[i].id, students[i].name, &students[i].score1, &students[i].score2, &students[i].score3);
students[i].total = students[i].score1 + students[i].score2 + students[i].score3;
}
// 按总成绩排序
sort(students, n);
// 输出学生信息
for (int i = 0; i < n; i++) {
printf("%s %s %d %d %d %d\n", students[i].id, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].total);
}
return 0;
}
// 按总成绩排序
void sort(struct Student students[], int n) {
struct Student temp;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].total > students[j].total) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
```
该程序首先读入学生数和每个学生的学号、姓名和三门课的成绩,然后计算每个学生的总成绩,并按总成绩从小到大排序,最后输出学生的学号、姓名、三门课的成绩和总成绩。在排序时,通过比较总成绩的大小,将学生信息进行交换。
阅读全文