程序如下,本人想实现二维矩阵的乘法,里面初始化数据都为零,但是却输出了”0 0 0 0 8 0 4203905 0 4202896“,问一下为什么会输出非零实数,求高手解答,谢谢。
#include<stdio.h>
#define M 3
#define N 2
int main()
{
int a[M][N]={0,0,0,0,0,0},b[N][M]={0,0,0,0,0,0},r[M][M],i,j,k=0;
for(i=0;i<M;i++)
{
for(k=0;k<M;k++)
for(j=0;j<N;j++)
r[i][k]+=a[i][j]*b[j][i];
}
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf(” %d “,r[i][j]);
}
return 0;
}
#include<stdio.h>
#define M 3
#define N 2
int main()
{
int a[M][N]={0,0,0,0,0,0},b[N][M]={0,0,0,0,0,0},r[M][M],i,j,k=0;
for(i=0;i<M;i++)
{
for(k=0;k<M;k++)
for(j=0;j<N;j++)
r[i][k]+=a[i][j]*b[j][i];
}
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf(” %d “,r[i][j]);
}
return 0;
}
解决方案
10
原因是你的r 中不是全部的数都初始化了
你初始的部分只是:
for(k=0;k<M;k++)
for(j=0;j<N;j++)
这里一个唯度上是M,另一个是N
但r的大小两个维度上都是M
你初始的部分只是:
for(k=0;k<M;k++)
for(j=0;j<N;j++)
这里一个唯度上是M,另一个是N
但r的大小两个维度上都是M
5
r[i][k]+=a[i][j]*b[j][k];
10
r[i][k] += a[i][j] * b[j][i];这句你多了个+号
应该是r[i][k] = a[i][j] * b[j][i];
应该是r[i][k] = a[i][j] * b[j][i];
5
r[M][M]初始化