本帖最后由 Whitehat_K 于 2016-7-27 23:56 编辑 #include <stdio.h>
#define N 2
#define M 2
float a[N][M];
float a_stu[N], a_cour[M];
int r,c;
int main ()
{
int i,j;
float h,k;
float f1(void);
float f2();
void f3(void);
void f4(void);
void f5(void);
f3();
f4();
f5();
for (i=0;i<N;i++)
{
printf("\n No %2d",i+1);
for (j=0;j<M;j++)
printf("%8.2f",a[i][j]);
printf("%8.2f",a_stu[i]);
}
printf("每门课的平均成绩为"); /*每门课的平均分*/
for (j=0;j<M;j++)
printf("%8.2f",a_cour[j]); /*a_cour[j]*/
printf ("\n");
h=f2();
k=f1();
printf("最高分为:%7.2f 是第 %d 位同学的第 %d 门课程",h,r,c);
printf("方差为:%8.2f\n",k);
return 0;
}
void f3(void)
{
int i,j;
for (i=0;i<N;i++)
{ printf("请输入第 %2d 位同学的成绩:\n",i+1);
for (j=0;j<M;j++)
scanf("%f",&a[i][j]);
}
}
void f4(void)
{
int i,j;
float sum=0;
for (i=0;i<N;i++)
{
for (j=0, sum=0;j<M;j++) /*1.sum需清零,不然计算错误*/
sum = sum +a[i][j];
a_stu[i]=sum/M;
}
}
void f5(void)
{
int i,j;
float sum=0;
r = 1; /*如果第一个学生第一门课就是最大值*/
c = 1;
for (j=0;j<M;j++)
{
for (i=0, sum=0;i<N;i++)
sum = sum +a[i][j];
a_cour[j]=sum/N; /*1.i应该从0开始或者改为j; 2.此处有死循环应换成j++; 3.sum清零*/
}
}
float f2()
{
int i,j;
float sum=a[0][0];
for (j=0;j<M;j++) /*1.死循环更改为j++*/
{
for (i=0;i<N;i++)
if (sum<a[i][j])
{
sum=a[i][j]; /*即时记录最大值得标号*/
r=i+1;
c=j+1;
}
}
return sum;
}
float f1(void) /*个人认为求方差应该是求两个课程各自的方差,这部分就持保留意见*/
{
int i;
float c=0,d=0;
for (i=0;i<N;i++)
{
c=c+a_stu[i]*a_stu[i];
d=d+a_stu[i];
}
return (c/N-(d/N)*(d/N));
}
|