题目:
计算两个矩阵的乘积,第一个是23,第二个是32
输入描述:
输入为两个矩阵,其中一个为23的矩阵,另一个为32的矩阵
输出描述:
一个2*2的矩阵(每一个数字后都跟一个空格)
输入样例:
1 2 3
3 4 5
6 7
8 9
10 11
输出样例:
52 58
100 112
分析:
- 结构体:二维数组存矩阵的每行和每列的元素,需要结构体初始化,方便后面直接定义使用,例如:Matrix ans(x.row, y.col);
- 矩阵乘法要点:ans.matrix[i][j] += x.matrix[i][k] * y.matrix[k][j];
- 打印矩阵
- main函数读取两个矩阵的行和列
代码:
#include <iostream>
#include <cstdio>
//结构体
struct Matrix {
int matrix[3][3]; //这里可以根据题目要算的来定
int row, col;
Matrix(int r,int c):row(r),col(c){}
};
//矩阵乘法
Matrix muti(Matrix x, Matrix y) {
//新建一个矩阵,存结果
Matrix ans(x.row, y.col);
for (int i = 0; i < ans.row; i++) {
for (int j = 0; j < ans.col; j++) {
ans.matrix[i][j] = 0;
for (int k = 0; k < x.col; k++) {
ans.matrix[i][j] += x.matrix[i][k] * y.matrix[k][j];
}
}
}
return ans;
}
//打印输出
void print(Matrix x) {
for (int i = 0; i < x.row; i++) {
for (int j = 0; j < x.col; j++) {
printf("%d ", x.matrix[i][j]);
}
printf("\n");
}
return;
}
int main()
{
//构造两个矩阵,以便输入
Matrix x(2, 3);
Matrix y(3, 2);
//输入
for (int i = 0; i < x.row; i++) {
for (int j = 0; j < x.col; j++) {
scanf("%d", &x.matrix[i][j]);
}
}
for (int i = 0; i < y.row; i++) {
for (int j = 0; j < y.col; j++) {
scanf("%d", &y.matrix[i][j]);
}
}
Matrix ans=muti(x, y);
print(ans);
return 0;
}