c语言一个班上有5名学生,每个学生的数据作为一个记录,每个记录包括学号、姓名、三门课程的成绩和三门课程平均成绩。从键盘输入学生的学号、姓名及三门课的成绩。要求按照平均成绩从高到低打印所有学生记录。
时间: 2024-10-06 07:06:43 浏览: 69
在C语言中,你可以创建一个结构体`Student`来表示一个学生的信息,包含学号、姓名以及三个成绩变量。然后,可以定义一个数组来存储整个班级的学生记录,并使用动态内存分配(如`malloc`)来存储每个学生的信息,因为数组大小需要根据实际输入确定。
首先,定义结构体:
```c
typedef struct {
int id;
char name[50];
float score1, score2, score3; // 三门课程的成绩
float average_score; // 平均成绩
} Student;
```
接着,创建一个函数来获取用户输入并计算平均分:
```c
void input_and_calculate(Student* student) {
scanf("%d", &student->id);
fgets(student->name, sizeof(student->name), stdin);
student->score1 = (float)getchar(); // 注意这里getchar()获取的是浮点数的第一个字符
getchar(); // 消除回车符
student->score2 = (float)getchar();
getchar();
student->score3 = (float)getchar();
student->average_score = (student->score1 + student->score2 + student->score3) / 3.0f;
}
```
接下来,在主函数中接收用户输入,动态创建学生数组,填充信息并排序:
```c
int main() {
const int MAX_STUDENTS = 5;
Student students[MAX_STUDENTS];
for (int i = 0; i < MAX_STUDENTS; ++i) {
Student* current_student = (Student*)malloc(sizeof(Student));
input_and_calculate(current_student);
students[i] = *current_student; // 复制到数组中
free(current_student); // 释放内存
}
// 对学生数组按平均成绩降序排序
qsort(students, MAX_STUDENTS, sizeof(Student), compare_scores);
// 打印排序后的学生记录
for (int i = 0; i < MAX_STUDENTS; ++i) {
printf("学号:%d, 姓名:%s, 平均成绩:%f\n", students[i].id, students[i].name, students[i].average_score);
}
return 0;
}
// 自定义比较函数用于qsort
int compare_scores(const void* a, const void* b) {
const Student* sa = (const Student*)a;
const Student* sb = (const Student*)b;
return sb->average_score - sa->average_score;
}
```
阅读全文