结构体从键盘输入n个学生的6门课程考试成绩,结算每个学生的平均成绩,并按平均成绩从高到底输出每个学生的信息(包括学号,姓名和6门成绩))
时间: 2023-12-10 12:37:33 浏览: 32
以下是一个可能的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
typedef struct {
int id;
char name[MAX_NAME_LEN];
float scores[6];
float average;
} Student;
int main() {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
Student* students = malloc(n * sizeof(Student));
if (students == NULL) {
printf("内存分配失败!\n");
return 1;
}
// 输入每个学生的信息
for (int i = 0; i < n; i++) {
printf("\n请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%d", &students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("六门考试成绩(用空格分隔):");
for (int j = 0; j < 6; j++) {
scanf("%f", &students[i].scores[j]);
}
// 计算平均成绩
float sum = 0;
for (int j = 0; j < 6; j++) {
sum += students[i].scores[j];
}
students[i].average = sum / 6;
}
// 按平均成绩从高到低排序
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
if (students[i].average < students[j].average) {
Student tmp = students[i];
students[i] = students[j];
students[j] = tmp;
}
}
}
// 输出每个学生的信息
printf("\n按平均成绩从高到低排序的学生信息如下:\n");
for (int i = 0; i < n; i++) {
printf("学号:%d,姓名:%s,六门成绩:", students[i].id, students[i].name);
for (int j = 0; j < 6; j++) {
printf("%.1f ", students[i].scores[j]);
}
printf(",平均成绩:%.1f\n", students[i].average);
}
free(students);
return 0;
}
```
这个程序用一个 `Student` 结构体来存储每个学生的信息,包括学号、姓名、6门考试成绩和平均成绩。首先从键盘输入学生人数,然后动态分配存储空间,并逐个输入每个学生的信息。在输入每个学生的成绩后,程序会计算其平均成绩并存储在结构体中。最后,程序将学生信息按平均成绩从高到低排序,并输出每个学生的信息。注意,这里只是用了一种简单的冒泡排序算法进行排序。