二维数组求最大值及其所在位置

#include<stdio.h>
int main(){int a[2][2]={3,2,7,9},m=a[0][0],i=0,j=0,p,q;

for(;i<2;i++) for(;j<2;j++) {if(m<a[i][j]) {m=a[i][j];p=i;q=j;} } printf("%d %d %d",m,p,q);
return 0; }

有什么错误啊?为什么结果是

先假设二维数组的第一个数就是最大,记录下位置。再遍历这个二维数组,依次和最大值判断,如果发现比最大值还大的,就更换最大值,修改位置。最后输出最大值和位置。

//参考代码 
#include<stdio.h>
int main()
{
int i,j,max,r,c,a[3][4]={{1,5,7,8},{11,12,10,9},{2,4,6,3}};
//假设第一个数就是最大值 
max=a[0][0];
r=c=0;  
//依次遍历数组 
for(i=0;i<3;i++) 
for(j=0;j<4;j++) 
if(max<a[i][j]){//比较发现比最大值还大替换最大值,修改位置 
max=a[i][j];
r=i;
c=j;
}

printf("最大值为:%d,其在%d行 %d列。",max,r+1,c+1);//因为数组的下标从0开始所以r,c加1 
return 0; 
}
/*运行结果: 
最大值为:12,其在2行 2列。
*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-07-09
#include<stdio.h>
int main(){int a[2][2]={3,2,7,9},m=a[0][0],i=0,j=0,p,q; //这里有个隐患,如果a[0][0]最大,那么p和q就会出问题,最好把p和q初始化为0

for(;i<2;i++)
for(j=0;j<2;j++) //每次内循环开始要重置j
{if(m<a[i][j]) {m=a[i][j];p=i;q=j;}
}
printf("%d %d %d",m,p,q);

return 0;

}本回答被提问者和网友采纳
第2个回答  2012-11-17
#include<stdio.h>
int main()
{int i,j,a[2][2]={3,2,7,9},m=a[0][0],p=0,q=0;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{if(m<a[i][j]) {m=a[i][j];p=i;q=j;}
}
printf("%d %d %d",m,p,q);
return 0;
}
m,p,q要先初始化
相似回答