矩阵乘法

时间:2012-08-28 15:30:37

标签: c++ multidimensional-array

请在下一期中启发我。我试图乘以2个矩阵,并且我的代码中存在一些我无法识别的逻辑错误。请帮忙。提前谢谢

#include <iostream>
#include <cstdio>

using namespace std;

int main() {
    short int Mtx_A[4][2] = {
        {1,2},
        {3,4},
        {5,6},
        {7,8},
    };

    short int  Mtx_B[2][3] = {
        {5,7,9},
        {11,2,6},
    };

    short int  Mtx_res[4][3] = {0};

    for (short int i = 0;i<4;i++) {         // Mtx_A lines counter
        for (short int j=0;j<2;j++) {       // Mtx_B lines & Mtx_A columns counter
            for (short int k=0;k<3;k++) {   // Mtx_res columns counter
                Mtx_res[i][k] += Mtx_A[i][j] * Mtx_B[j][k];
                cout<< Mtx_res[i][k] <<"*"<<"\t";
            }
            cout<<"o"<<"\n";
        }
    }

    getchar();
    return 0;
}

3 个答案:

答案 0 :(得分:4)

创建数组的逻辑是正确的,但输出错误。

矩阵结果是二维的,但你写的是三个维度。

输出必须等到过程完成。

答案 1 :(得分:1)

当你尚未完成时,你开始输出结果矩阵。实际上,您将输出Mtx_Res的每个单元格两次,分别为j = 0和1(因此8x3而不是4x3,正如您所说的那样。)

我会在一个单独的循环中完成输出(在Mtx_Res构造循环结束后):

for (int i = 0; i < 4; i++) {
  for (int j = 0; j < 3; j++) {
    cout << Mtx_res[i][j] << "*" << "\t";
  }
  cout << "o" << "\n";
}

事实上,我认为这是一种(通常)有用的技术:单独处理与显示。没错,有时为了提高效率,你应该同时做这些,但更多时候,简单的时间对你和你的客户来说都会更加珍贵。 )

答案 2 :(得分:1)

在处理完所有j索引后,您可以更改输出以发出单元格。在处理完所有k索引之后,输出中的下一行继续。

            Mtx_res[i][k] += Mtx_A[i][j] * Mtx_B[j][k];
            if (j == 1) {
                cout<< Mtx_res[i][k] <<"*"<<"\t";
                if (k == 2) cout<<"o"<<"\n";
            }