c语言一个班上有5名学生,每个学生的数据作为一个记录,每个记录包括学号、姓名、三门课程的成绩和三门课程平均成绩。从键盘输入学生的学号、姓名及三门课的成绩。要求按照平均成绩从高到低打印所有学生记录。
时间: 2024-10-04 12:04:37 浏览: 51
在C语言中,你可以使用结构体来表示一个学生的信息,并结合数组或链表来存储所有学生。首先,定义一个结构体`Student`:
```c
typedef struct {
int student_id;
char name[20];
float score_math;
float score_physics;
float score_chemistry;
float avg_score;
} Student;
```
然后,可以创建一个动态大小的数组或链表来保存所有学生。接下来编写函数来接收用户输入,计算平均成绩,并按平均分降序排序:
```c
void input_students(Student students[], int num_students) {
for (int i = 0; i < num_students; i++) {
printf("请输入第%d个学生的学号、姓名以及三门课的成绩:\n", i + 1);
scanf("%d %s %f %f %f", &students[i].student_id, students[i].name, &students[i].score_math, &students[i].score_physics, &students[i].score_chemistry);
// 计算平均成绩
students[i].avg_score = (students[i].score_math + students[i].score_physics + students[i].score_chemistry) / 3.0;
}
}
void sort_students_descending(Student students[], int num_students) {
for (int i = 0; i < num_students - 1; i++) {
for (int j = 0; j < num_students - i - 1; j++) {
if (students[j].avg_score < students[j + 1].avg_score) {
// 交换两个学生的记录
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
void print_students(Student students[], int num_students) {
printf("\n按照平均成绩从高到低排序的学生信息:\n");
for (int i = 0; i < num_students; i++) {
printf("学号:%d, 姓名:%s, 平均成绩:%f\n", students[i].student_id, students[i].name, students[i].avg_score);
}
}
```
最后,在主函数中调用上述函数:
```c
int main() {
int num_students = 5;
Student students[num_students];
input_students(students, num_students);
sort_students_descending(students, num_students);
print_students(students, num_students);
return 0;
}
```
阅读全文