用C语言输入4个学生5门课的成绩,分别用函数实现下列功能:①计算 每个学生的平均分;②计算每门课的平均分;③找出所有20个分数中最高的分数所 对应的学生和课程;④计算平均分方差(公式见教材)。
时间: 2023-06-12 19:02:43 浏览: 229
以下是对应的C语言代码实现:
```c
#include <stdio.h>
#include <math.h>
#define STUDENT_NUM 4
#define COURSE_NUM 5
void input_scores(int scores[][COURSE_NUM]) {
int i, j;
for (i = 0; i < STUDENT_NUM; i++) {
printf("请输入第%d个学生的成绩:\n", i + 1);
for (j = 0; j < COURSE_NUM; j++) {
printf("请输入第%d门课的成绩:", j + 1);
scanf("%d", &scores[i][j]);
}
}
}
void calc_student_average(int scores[][COURSE_NUM], float averages[]) {
int i, j;
for (i = 0; i < STUDENT_NUM; i++) {
float sum = 0;
for (j = 0; j < COURSE_NUM; j++) {
sum += scores[i][j];
}
averages[i] = sum / COURSE_NUM;
}
}
void calc_course_average(int scores[][COURSE_NUM], float averages[]) {
int i, j;
for (j = 0; j < COURSE_NUM; j++) {
float sum = 0;
for (i = 0; i < STUDENT_NUM; i++) {
sum += scores[i][j];
}
averages[j] = sum / STUDENT_NUM;
}
}
void find_highest_score(int scores[][COURSE_NUM], int *p_student, int *p_course) {
int i, j;
int max_score = -1;
for (i = 0; i < STUDENT_NUM; i++) {
for (j = 0; j < COURSE_NUM; j++) {
if (scores[i][j] > max_score) {
max_score = scores[i][j];
*p_student = i;
*p_course = j;
}
}
}
}
float calc_variance(float data[], int n) {
int i;
float sum = 0;
float avg = 0;
for (i = 0; i < n; i++) {
sum += data[i];
}
avg = sum / n;
sum = 0;
for (i = 0; i < n; i++) {
sum += pow(data[i] - avg, 2);
}
return sum / n;
}
int main() {
int scores[STUDENT_NUM][COURSE_NUM];
float student_averages[STUDENT_NUM];
float course_averages[COURSE_NUM];
int highest_student, highest_course;
float variance;
input_scores(scores);
calc_student_average(scores, student_averages);
printf("每个学生的平均分为:\n");
for (int i = 0; i < STUDENT_NUM; i++) {
printf("第%d个学生的平均分为:%.2f\n", i + 1, student_averages[i]);
}
calc_course_average(scores, course_averages);
printf("每门课的平均分为:\n");
for (int j = 0; j < COURSE_NUM; j++) {
printf("第%d门课的平均分为:%.2f\n", j + 1, course_averages[j]);
}
find_highest_score(scores, &highest_student, &highest_course);
printf("最高分数为:%d,对应的学生为:%d,课程为:%d\n", scores[highest_student][highest_course], highest_student + 1, highest_course + 1);
variance = calc_variance(student_averages, STUDENT_NUM);
printf("每个学生的平均分的方差为:%.2f\n", variance);
return 0;
}
```
在上面的代码中,我们定义了常量 `STUDENT_NUM` 和 `COURSE_NUM` 分别代表学生数和课程数。首先,我们通过 `input_scores` 函数让用户输入每个学生每门课的成绩,然后分别通过 `calc_student_average` 和 `calc_course_average` 函数计算每个学生的平均分和每门课的平均分,并通过 `find_highest_score` 函数找出最高分数所对应的学生和课程。最后,我们通过 `calc_variance` 函数计算每个学生的平均分的方差,并输出结果。