关于找鞍点的C语言程序,我写的程序输出结果时总是不对,想知道哪里错了。

2025-04-30 06:42:59
推荐回答(1个)
回答1:

楼主是在帮别人问吧,你输入上的错误和混乱的排版就不提了,当事人应该知道的,我把你程序设计上的错误批在代码旁边:
#include”stdio.h”
Void main(){
Int a[3][3],max,maxl,maxh,i,j;
Int flag=1;
For(i=1;i<=3;i++)//数组下标是从0开始的,应该改成:i=0;i<=2;
{For(j=1;j<=3,j++)//改成j=0;j<=2
Scanf(“%d”,&a[i][j]);
}
For(i=1;i<=3;i++)//改成i=0;i<=2
{Max=a(I,1);//a(i,1)改成a[i][0]
For(j=2;j<=3;j++)//改成j=1;j<=2
{if(a[i][j]>max){
Max=a[i][j];
Maxl=j;
Maxh=I;
}
For(i=1;i<=3;i++)//改成i=0;i<=2
{if(max>a[i][maxl])
{flag=0;break;
} //经过这个循环后,i的值已经变了,所以要记得改回来,加一句i=maxh;就可以了
if(flag==1) printf(“andian is%d”,a[maxh][maxl]);
} //要等这个for循环结束你才知道max是不是这一列的最小数,而不是提着半桶水跑!!所以你这个}应该放前面那个if之前!!
If(flag==0)printf(“no number\n”);}
//你不将1重新赋给flag,那下一次循环的时候flag到底是0还是1?

修改后的程序如下:

#include"stdio.h"
void main()
{
int a[3][3],max,maxl,maxh,i,j,flag=1;
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
for(i=0;i<=2;i++)
{
max=a[i][0];
for(j=0;j<=2;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
maxl=j;
}
}
for(maxh=0;maxh<=2;maxh++)
{
if(max>a[maxh][maxl])
{
flag=0;
break;
}
}
if(flag==1) printf("鞍点是 %d\n",a[maxh][maxl]);
if(flag==0) printf("no number\n");
flag=1;

}
}