c语言 数组问题,哪位好心人来帮帮忙!

来源:百度知道 编辑:UC知道 时间:2024/07/04 11:26:35
Q:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。
下面是我写的代码,可怎么就是不对。哪位高人帮帮忙,万分感谢!

#include<stdio.h>
void main()
{ int a[5][5]={{10,7,2,3},{3,5,1,4},{1,8,9,70},{6,9,10,100}};int i,j,b,n=0,q,y,g,h,x,u;

for(i=1;i<=4;i++)
{for(b=1;b<=4;b++)
{h=a[i][1];if(h<a[i][b]){h=a[i][b];x=i;y=b;}}
for(u=1;u<=4;u++)
{g=a[1][y];if(g>a[u][y]){g=a[u][y];q=u;}}
if(x==q){printf("%d\n",g);n++;}}

if(n==0)printf("no");
}

你好,我看了一下你的程序,先说一下为什么会有问题
int a[5][5]={{10,7,2,3},{3,5,1,4},{1,8,9,70},{6,9,10,100}};这个是你定义的数组,分析一下,你喜欢把第一个数组元素作为哨兵(其实就是空着),那么也就是说你把a[5][5]当作a[4][4]来用,但是你这里for(i=1;i<=4;i++)
{for(b=1;b<=4;b++) 你看当i=1,b=4是,其实就是a[1][4]就是0,因为你没有定义,我把你定义的数组元素列出来,其实就是这样:a[0][0]=10,a[0][1]=7,a[0][2]=2,a[0][3]=3,a[0][4]=0......
也就是说你没有定义到4,而且你i从1开始,也就是从第二行第一个开始算,所以会发生错误。
其实你编的还是可以的,只要注意一下数组的定义和循环的写法就对了,下面是我把你的改了一下,你自己再看一下:
#include<stdio.h>
main()
{
int a[5][5]={{10,7,2,3},{3,5,1,4},{1,8,9,70},{6,9,10,100}};
int i,j,m,t,flag=0,p=0,y=0;
m=a[0][0];
for(i=0;i<=3;i++)
{
m=a[i][0];
for(j=0;j<=3;j++)
if(m<a[i][j]){m=a[i][j];y=j;}
for(t=0;t<=3;t++)
if(m>a[t][y]){flag=1;break;}
if(flag==0){p++;printf("%d\n",m);}
flag=0;
}
if(p==0)printf("no\n");
}

小伙子,你的概念有问题啊,自己再仔细研究一下吧!
下面是完整的程序:
#include<stdio.h>
void main()