定义二维数组int array[4][4],程序运行时候却出现了array[4 ][4],难道不是最大是array[3][3]么?
下面的程序是求矩阵鞍点的程序。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。我定义一个4维方阵,首先在int array[n][n]中令n=4,说明是一个四行四列的矩阵。
但是在引用的时候,元素不是应该从array[0][0]到array[3][3]么?
我在下面的区域上,已经令j<n=4了,但是调试时候发现,j竟然有等于4的情况发生,这到底是为什么呢?
程序代码:
for(j=0;j<n;j++)//列m已经确定,比较每一行找到最小 { if(array[j][m]<array[k][m]); { k=j; } }
如果我给出矩阵如下:
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
那么鞍点的位置应该是array[2][1]才对,对应着数字6,即第三行第二列
但是我的程序运行结果变成了array[3][3],请问这段程序到底错在哪里呢?谢谢!
程序代码:
#include <stdio.h> int main() { int i,j,n,m,k;//循环变量i,j。数组大小变量n int flag;//找到鞍点的标志位 scanf("%d",&n); int array[n][n];//定义n维数组 for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&array[i][j]);//初始化数组 } } for(i=0;i<n;i++) { m=0;//假设第i行第0列数字为最大 for(j=1;j<n;j++) { if(array[i][j]>array[i][m]) { m=j; } } k=i; for(j=0;j<n;j++)//列m已经确定,比较每一行找到最小 { if(array[j][m]<array[k][m]); { k=j; } } if(i==k) { flag=1; break; } else { flag=0; } } if(flag==1) { printf("%d %d",k,m); } else { printf("NO"); } return 0; }