//_35_综合实例2
//_35_main.cpp
//这个例子是一个统计学生成绩的程序,要求输入10个学生5门功课
//的成绩,分别用于子函数求出:每个学生的平均分,没门功课的平均分
//找出最高分所对应的学生和功课,求出平均分方差
#include <stdlib.h>
#include <stdio.h>
#define M 5
#define N 3
float score[N][M];//存放成绩
float a_stu[N],a_cor[M];//存放学生平均成绩,每科平均成绩
//子函数声明
void input_stu();//输入学生成绩
void avr_stu();//学生课时平均分
void avr_cor();//每门功课平均分
float highest(int *r,int *c);//最高分
float s_diff();//求方差
int main()
{
input_stu();
avr_stu();
avr_cor();
printf("\n序号 课程1 课程2 课程3 课程4 课程5 平均分");
for(int i=0;i<N;i++)
{
printf("\nNo%2d",i+1);
for(int j=0;j<M;j++)
printf("%8.2f",score[i][j]);
printf("%8.2f",a_stu[i]);
}
printf("\n课平均 ");
for(int k=0;k<M;k++)
printf("%4.2f ",a_cor[k]);
int r=0,c=1;
float h=highest(&r,&c);
printf("\n最高分%8.2f是%d号学生的第%d门课\n",h,r,c);
printf(" 方差%8.2f\n",s_diff());
system("pause");
return 0;
}
void input_stu()
{
for(int i=0;i<N;i++)
{
printf("请输入学生%2d的5科成绩:\n",i+1);
for(int j=0;j<M;j++)
scanf("%f",&score[i][j]);
}
}
void avr_stu()
{
float s;//计算学生成绩综合
for(int i=0;i<N;i++)
{
s=0;
for(int j=0;j<M;j++)
s+=score[i][j];
a_stu[i]=s/M;
}
}
void avr_cor()
{
float s;
for(int i=0;i<M;i++)
{
s=0;
for(int j=0;j<N;j++)
s+=score[j][i];
a_cor[i]=s/(float)N;
}
}
//r表示第几个学生,c表示第几个科目
float highest(int *r,int *c)
{
float high=score[0][0];
for(int i=0;i<N;i++)
for(int j=0;j<M;j++)
if(high<score[i][j])
{
high=score[i][j];
*r=i+1;
*c=j+1;
}
return high;
}
float s_diff()
{
float sumx=0.0;
float sumxn=0.0;
for(int i=0;i<N;i++)
{
sumx=sumx+a_stu[i]*a_stu[i];
sumxn=sumxn+a_stu[i];
}
return (sumx/N-(sumxn/N)*(sumxn/N));
}