求矩阵的最大数,及其行,列数。这样写为什么不正确?

int a[3][4],i,j,h,l,max;
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[i][j];
    if(a[i+1][j+1]>a[i][j])

    {
         max=a[i+1][j+1];
         h=i+1;
         l=j+1;
    }

}

}
printf("最大:%3d行:%3d列:%3d",max,h,l);
system("pause");

你这样写没有遍历到矩阵的每个数

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

{
for(j=0;j {
max=a[0][0];
if(a[i][j]>max)

{
     max=a[i][j];
     h=i;
     l=j;
}

}
}

我没办法调试,你可以试试这样对不对

刚才发错了,第二个循环不小心删除了一些东西!

不好意思,还是错了,max赋值应该 写在循环外

max=a[0][0];
for(i=0;i {
for(j=0;j {
if(a[i][j]>max)
{
max=a[i][j];
h=i;
l=j;
}
}
}
这样试试

我给你一个通用的吧:

int max = a[0][0];
    for(int i=0;i<a.length;i++)
    {
        for(int j=0;j<a[i].length;j++)
        {
            if(max<a[i][j])
            {
                max = a[i][j];
                h = i;
                l = j;
            }
        }
    }

你这样写的话即便if语句不成立下次循环max也改变了,故当if语句是否运行max都改变所以肯定不行,max初始化一定要在for循环的外面。

max=a[i][j];
if(a[i+1][j+1]>a[i][j])
你着两行代码问题很大,首先你max=a[i][j]放到循环里面,就算你通过比较找到了一个最大的元素,
等到下次循环,a[i][j]又会被赋给另外一个假定的最大值,上一次比较找的最大值被覆盖没了。
比如说你第一次假定a[0][0],假定下面的比较找最大值代码是对的,你第一轮循环找大了某个最大值,假设是a[0][2]
但是第二次循环你的最大值立刻被替换成a[0][1]。。。这个最大值一直被你的循环换着,就算你找到最大值,也被下一轮还错了
而这句问题更大if(a[i+1][j+1]>a[i][j]),你在跳着行比较,也就是说你不是在矩阵的所有元素中找最大值
a[1][1] 跟a[0][0]光这依次你你就扔掉了a[0][1],a[0][2]...a[1][0]这么多元素都被你忽视了。

#include
int main()
{
int a[3][4],i,j,h,l,max;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
}
max=a[0][0];
l=j+1;
h=l+1;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(max<a[i][j])
{
max=a[i][j];
h=i+1;
l=j+1;
}
}
}
printf("最大:%3d行:%3d列:%3d",h,l,max);
system("pause");
return 0;
}
试试这个

max=a[0][0];
l=j+1;
h=l+1;
这个地方写错了,应该是:
max=a[0][0];
l=1;
h=1;
还有开头stdio.h不知道什么原因没贴上去