C语言编程问题求解:输入一个四行五列的数组,要求算出平均值最大的一行以及平均值。请问逻辑错误在哪?

#include<stdio.h>
int main()
{
float a[4][5];
int i,j,t1;
float aver,max,total;
printf("请输入数组");
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<=3;i++)
{ for(j=0;j<=4;j++)
max=a[0][0]+a[0][1]+a[0][2]+a[0][3]+a[0][4];
}
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
{
total=a[i][0]+a[i][1]+a[i][2]+a[i][3]+a[i][4];
}
if(total>max)
{
max=total;
t1=i+1;
}

}
aver=max/5;
printf("平均值最大的行是第%f行,平均值是%f",t1,aver);
return 0;
}
我的平均值算出来总是0或者乱码。
请编程高手支招

你这个程序,第一个循环,你没有任何用处,循环那么多遍你计算的始终是第一行的值。你可以直接去掉循环max=a[0][0]+....+a[0][4].然后第二个循环,你要把if那个判断挪到循环里面去。不然你这样循环结束后total就等于最后一边的循环值,就是最后一行的值。你就只是把第一行跟最后一行做了比较,别的你都没比较。把判断大小的if放在循环里面。还有,你的循环其实只是循环了行,并没有设计列,所以把j的那个循环也可以去掉,一层循环就够了。我修改了一下,是这样
#include<stdio.h>
int main()
{ float a[4][5];
int i,j,t1;
float aver,max,total;
printf("请输入数组\n");
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
{
scanf("%f",&a[i][j]);
}
}

max=a[0][0]+a[0][1]+a[0][2]+a[0][3]+a[0][4];

for(i=0;i<=3;i++)
{

total=a[i][0]+a[i][1]+a[i][2]+a[i][3]+a[i][4];
if(total>max)
{
max=total;
t1=i+1;
}
total = 0;
}
aver=max/5;
printf("平均值最大的行是第%d行,平均值是%f",t1,aver);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-09
#include<stdio.h>
int main()
{
float a[4][5];
int i,j,t1;
float aver,max,total;//total为无用变量,可以省略
float number; //新加代码
printf("请输入数组");
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
{
scanf("%f",&a[i][j]);
}
}
//这儿的代码是显示你所输入的矩阵,方便你观察输入与结果是否符合
/*for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
{
printf("%f ",a[i][j]);
}
printf("\n");
}*/
max=a[0][0]+a[0][1]+a[0][2]+a[0][3]+a[0][4];//新加代码
t1=0;
for(i=0;i<=3;i++)
{
//此处代码修改
number=a[i][0]+a[i][1]+a[i][2]+a[i][3]+a[i][4];
if(max<=number)
{
max=number;
t1 =i;
}
number=0;
}
//注意有段代码全部删除
aver=max/5;
printf("平均值最大的行是第%d行,平均值是%f",(t1+1),aver);
return 0;
}来自:求助得到的回答
第1个回答  2013-03-09
扫了一遍,感觉scanf("%d",&a[i][j]);很可疑追问

输入我调试了的,没有问题啊

追答

1 把你的类型全部改成int型,看看你的算法是否正确;
2 把数组改小,可以加快调试速度;
3 用断点,一步一步确认

我确定你的max一开始就错了,改成scanf("%f",&a[i][j]);后max是15.0

追问

谢谢了!!我后面做了两个无用的循环,但是输入数组是没有错误的。我已经找到答案了!