#include<stdio.h>
#define N 2
#define M 3
int fun(int a[N][M])
{int i=0,j=0,k,m,n;
k=a[0][0];
for(i;i<N;i++)
{for(j;j<M;j++)
{if(k<a[i][j])
{k=a[i][j];
m=i,n=j;}}}
printf("最大数:%d,行下标:%d,列下表:%d",k,m,n );
return 0;
}
int main()
{int a[N][M],m,n;
for(m=0;m<N;m++)
for(n=0;n<M;n++)
scanf("%d",&a[m][n]);
fun(a);
return 0;
}
这个哪里不对,输入1 2 3 4 5 6出来的最大数是3
在你的自定义函数里两层循环都加一个输出,看看执行结果,如下:
for(i;i<N;i++)
{
printf("i=%d\n",i);
for(j;j<M;j++)
{
printf("j=%d\n",j);
if(k<a[i][j])
{
k=a[i][j];
m=i;n=j;
}
}
}
可以看到,i执行到1时就停止了。这就说明当i=0时,执行到j=3时,跳出了内层循环,i+1=1后,由于j没被初始化为0,还是3,所以无法执行内层循环。找到了问题,所以应该这样改:
for(i=0;i<N;i++)
{
//printf("i=%d\n",i);
for(j=0;j<M;j++)
{
// printf("j=%d\n",j);
if(k<a[i][j])
{
k=a[i][j];
m=i;n=j;
}
}
}
顺带说一句,你的m,n应该和k一样初始化,不然,若是第一个数最大,就会出现错误的下标结果