从键盘上输入n个学生的信息,每个学生的信息包括学号、姓名、3门课的成绩,然后输出:每个学生的信息以及总分最高的学生的信息(注意:学生信息包括学号、姓名、3门课成绩、总分以及平均成绩)。要求采用动态内存分配和函数实现。
时间: 2024-01-06 13:05:54 浏览: 112
接收从键盘输入某班学生的学号、姓名、成绩,对学 生的成绩进行排序.zip
5星 · 资源好评率100%
好的,我可以帮你解决这个问题。首先,我们需要定义一个学生结构体,包括学号、姓名、3门课成绩、总分以及平均成绩:
```c
struct Student {
int id;
char name[20];
int score[3];
int totalScore;
float avgScore;
};
```
然后,我们可以编写函数来输入学生信息和计算总分、平均分:
```c
void inputStudent(struct Student *stu) {
printf("请输入学生的学号:");
scanf("%d", &(stu->id));
printf("请输入学生的姓名:");
scanf("%s", stu->name);
printf("请输入学生的3门课成绩:");
scanf("%d%d%d", &(stu->score[0]), &(stu->score[1]), &(stu->score[2]));
stu->totalScore = stu->score[0] + stu->score[1] + stu->score[2];
stu->avgScore = stu->totalScore / 3.0;
}
void calculateScore(struct Student *stu, int n) {
int maxScore = 0;
int maxIndex = 0;
for (int i = 0; i < n; i++) {
stu[i].totalScore = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
stu[i].avgScore = stu[i].totalScore / 3.0;
if (stu[i].totalScore > maxScore) {
maxScore = stu[i].totalScore;
maxIndex = i;
}
}
printf("总分最高的学生信息如下:\n");
printf("学号:%d,姓名:%s,成绩:%d %d %d,总分:%d,平均分:%.2f\n",
stu[maxIndex].id, stu[maxIndex].name, stu[maxIndex].score[0],
stu[maxIndex].score[1], stu[maxIndex].score[2], stu[maxIndex].totalScore,
stu[maxIndex].avgScore);
}
```
最后,我们需要动态分配内存来存储学生信息,并在主函数中调用上述函数:
```c
int main() {
int n;
printf("请输入学生的数量:");
scanf("%d", &n);
struct Student *stu = (struct Student *) malloc(n * sizeof(struct Student));
for (int i = 0; i < n; i++) {
inputStudent(&stu[i]);
}
calculateScore(stu, n);
free(stu);
return 0;
}
```
这样,就完成了从键盘上输入n个学生的信息,每个学生的信息包括学号、姓名、3门课的成绩,然后输出每个学生的信息以及总分最高的学生的信息的任务。
阅读全文