C语言有5个学生,每个学生有5门课的成绩,从键盘输入学生数据(包括学生号,三门课成绩),计算出平均
时间: 2023-12-18 14:06:37 浏览: 96
分和总分,并按照平均分从高到低排序,输出每个学生的学号和平均分。
以下是实现该功能的C语言代码:
```c
#include <stdio.h>
#define STUDENT_NUM 5
#define COURSE_NUM 3
// 学生结构体
typedef struct {
int id; // 学号
float scores[COURSE_NUM]; // 成绩
float total_score; // 总分
float avg_score; // 平均分
} Student;
// 计算学生的总分和平均分
void calculate_scores(Student *student) {
float total = 0.0;
for (int i = 0; i < COURSE_NUM; i++) {
total += student->scores[i];
}
student->total_score = total;
student->avg_score = total / COURSE_NUM;
}
// 交换两个学生的位置
void swap(Student *a, Student *b) {
Student temp = *a;
*a = *b;
*b = temp;
}
int main() {
Student students[STUDENT_NUM];
// 从键盘输入学生数据
for (int i = 0; i < STUDENT_NUM; i++) {
printf("请输入第%d个学生的学号和三门课成绩:\n", i + 1);
scanf("%d", &students[i].id);
for (int j = 0; j < COURSE_NUM; j++) {
scanf("%f", &students[i].scores[j]);
}
calculate_scores(&students[i]);
}
// 按照平均分从高到低排序
for (int i = 0; i < STUDENT_NUM - 1; i++) {
for (int j = 0; j < STUDENT_NUM - i - 1; j++) {
if (students[j].avg_score < students[j + 1].avg_score) {
swap(&students[j], &students[j + 1]);
}
}
}
// 输出每个学生的学号和平均分
printf("按照平均分从高到低排序后,每个学生的学号和平均分如下:\n");
for (int i = 0; i < STUDENT_NUM; i++) {
printf("学号:%d,平均分:%.2f\n", students[i].id, students[i].avg_score);
}
return 0;
}
```
运行程序后,可以依次输入每个学生的学号和三门课成绩,然后输出按照平均分从高到低排序后每个学生的学号和平均分。
阅读全文