矩阵乘法----c/c++代码
最近在写线性代数,遇到了求矩阵乘法A*B的题目,不想手算,于是写了下面代码。
计算矩阵Ama*na * Bmb*nb 的结果
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
/**
矩阵乘法a*b=c;
*/
//按行输入
void ScanF(int x[][100],int m,int n)
{
for(int i = 1;i <= m; i++)
for(int j = 1;j <= n; j++)
cin>>x[i][j];
}
void Print(int x[][100],int m,int n)
{
for(int i = 1;i <= m; i++)
{
for(int j = 1;j <= n; j++)
cout<<x[i][j]<<" ";
cout<<endl;
}
}
void multiply(int a[][100],int b[][100],int c[][100],int ma,int na,int mb,int nb)
{
int row=0,column=0;
for(int i = 1;i <= ma; i++)
{
row = i;
for(int j = 1;j <= nb; j++)
{
int sum = 0;column=j;
for(int k = 1;k <= mb; k++)
sum += a[i][k]*b[k][j];
c[row][column] = sum;
}
}
}
int main()
{
int a[100][100],b[100][100],c[100][100];
int ma,na,mb,nb;//m行n列
memset(a,sizeof(a),0);
memset(b,sizeof(b),0);
memset(c,sizeof(c),0);
cin>>ma>>na>>mb>>nb; //输入数据保证na=mb;
if(na != mb)
{
cout<<"无法相乘!"<<endl;
return 0;
}
ScanF(a,ma,na);
ScanF(b,mb,nb);
multiply(a,b,c,ma,na,mb,nb);
//Print(a,ma,na);
Print(c,ma,nb);
return 0;
}
测试数据
输入
3 3 3 3
1 2 3
4 5 6
7 8 9
3 2 1
4 5 7
8 3 2
输出
35 21 21
80 51 51
125 81 81