对于之前错误的矩阵乘法程序,本人重新作了修改,但这次的输出还是有错误,输出:
3 3 3
6 6 6
2 2 2
#include<stdio.h>
#define M 2
#define N 3
int main()
{
int a[2][3]={1,2,3,4,5,6},b[3][2]={1,1,1,1,1,1},r[3][3]={0},i,j,k=0;
for(i=0;i<N;i++)
for(k=0;k<N;k++)
for(j=0;j<N;j++)
r[i][k]=a[i][j]*b[j][i];
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf(” %d “,r[i][j]);
printf(“\n”);
}
return 0;
}
求高手帮助,谢谢。
3 3 3
6 6 6
2 2 2
#include<stdio.h>
#define M 2
#define N 3
int main()
{
int a[2][3]={1,2,3,4,5,6},b[3][2]={1,1,1,1,1,1},r[3][3]={0},i,j,k=0;
for(i=0;i<N;i++)
for(k=0;k<N;k++)
for(j=0;j<N;j++)
r[i][k]=a[i][j]*b[j][i];
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf(” %d “,r[i][j]);
printf(“\n”);
}
return 0;
}
求高手帮助,谢谢。
解决方案
30
r[i][k]=a[i][j]*b[j][i];
能否应该是
r[i][k]+=a[i][j]*b[j][i];
另外检查能否会越界,你循环中 i 的值会到2
而a[i][j] 中a 的范围是 [0-1][0-2],i为2的时候是不是越界了
能否应该是
r[i][k]+=a[i][j]*b[j][i];
另外检查能否会越界,你循环中 i 的值会到2
而a[i][j] 中a 的范围是 [0-1][0-2],i为2的时候是不是越界了
5
“多一少一”问题占程序员常犯错误的10%以上!
避免“多一少一”问题的方法之一是将例如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为
x、x-1、x+1中的哪个?
<、<=、==、>、>=中的哪个?
避免“多一少一”问题的方法之一是将例如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为
x、x-1、x+1中的哪个?
<、<=、==、>、>=中的哪个?