[求助]一个矩阵相乘出错原因
main(){
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2]={{1,2},{3,4},{5,6}};
int c[2][2],i,j,k;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{
c[i][j]=0;
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
printf("%5d",c[i][j]);
printf("\n");
}
}
这个程序运行没问题,但是如果把for 语句的起始值该为1,即for(i=1;i<=2;i++)就会出错,或显示对话框:
请各位给看看,多谢了!!
----------------解决方案--------------------------------------------------------
这是当然得了,当i发生变化的时候,下面的程序也会跟着变化的呀!
不出错是偶然,出错是必然!
----------------解决方案--------------------------------------------------------
我的意思是说for语句从几开始很重要吗?
例如:for(i=1;i<=2;i++) 和for(i=0;i<3;i++)一样吗?都是循环两个数啊。
----------------解决方案--------------------------------------------------------
数组的第一个值是a[0][0]吧~
----------------解决方案--------------------------------------------------------
。。。。。。。。这个问题是不是太幼稚了啊,你想想,数组的运算是从第一位开始的,你的i和j是数组的行列下标。你改了i,j的初始值当然运算的次数没有变,但是明显的,和数组的定义就不负了
----------------解决方案--------------------------------------------------------
哎,就是就是,前几天我自己也找到答案了。比如,当定义一个数组a[10],那么就不能使用数组元素a[10],只可以使用a[0]到a[9]。所以for 语句就不能从1循环到10了,只可以从0到9。
----------------解决方案--------------------------------------------------------
因为你定义二维数组时,下标是从a[0][0]开始的,上界是a[1][2],这样才表示为你定义a[2][3]时的数组啊.所以i 的初值要严格从0开始的,否则就会出现漏数和数组越界的情况,当然会出错的
----------------解决方案--------------------------------------------------------