题目内容:
编写函数,使用指针传递和指针运算,实现两个矩阵的乘积。
编写主程序,输入两个矩阵,调用函数计算它们的乘积,在主函数中输出计算结果。每个矩阵的元素总个数不超过100,但行数、列数不定。矩阵元素为整数。
输入格式:
先输入两个整数,表示矩阵的行数和列数,然后按行输入第一个矩阵的元素。
再输入两个整数,表示第二个矩阵的行数和列数,然后按行输入第二个矩阵的元素。
输入保证第一个矩阵的列数和第二个矩阵的行数相等。
输出格式:
两个矩阵的乘积,按行、列显示,每行末尾无空格。
输入样例:
2 3
1 1 0
2 1 1
3 2
1 2
2 1
1 0
输出样例:
3 3
5 5
#include <iostream>
using namespace std;
void cul(int **a,int **b,int **c,int m,int n,int x,int y)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<y;j++)
{
for(int k=0;k<n;k++)
{
c[i][j]+=a[i][k]*b[k][j];
//cout<<a[i][k]<<"*"<<b[k][j]<<endl;
}
}
}
}
int main()
{
int **a,**b,**c;//指向指针的指针
int m,n,x,y;
//第一个数组
cin>>m>>n;//m行n列
a=new int *[m];
for(int i=0;i<m;i++)
a[i]=new int[n];//a的每一行都是一个长度为n的一维数组
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cin>>*(*(a+i)+j);
}
//第二个数组
cin>>x>>y;
b=new int *[x];//int指针数组
for(int i=0;i<x;i++)
b[i]=new int[y];
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
cin>>*(*(b+i)+j);
}
//第三个数组,用来存放最终结果
c=new int *[m];
for(int i=0;i<m;i++)
c[i]=new int[y];
for(int i=0;i<m;i++)
{
for(int j=0;j<y;j++)
*(*(c+i)+j)=0;
}
cul(a,b,c,m,n,x,y);//相乘
for(int i=0;i<m;i++)
{
cout<<*(*(c+i)+0);
for(int j=1;j<y;j++)
cout<<" "<<*(*(c+i)+j);
cout<<endl;
}
//释放空间
for(int i=0;i<m;i++)
delete []a[i];
for(int i=0;i<x;i++)
delete []b[i];
for(int i=0;i<m;i++)
delete []c[i];
delete []a;delete []b;delete []c;
return 0;
}