C语言二维数组求平均值

求教,我这个问题出在哪;萌新勿喷#include <stdio.h>#define M 4#define N 6int main(){ int a[M+1][N+1]; int sum=0,i,j; for(i=0;i<M;i++) { sum=0; for(j=0;j<N;j++) { scanf("%d",&a[i][j]); sum+=a[i][j]; } a[i][N]=sum/N; a[M][j]=sum/M; } for( i=0 ; i<M ; i++ ) { for ( j=0; j<N+1 ; j++) printf("%d ",a[i][j]); printf("\n"); } for(j=0;j<N;j++) { for(i=0;i<M+1;i++) printf("%d ",a[i][j]); } return 0;}

    由于整数的平均值也应该是浮点值,所以a[i][N]=sum/N;这样不行。建议你把a数组和sum都声明为浮点型。

    a[M][j]=sum/M;逻辑有错。题目似乎是要求列平均值,应该另想办法,不能兼用i、j以及sum了。

改后代码如下:

#define M 4
#define N 6
int main(int argc,char *argv[]){
double a[M+1][N+1],sum=0;
int i,j;
for(i=0;i<=N;a[M][i++]=0);//加这一行列平均值初值赋0
for(i=0;i<M;i++){
sum=0;
for(j=0;j<N;j++){
scanf("%lf",&a[i][j]);
sum+=a[i][j];
a[M][j]+=a[i][j];//增加这一行求列和
}
a[i][N]=sum/N;
//a[M][j]=sum/M;
}
for(i=0;i<N;a[M][i++]/=M);//增加这一行求列平均值
for( i=0 ; i<M+1 ; i++ ){//有改
for( j=0; j<N+1 ; j++)
printf("%.1f\t",a[i][j]);//有改
printf("\n");
}

追问

我试过改成浮点数,还是不行

追答#include "stdio.h"
#define M 4
#define N 6
int main(int argc,char *argv[]){
double a[M+1][N+1],sum=0;
int i,j;
for(i=0;i<=N;a[M][i++]=0);//加这一行列平均值初值赋0
for(i=0;i<M;i++){
sum=0;
for(j=0;j<N;j++){
scanf("%lf",&a[i][j]);
sum+=a[i][j];
a[M][j]+=a[i][j];//增加这一行求列和
}
a[i][N]=sum/N;
//a[M][j]=sum/M;
}
for(i=0;i<N;a[M][i++]/=M);//增加这一行求列平均值
for( i=0 ; i<M+1 ; i++ ){//有改
for( j=0; j<N+1 ; j++)
printf("%.1f\t",a[i][j]);//有改
printf("\n");
}
//for(j=0;j<N;j++){
// for(i=0;i<M+1;i++)
// printf("%.1f\t",a[i][j]);
//}
return 0;
}

运行样例:

行不行自己看……

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-08-27
定义数组那里直接用M和N不行吗?干嘛还要加一追问

需要在原来数组的后面输出平均数啊

追答

平均数另外声明一个浮点型的类型

还有,除法运算那个规则,整型除以整型结果是整型

相似回答