这道题目要求编写程序,输入 n(n≤10),输入 n 个学生的成绩表信息(包括学号、姓名、三门课的成绩和平均成绩),以平均成绩为关键字从高到低输出这些学生的成绩表。用C语言实现
时间: 2024-05-06 19:18:53 浏览: 94
以下是一种可能的实现方法:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 10
#define MAX_NAME_LEN 20
#define MAX_GRADE_LEN 5
typedef struct {
char id[MAX_GRADE_LEN];
char name[MAX_NAME_LEN];
int grade1;
int grade2;
int grade3;
double avg;
} student;
void swap(student *a, student *b) {
student tmp = *a;
*a = *b;
*b = tmp;
}
void sort(student *arr, int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (arr[j].avg < arr[j+1].avg) {
swap(&arr[j], &arr[j+1]);
}
}
}
}
void print(student *arr, int n) {
int i;
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for (i = 0; i < n; i++) {
printf("%s\t%s\t%d\t%d\t%d\t%.2f\n", arr[i].id, arr[i].name,
arr[i].grade1, arr[i].grade2, arr[i].grade3, arr[i].avg);
}
}
int main() {
int n, i;
student arr[MAX_N];
printf("请输入学生个数(不超过%d):", MAX_N);
scanf("%d", &n);
printf("请输入%d个学生的成绩表信息:\n", n);
for (i = 0; i < n; i++) {
printf("学生%d:\n", i+1);
printf("学号:");
scanf("%s", arr[i].id);
printf("姓名:");
scanf("%s", arr[i].name);
printf("成绩1:");
scanf("%d", &arr[i].grade1);
printf("成绩2:");
scanf("%d", &arr[i].grade2);
printf("成绩3:");
scanf("%d", &arr[i].grade3);
arr[i].avg = (double)(arr[i].grade1 + arr[i].grade2 + arr[i].grade3) / 3;
}
sort(arr, n);
print(arr, n);
return 0;
}
```
这个程序定义了一个结构体 `student`,包含学号、姓名、三门课成绩和平均成绩。程序先读入学生个数和每个学生的成绩表信息,然后计算每个学生的平均成绩。最后按照平均成绩从高到低排序并输出。
阅读全文