请输入矩阵A的行数和列数: 2 3
请输入2行3列的矩阵元素:
1 2 3
4 5 6
请输入矩阵B的行数和列数: 3 2
请输入3行2列的矩阵元素:
7 8
9 10
11 12
矩阵相乘的结果为2行2列矩阵:
58 64
139 154
[C++] 纯文本查看 复制代码 #include <iostream>
using namespace std;
// 定义矩阵结构体
struct matrix {
int a[100][100]; // 存储矩阵元素,最大支持100×100
int n, m; // n为行数,m为列数
};
// 矩阵乘法函数
// 参数:A为n×m矩阵,B为m×p矩阵
// 返回:n×p的乘积矩阵
matrix matrix_mul(matrix A, matrix B) {
matrix ret;
ret.n = A.n; // 结果矩阵行数 = A的行数
ret.m = B.m; // 结果矩阵列数 = B的列数
// 初始化结果矩阵为0
for (int i = 0; i < ret.n; i++) {
for (int j = 0; j < ret.m; j++) {
ret.a[i][j] = 0;
}
}
// 矩阵乘法核心计算
for (int i = 0; i < ret.n; i++) { // 结果矩阵的行
for (int j = 0; j < ret.m; j++) { // 结果矩阵的列
for (int k = 0; k < A.m; k++) { // 累加维度(A的列数=B的行数)
ret.a[i][j] += A.a[i][k] * B.a[k][j];
}
}
}
return ret;
}
int main() {
matrix A, B;
// 输入矩阵A
cout << "请输入矩阵A的行数和列数: ";
cin >> A.n >> A.m;
cout << "请输入" << A.n << "行" << A.m << "列的矩阵元素:" << endl;
for (int i = 0; i < A.n; i++) {
for (int j = 0; j < A.m; j++) {
cin >> A.a[i][j];
}
}
// 输入矩阵B
cout << "请输入矩阵B的行数和列数: ";
cin >> B.n >> B.m;
cout << "请输入" << B.n << "行" << B.m << "列的矩阵元素:" << endl;
for (int i = 0; i < B.n; i++) {
for (int j = 0; j < B.m; j++) {
cin >> B.a[i][j];
}
}
// 检查矩阵乘法合法性
if (A.m != B.n) {
// 修复原代码错误:将未定义的STR改为具体错误信息
cout << "错误:矩阵A的列数(" << A.m << ")与矩阵B的行数(" << B.n << ")不相等,无法相乘!" << endl;
} else {
// 计算并输出结果
matrix C = matrix_mul(A, B);
cout << "矩阵相乘的结果为" << C.n << "行" << C.m << "列矩阵:" << endl;
for (int i = 0; i < C.n; i++) {
for (int j = 0; j < C.m; j++) {
if (j != C.m - 1) {
cout << C.a[i][j] << " ";
} else {
cout << C.a[i][j] << endl; // 每行最后一个元素后换行
}
}
}
}
return 0;
}
|