编写程序,输入正整数n和n个学生的学号和三门课程成绩,计算每个人的平均分,按平均分从小到大排序,输出排序结果。学号的长度不超过10位;三门课程成绩为整数;平均成绩为实数,输出平均成绩保留两位小数;学生人数不超过50人。 提示:请用多个函数+指针实现。
时间: 2024-05-08 07:18:40 浏览: 78
好的,我来解答这个问题。下面是实现这个程序的步骤:
1. 定义一个学生结构体,包括学号、三门科目成绩和平均分字段。
2. 定义一个输入函数,用于输入学生信息,包括学号和三门科目成绩。
3. 定义一个计算平均分的函数,将输入的三门科目成绩计算均值并存储到平均分字段中。
4. 定义一个比较函数,用于排序时比较两个学生的平均成绩大小。
5. 定义一个排序函数,将所有学生按照平均成绩从小到大排序输出。
6. 在主函数中执行以上函数的调用,实现程序功能。
下面是实现程序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENT_NUM 50
#define MAX_ID_LENGTH 11
//定义学生结构体
struct student {
char id[MAX_ID_LENGTH]; //学号
int score[3]; //三门科目成绩
float avgScore; //平均分
};
//输入学生信息函数
void input(struct student *s) {
scanf("%s%d%d%d", s->id, &s->score[0], &s->score[1], &s->score[2]);
}
//计算平均分函数
void calcAvgScore(struct student *s) {
s->avgScore = (s->score[0] + s->score[1] + s->score[2]) / 3.0;
}
//比较函数,按平均分从小到大排序
int cmp(const void *a, const void *b) {
return ((struct student *)a)->avgScore < ((struct student *)b)->avgScore ? -1 : 1;
}
//排序函数
void sort(struct student *s, int num) {
qsort(s, num, sizeof(struct student), cmp);
}
int main() {
int n;
struct student students[MAX_STUDENT_NUM];
//输入学生信息
scanf("%d", &n);
for (int i = 0; i < n; i++) {
input(&students[i]);
calcAvgScore(&students[i]);
}
//排序并输出结果
sort(students, n);
for (int i = 0; i < n; i++) {
printf("%s %.2f\n", students[i].id, students[i].avgScore);
}
return 0;
}
```
这个程序使用了多个函数和指针实现了题目要求的功能。当输入正整数n和n个学生的学号和三门课程成绩后,程序会计算每个人的平均分,并按平均分从小到大排序,最终输出排序结果。
希望这个解答对你有所帮助!
阅读全文