用c语言程序编写 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有

#include<stdio.h>
int main()
{
int a[3][4],i,j,p1,p2,p3,c1,c2,c3;
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
}
printf("\n");
c1=0;
c2=0;
c3=0;
p1=a[0][0];
p2=a[1][0];
p3=a[2][0];
{ for(j=0;j<4;j++)

if(p1<a[0][j])

p1=a[0][j];

c1=j;

}
{for(j=0;j<4;j++)
if(p2<a[1][j])

p2=a[1][j];

c2=j;

}

{for(j=0;j<4;j++)
if(p3<a[2][j])

p3=a[2][j];

c3=j;

}
printf("%3d%3d%3d%3d%3d%3d\n",p1,p2,p3,c1,c2,c3);

{for(i=0;i<3;i++)
if(p1>a[i][c1])
{printf("第一行没有鞍点\n");
break;}
else
printf("有鞍点%d\n",p1);
}
{for(i=0;i<3;i++)
if(p2>a[i][c2])
{printf("第二行没有鞍点\n");
break;}
else
printf("有鞍点%d\n",p2);
}
{for(i=0;i<3;i++)

if(p3>a[i][c3])
{printf("第三行没有鞍点\n");
break;}
else
printf("有鞍点%d\n",p3);
}

for(i=0;i<3;i++)
{for(j=0;j<4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}
我的代码问题出在哪里?

#include<stdio.h>

int main ()
{
int a[3][4], i, j, p1, p2, p3, c1, c2, c3;

for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
scanf ("%d", &a[i][j]);
}
}

printf ("\n");
c1 = c2= c3 = 0;
p1 = a[0][0];
p2 = a[1][0];
p3 = a[2][0];

for (j = 0; j < 4; j++)
{
if (p1 < a[0][j])
{
p1 = a[0][j];
c1 = j;
}

}

for (j = 0; j < 4; j++)
{
if (p2 < a[1][j])
p2 = a[1][j];
c2 = j;
}

for (j = 0; j < 4; j++)
{
if (p3 < a[2][j])
p3 = a[2][j];
c3 = j;

}

printf ("%3d%3d%3d%3d%3d%3d\n", p1, p2, p3, c1, c2, c3);

for (i = 0; i < 3; i++)
{
if (p1 > a[i][c1])
{
printf ("第一行没有鞍点\n");
break;
}
else
printf ("有鞍点%d\n", p1);
}

for (i = 0; i < 3; i++)
{
if (p2 > a[i][c2])
{
printf ("第二行没有鞍点\n");
break;
}
else
printf ("有鞍点%d\n", p2);
}

for (i = 0; i < 3; i++)
{
if (p3 > a[i][c3])
{
printf ("第三行没有鞍点\n");
break;
}
else
printf ("有鞍点%d\n", p3);
}

for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
printf ("%5d", a[i][j]);
printf ("\n");
}
return 0;
}
你的分支语句写的有问题,你参照这个代码和你以前的比较一下你就会发现的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-24
#include<stdio.h>
int main()
{
int a[3][4],i,j,p1,p2,p3,c1,c2,c3;
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
}
printf("\n");
c1=0;
c2=0;
c3=0;
p1=a[0][0];
p2=a[1][0];
p3=a[2][0];
{ for(j=0;j<4;j++)

if(p1<a[0][j])

{p1=a[0][j];

c1=j;

}}
{for(j=0;j<4;j++)
//下面if后面加个大括号,下两处同
if(p2<a[1][j])

{p2=a[1][j];

c2=j;

}}

{for(j=0;j<4;j++)
if(p3<a[2][j])

{p3=a[2][j];

c3=j;

}}
printf("%3d%3d%3d%3d%3d%3d\n",p1,p2,p3,c1,c2,c3);
//此处加大括号
{for(i=0;i<3;i++){
if(p1>a[i][c1])
{printf("第一行没有鞍点\n");
break;}
if(i==2)printf("有鞍点%d\n",p1);
}}
{for(i=0;i<3;i++){
if(p2>a[i][c2])
{printf("第二行没有鞍点\n");
break;}
//此处更改,三处同样
if(i==2)printf("有鞍点%d\n",p2);
}}
{for(i=0;i<3;i++){

if(p3>a[i][c3])
{printf("第三行没有鞍点\n");
break;}
if(i==2)
printf("有鞍点%d\n",p3);
} }

for(i=0;i<3;i++)
{for(j=0;j<4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}本回答被提问者和网友采纳
第2个回答  2011-05-01
#define N 10
#define M 10
void main( )
{ int i, j, k, m, n, flag1, flag2, a[N][M], max, maxj;
printf("输入行列数n,m:");
scanf("%d%d", &n,&m);
for (i =0; i <n; i ++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
flag2=0;
for(i =0; i <n; i ++)
{ max=a[i][0];
for(j=0;j<m;j++)
if(a[i][j]>max)
{ max=a[i][j];
maxj=j;
}
for(k=0,flag1=1;k<n&&flag1;k++)
if(max<a[k][maxj])
{ printf("第%d 行,第%d 列的%d 是鞍点\n", i,maxj,max);
flag2=1;}
if(flag1) flag1=0;
}
if(!flag2) printf(" 矩阵中无鞍点!\n");
}
第3个回答  2011-04-25
定义数组只能用常量,不能用变量

int i,j,c,d,t;
int a[i][j],a[c][d];

ijcd都是变量,怎么用来定义数组长度呢

printf("%d",a[i][j];}
最后一行还少括号
相似回答