繁体   English   中英

C++-使用二维矩阵输出两个矩阵的乘法

[英]C++-Output multiplication of two matrices using 2D matrix

我是编程新手,正在做一个关于从用户输入的两个矩阵的乘法的问题。 我想我为它写了正确的代码。 但是,output 是 null 矩阵,我无法指出错误。

#include<iostream>
using namespace std;
int main(){
    int row1,col1,row2,col2,val;
    cin>>row1>>col1>>col2;
    int arr1[row1][col1];
    int arr2[row2][col2];
    int arr3[row1][col2];
    row2=col1;
    for(int i=1;i<=row1;i++){
        for(int j=1;j<=col1;j++){
            cin>>val;
            arr1[row1][col1]=val;
        }
        cout<<endl;
    }
    for(int i=1;i<=row2;i++){
        for(int j=1;j<=col2;j++){
            cin>>val;
            arr1[row2][col2]=val;
        }
        cout<<endl;
    }
    for(int i=1;i<=row1;i++){
       for(int k=1;k<=col2;k++){
          for(int j=1;j<=col1;j++){
                arr3[i][k]+=arr1[i][j]*arr2[j][k];
                cout<<arr3[i][k]<<" ";
            }
            cout<<endl;
        }
     }

}

当您设置矩阵(arr1 和 arr2)时,您使用的索引不正确。

for(int j=1;j<=col1;j++){
    arr1[row1][col1]

应该

for(int j=1;j<=col1;j++){
    arr1[i][j]

此外,如前所述,C 和 C++ go 中的索引从 0 到 N-1,因此您正在访问一个越界值。 你应该使用:

for (int j = 0; j < col1; j++) {
    arr1[i][j]

此外,您设置了两次 arr1,但忘记设置 arr2。

除了已经提到的基于 0 的索引问题之外,在 C++ 中,必须在编译时知道数组的大小。 这是未定义的行为:

int rows,cols;
cin>>rows>>cols;
int arr1[rows][cols]; // 'rows' and 'cols' are only known at runtime

试试这个

int rows, cols;
cin >> rows >> cols;
std::vector<std::vector<int>> mat(rows, std::vector<int>(cols, 0));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM