输入3个学生5门课程的成绩,分别用函数实现下列功能:
(1)在主函数main中实现3位同学5门课成绩的输入;
(2)编写子函数Average_score,计算每一位学生的平均分;
(3)编写子函数Average_course,计算每一门课的平均分;
(4)子函数Average_score和Average_course在主函数main中调用。
首先,我们需要编写一个函数来输入学生的成绩,并计算平均分。然后再编写一个函数来计算每门课程的平均分。最后在主函数中将这些函数结合起来,并在主函数中调用菜单函数来进行操作。
具体步骤: 1. 定义一个结构体来保存学生信息,包括学号、姓名和五门成绩。 2. 编写一个函数来读入三个学生的成绩,并计算平均分,将这些信息填入结构体中。 3. 编写一个函数来计算每门课程的平均分。 4. 在主函数中编写菜单函数,并实现录入信息、输出信息、计算每个学生平均分、计算每门课程平均分四个功能选项。 5. 分别实现功能选项对应的函数,完成相应的操作。
具体实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
struct Student
{
int id; // 学号
char name[20]; // 姓名
int scores[5]; // 五门成绩
float avgScore; // 平均成绩
};
#define STUDENT_NUM 3
// 读入学生成绩,并计算平均分
void inputScores(struct Student *pStu)
{
for (int i = 0; i < STUDENT_NUM; i++)
{
printf("请输入第 %d 个学生的信息(学号 姓名 成绩1 成绩2 成绩3 成绩4 成绩5):", i+1);
scanf("%d%s%d%d%d%d%d", &(pStu+i)->id, (pStu+i)->name, (pStu+i)->scores, (pStu+i)->scores+1, (pStu+i)->scores+2, (pStu+i)->scores+3, (pStu+i)->scores+4);
int sum = 0;
for (int j = 0; j < 5; j++)
{
sum += (pStu+i)->scores[j];
}
(pStu+i)->avgScore = sum / 5.0;
}
}
// 计算每门课程的平均分
void calcCourseAvg(struct Student *pStu)
{
float courseAvg[5] = {0};
for (int i = 0; i < STUDENT_NUM; i++)
{
for (int j = 0; j < 5; j++)
{
courseAvg[j] += (pStu+i)->scores[j];
}
}
for (int i = 0; i < 5; i++)
{
courseAvg[i] /= STUDENT_NUM;
printf("第 %d 门课程的平均分为:%.2f\n", i+1, courseAvg[i]);
}
}
// 输出学生信息
void outputStuInfo(struct Student *pStu)
{
for (int i = 0; i < STUDENT_NUM; i++)
{
printf("学生%d,学号:%d,姓名:%s,成绩1:%d,成绩2:%d,成绩3:%d,成绩4:%d,成绩5:%d,平均成绩:%.2f。\n", i+1, (pStu+i)->id, (pStu+i)->name, (pStu+i)->scores[0], (pStu+i)->scores[1], (pStu+i)->scores[2], (pStu+i)->scores[3], (pStu+i)->scores[4], (pStu+i)->avgScore);
}
}
// 主菜单函数
void mainMenu(struct Student *pStu)
{
int select = -1;
while (select != 0)
{
printf("请选择功能:\n");
printf("1. 录入学生信息\n");
printf("2. 输出学生信息\n");
printf("3. 计算每个学生平均成绩\n");
printf("4. 计算每门课程平均成绩\n");
printf("0. 退出系统\n");
scanf("%d", &select);
switch (select)
{
case 1:
inputScores(pStu);
printf("录入成功!\n");
break;
case 2:
outputStuInfo(pStu);
break;
case 3:
for (int i = 0; i < STUDENT_NUM; i++)
{
printf("%s的平均成绩为:%.2f\n", (pStu+i)->name, (pStu+i)->avgScore);
}
break;
case 4:
calcCourseAvg(pStu);
break;
case 0:
printf("谢谢使用,再见!\n");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
}
int main()
{
struct Student stu[STUDENT_NUM];
memset(stu, 0, sizeof(stu));
mainMenu(stu);
return 0;
}
在主函数中,我们定义了一个学生结构体数组,用来保存学生信息。首先在主函数中调用了菜单函数mainMenu,并将学生数组stu作为参数传入。
在menu函数中,我们定义了一个变量select,当select不等于0时,主循环就会一直执行。而主循环就是一个菜单选择器,通过不同的功能选项来执行不同的操作。具体的功能选项,分别执行inputScores函数、outputStuInfo函数、calcCourseAvg函数等。而calcCourseAvg函数就是计算每门课程平均成绩的函数,其余函数的作用通过函数名即可理解。