编写函数fun,功能:求N×M整型数组最大元素及其行下标和列下标,若最大元素不唯一选择位置在最前面的一个

#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一样初始化,不然,若是第一个数最大,就会出现错误的下标结果

温馨提示:答案为网友推荐,仅供参考