学生数据包括:学号、姓名和3门课程的成绩。现有5个学生,请定义一个结构体并定义相应的变量;对定义的变量从键盘输入所需的具体数据,然后输出学生的平均成绩,输出项包括学生的学号、姓名及平均成绩;对5名学生按照平均成绩进行排序后输出。
时间: 2024-03-31 13:37:22 浏览: 25
好的,以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 5
#define COURSE_NUM 3
typedef struct student {
char id[20];
char name[20];
float scores[COURSE_NUM];
float average;
} Student;
void sort(Student students[], int n);
void printStudents(Student students[], int n);
int main() {
Student students[MAX_STUDENT_NUM];
int i, j;
// 输入学生信息
for (i = 0; i < MAX_STUDENT_NUM; i++) {
printf("请输入第%d个学生的学号、姓名和成绩(三门):\n", i + 1);
scanf("%s%s%f%f%f", students[i].id, students[i].name, &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]);
// 计算平均成绩
students[i].average = (students[i].scores[0] + students[i].scores[1] + students[i].scores[2]) / COURSE_NUM;
}
// 按平均成绩排序
sort(students, MAX_STUDENT_NUM);
// 输出学生信息
printf("按平均成绩排序后,学生信息如下:\n");
printStudents(students, MAX_STUDENT_NUM);
return 0;
}
void sort(Student students[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (students[j].average < students[j + 1].average) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
void printStudents(Student students[], int n) {
int i;
for (i = 0; i < n; i++) {
printf("学号:%s,姓名:%s,平均成绩:%f\n", students[i].id, students[i].name, students[i].average);
}
}
```
这里定义了一个 `Student` 结构体,包含学生的学号、姓名、三门课程的成绩和平均成绩。首先从键盘输入学生信息,然后计算平均成绩。接着,通过 `sort` 函数按平均成绩从高到低进行排序,最后通过 `printStudents` 函数输出学生信息。
需要注意的是,这里使用了冒泡排序,时间复杂度为 $O(n^2)$,如果学生数目较大,应该选择更高效的排序算法。