输人10个学生5门课的成绩,分别用函数实现下列功能:
①计算每个学生的平均分;
②计算每门课的平均分;
③找出所有50个分数中最高的分数所对应的学生和课程;
④计算平均分方差:
其中,x;为某一学生的平均分。
题目解析:
此题的关键是如何存储某个学生对应某门课程的分数,这里利用了一个二维数组score,其中score[i] [j]就代表了第i个学生的第j门课程的分数,只要能够理解这个存储方式,其余的计算就是比较容易理解和实现的。
代码示例:
#include<stdio.h>
#define N 10
#define M 5
float score[N][M];
float a_stu[N], a_cour[M];
int r, c;
//输入学生成绩信息函数
void input_stu(void)
{
int i, j;
for (i = 0; i < N; i++)
{
printf("
input score of student%2d:
", i + 1);
for (j = 0; j < M; j++)
scanf("%f", &score[i][j]);
}
}
//每个学生平均分
void aver_stu(void)
{
int i, j;
float s;
for (i = 0; i < N; i++)
{
for (j = 0, s = 0; j < M; j++)
s += score[i][j];
a_stu[i] = s / 5.0;
}
}
//每门课程平均分
void aver_cour(void)
{
int i, j;
float s;
for (j = 0; j < M; j++)
{
s = 0;
for (i = 0; i < N; i++)
s += score[i][j];
a_cour[j] = s / (float)N;
}
}
//最高分函数
float highest()
{
float high;
int i, j;
high = score[0][0];
for (i = 0; i < N; i++)
for (j = 0; j<M; j++)
if (score[i][j]>high)
{
high = score[i][j];
r = i + 1;
c = j + 1;
}
return(high);
}
//方差函数
float s_var(void)
{
int i;
float sumx, sumxn;
sumx = 0.0;
sumxn = 0.0;
for (i = 0; i < N; i++)
{
sumx += a_stu[i] * a_stu[i];
sumxn += a_stu[i];
}
return(sumx / N - (sumxn / N)*(sumxn / N));
}
int main()
{
int i, j;
float h;
input_stu();
aver_stu();
aver_cour();
printf("
NO. cour1 cour2 cour3 cour4 cour5 aver
");
for (i = 0; i < N; i++)
{
printf("
NO %2d ", i + 1);
for (j = 0; j < M; j++)
printf("%8.2f", score[i][j]);
printf("%8.2f
", a_stu[i]);
}
printf("
average:");
for (j = 0; j < M; j++)
printf("%8.2f", a_cour[j]);
printf("
");
h = highest();
printf("highest:%7.2f NO. %2d course %2d
", h, r, c);
printf("variance %8.2f
", s_var());
return 0;
}
运行结果: