C ++矩阵乘法不能产生正确的输出

时间:2014-03-17 22:26:46

标签: c++ matrix

我试图在C ++中将两个2D数组相乘,但预期的输出不正确,以下是我的逻辑,我正在尝试 -

 int A[l][m]; //creates A l*m matrix or a 2d array.      
for(int i=0; i<l; i++)    //This loops on the rows.
{
    for(int j=0; j<m; j++) //This loops on the columns
    {
        A[i][j] = i+j; // Allocating values to A matrix
    }
}

int B[m][n]; //creates B m*n matrix or a 2d array.
for(int i=0; i<m; i++)    //This loops on the rows.
{
    for(int j=0; j<n; j++) //This loops on the columns
    {
        B[i][j] = i+j+1; // Allocating values to B matrix
    }
}

int C[l][n]; //creates C m*n matrix or a 2d array.
for(int i=0; i<l; i++)    //This loops on the rows.
{
    for(int j=0; j<n; j++) //This loops on the columns
    {
        for(int k=0; k<m; k++) //This loops on the columns
        {
            C[i][j] += A[i][k] * B[k][j]; // Allocating values to C matrix
            //product[row][col] += aMatrix[row][inner] * bMatrix[inner][col];
        }
    cout << C[i][j] << "  ";
          }
       cout << "\n";
}

如果我给l = 2,m = 2且n = 2我得到以下输出 -

-1077414723 3
15 8

哪个不对,有人可以告诉我这里有什么问题。

3 个答案:

答案 0 :(得分:3)

您必须将C[i][j]初始化为0.

或者您可以在0处开始计算金额,然后在C[i][j]后分配:{/ p>

//...
for(int j=0; j<n; j++) //This loops on the columns
{
   int sum = 0;
   for(int k=0; k<m; k++) //This loops on the columns
   {
      sum += A[i][k] * B[k][j]; // Allocating values to C matrix
      //product[row][col] += aMatrix[row][inner] * bMatrix[inner][col];
   }
   C[i][j] = sum;
   cout << C[i][j] << "  ";
}
//...

答案 1 :(得分:0)

您有未定义的行为:声明了int C[l][n];但从未初始化。

通常,memset用于将内存归零,或者只是循环遍历元素并将它们设置为零(对于现代编译器,它也同样快)。

答案 2 :(得分:0)

您尚未将c [i] [j]初始化为0。 使用

int c[2][2]= {{0}};

这将初始化数组的第一个元素。但是,如果初始化数组的某些元素,那么未初始化的元素将设置为0.