#include<iostream>
#include<vector>
#define int long long
using namespace std;
signed main()
{
int n, m, k;
cin >> n >> m >> k;
vector<vector<int>> v1(n, vector<int>(m)),v2(m,vector<int>(k)),v3(n,vector<int>(k));//使用容器vector定义了三个二维数组,分别存储输入的两个待相乘数组
//和结果数组
for (int i = 0; i < n; ++i)//输入待乘数组v1
{
for (int j = 0; j < m; ++j)
cin >> v1[i][j];
}
for (int i = 0; i < m; ++i)//输入待乘数组v2
{
for (int j = 0; j < k; ++j)
cin >> v2[i][j];
}
for (int i = 0; i < n; ++i)//进行矩阵相乘,并将结果存入v3。
{
for (int j = 0; j < k;++j)
{
for (int a = 0; a < m; ++a)
{
v3[i][j] += v1[i][a] * v2[a][j];
}
}
}
for (int i = 0; i < n; i++)//行序打印v3,元素以空格分隔,行间以endl分隔
{
for (int j = 0; j < k; ++j)
{
cout << v3[i][j];
if (j < k - 1)
cout << ' ';
}
cout << endl;
}
return 0;
}
首先使用了STL中的容器vector辅助开辟二维数组空间;也可以使用malloc代替,只是稍麻烦一些。
之后是存入两个待乘数组,这个操作很简单。
最后的唯一的难点在于两个矩阵相乘的操作,注意使用了三层嵌套的for循环,我们注意到:
两个相乘的矩阵v1和v2,其中v1的列数与v2的行数相同(设为m),这也是矩阵乘法的前提,因此最内层的for循环应该以m结束:for (int a = 0; a < m; ++a),而外边的两层for循环则可以互换位置。