c语言求鞍点的程序,求告知我错在哪里了

题目是用c语言找二维数组的鞍点,鞍点是所在行的最大值,列的最小值,如果未找到,输出NO。
下面是我的程序
#include<stdio.h>int main(void){ int hangmax,liemin,h,l,ad,m,n,i,j,c,d,t=0; printf("enter n(1<=n<=6):"); scanf("%d",&n); int a[n][n]; for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) for(j=0;j<n;j++) { t++; printf("%d",a[i][j]); if(t%n==0) printf("\n"); } //以上是输入数组并显示,下面是主函数

for(i=0;i<n,t!=1;i++) { for(l=0,hangmax=a[i][l];l<n;l++) if(a[i][j]>a[i][l]) hangmax=a[i][j],c=i,l=j; //找出第i行的最大值,并记录那个最大值所在的列 for(j=l,i=0,liemin=a[h][j];i<n;i++) if(a[i][j]<a[h][j]) liemin=a[i][j],h=i; //将列固定,在那一列寻找列的最小值 if((hangmax==liemin)&&(h==c)) printf("%d\n",hangmax),t=1; //当行的最大值与列的最小值相等,且行与列的下标都相同,输出鞍点的值,t是判断最终是否要输出NO的标志 } if(t!=1) printf("NO"); return 0; }
校验无错误,但是每次运行会弹出这个
最新回答
七落海屿

2024-10-14 08:03:21

楼上说的对,你在定义数组的时候,计算机会在内存中为你的数组分配空间,这个过程在你输入之前就已经完成了,而你的n是个未知数,所以就造成这个错误了。问题在于,你是知道了n,但计算机不知道,要么直接定义一个大一点的数组,比如a【100】【100】,输入别超过100就行,这样的话应该就没问题了。
追问
有道理啊。不过你们两个都回答的很好,我只能投个硬币二选一啦
可是我把a nn改为a 66还是错了
一样的结果。弹出窗口
追答
如果改了之后还是这个错误,那就要从逻辑上进行查错了,这个情况是运行时出错,一般可能是数组访问越界造成的,你详细检查一下看看是不是哪里访问越界了
含悦人道

2024-10-14 08:11:05

n是未知变量,不能作为数组的定义范围
追问
我事先输入了n,所以n是已知的一个一个了
字打错了。后面是:一个值了
追答
不是这样算的,你n是输入的未知变量,不能直接定义数组,你要用的话只能通过n申请空间
追问
你们回答的都很好,我只能投币二选一啦