这两个代码输出的结果为什么不一样?(我想要的就是第二种答案,第一种错哪里了)
# include<stdio.h>
int main()
{
int i,j,a[4][5],row,col,max;
for(i = 0;i<4;i++)
{
for(j = 0;j<5;j++)
scanf("%d",&a[i][j]);
max = a[0][0];
if(max<a[i][j])
{
max = a[i][j];
row = i;
col = j;
}
}
printf("%d row=%d col=%d",max,row+1,col+1);
return 0;
}
# include<stdio.h>
int main()
{
int i,j,a[4][5],row,col,max;
for(i = 0;i<4;i++)
for(j = 0;j<5;j++)
scanf("%d",&a[i][j]);
max = a[0][0];
for(i = 0;i<4;i++)
{
for(j = 0;j<5;j++)
if(max<a[i][j])
{
max = a[i][j];
row = i;
col = j;
}
}
printf("%d row=%d col=%d",max,row+1,col+1);
return 0;
}
#include<stdio.h>
int main()
{
int i, j, a[4][5], row, col, max=-10000;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 5; j++)
{
scanf("%d", &a[i][j]);
if (max < a[i][j])
{
max = a[i][j];
row = i;
col = j;
}
}
}
printf("%d row=%d col=%d", max, row + 1, col + 1);
return 0;
}
这一段不能写在for循环里面
max = a[0][0];
if (max < a[i][j])
{
max = a[i][j];
row = i;
col = j;
}
内层循环退出后j = 5
a[i][j]会越界
最大值初赋值放循环外面,否则每次循环最大值都为第一个元素了
# include<stdio.h>
int main()
{
int i,j,a[4][5]={0},row,col,max;
max = a[0][0];
for(i = 0; i<4; i++)
{
for(j = 0; j<5; j++)
scanf("%d",&a[i][j]);
if(max<a[i][j])
{
max = a[i][j];
row = i;
col = j;
}
}
printf("%d row=%d col=%d",max,row+1,col+1);
return 0;
}
第一种错在将max = a[0][0];放在循环里,这样每次输入,都会重新将 a[0][0]赋给max,max存储的不一定是当前的最大值
找最大值和输入值放在一起,输入的数还在缓存中没读出来,所以会出错
# include<stdio.h>
int main()
{
int i,j,a[4][5],row,col,max;
for(i = 0; i<4; i++)
{
for(j = 0; j<5; j++)
{
scanf("%d",&a[i][j]);
}
}
max = a[0][0];
for(i = 0; i<4; i++)
{
for(j = 0; j<5; j++)
{
if(max<a[i][j])
{
max = a[i][j];
row = i;
col = j;
}
}
}
printf("max:%d row=%d col=%d",max,row+1,col+1);
return 0;
}
可是他那个max = a[0][0]怎么读出来了