C语言 一个关于数组的小问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:35:43
#include<stdio.h>
#include<stdlib.h>
#define Z 3
int main()
{
int a,b;
int row_max[Z];
int column[Z];
int c[Z][Z+1]={{2,5,3,6},{4,6,4,9},{4,8,4,1}};
for(a=0;a<Z;a++){
for(b=0;b<Z;b++)
{ if(c[a][b]>=c[a][b+1]) row_max[a]=c[a][b],column[a]=b;
else row_max[a]=c[a][b+1],column[a]=b+1;
}
printf("第%d行:最大数%d,属于第%d列\n",a+1,row_max[a],column[a]+1);
}
......

这部分的结果在DEVCPP中的结果是
第1行:最大数6,属于第4列
第2行:最大数9,属于第4列
第3行:最大数4,属于第3列 <==========我要问的就是这一行!

怎么会这样?
我想要的结果是
第1行:最大数6,属于第4列
第2行:最大数9,属于第4列
第3行:最大数8,属于第2列
呀?!

麻烦帮忙讲一下我哪里错了 谢谢啊

你这个寻找最大值的方法本来就有问题,只是单纯的比较临近的两个元素。
if(c[a][b]>=c[a][b+1]),8比4大,而4又比1大,所以最后把值更新为4。正确的写法应该是:
int row_max[Z]={0,0,0};
......
for(a=0;a<Z;a++){
for(b=0;b<Z+1;b++)
if(c[a][b]>row_max[a]) row_max[a]=c[a][b],column[a]=b;
printf("第%d行:最大数%d,属于第%d列\n",a+1,row_max[a],column[a]+1);
}

#include<stdio.h>
#include<stdlib.h>
#define Z 3
int main()
{
int a,b;
int row_max[Z];
int column[Z];
int c[Z][Z+1]={{2,5,3,6},{4,6,4,9},{4,8,4,1}};

for(a=0;a<Z;a++){
row_max[a] = c[a][0];column[a]=0; // 给初值,再比较
for(b=0;b<Z;b++)
{ if(c[a][b+1]>=row_max[a]{row_max[a]=c[a][b+1];column[a]=b+1; }
}
printf("%d row: max%d is %d col\n",a+1,row_max[a],column[a]+1);
}
}

找最大值弄错了,程序中找的只是最后两个数之间的最大值。
先假设第一个最大,然后让这个“最大的”跟后面的依次比较。
#include<stdio.h>
#include<stdlib.h>
#define Z 3