C++程序,使两矩阵相乘,要求矩阵大小由用户输入,该如何实现

2024-12-14 14:05:25
推荐回答(3个)
回答1:

这是用类实现的,另一个是模块化的,希望对你有用。
///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
#include
#include
using namespace std;
class Matrix{ //矩阵类
double **p;
int height,width;
public:
Matrix(double **a=0,int b=0,int c=0):height(b),width(c){
p=a;
p=new double*[height];
if(!p){cout<<"未申请到动态内存!";exit(1);}
for(int i=0;i {
p[i]=new double[width];
if(!p){cout<<"未申请到动态内存!";exit(2);}
}
}
Matrix(Matrix& m1){ //拷贝构造函数
height=m1.height;
width=m1.width;
p=new double*[height];
if(!p){cout<<"未申请到动态内存!";exit(1);}
for(int i=0;i {
p[i]=new double[width];
if(!p){cout<<"未申请到动态内存!";exit(2);}
}
for(i=0;i for(int j=0;j p[i][j]=m1.p[i][j];
}
~Matrix(){
for(int i=0;i }
void Input(){
for(int i=0;i for(int j=0;j>p[i][j];
}
Matrix operator*(Matrix&);
Matrix& operator=(Matrix&);
void Output(){
for(int i=0;i for(int j=0;j cout< cout< }
};
Matrix Matrix::operator*(Matrix&M1){
Matrix M(p,height,width);
for(int i=0;i for(int j=0;j M.p[i][j]=p[i][j]*M1.p[i][j];
return M;
}
Matrix& Matrix::operator=(Matrix&M1){
for(int i=0;i for(int j=0;j p[i][j]=M1.p[i][j];
return *this;
}
void main()
{
double **p1=0,**p2=0,**p3=0;
int height,width;
cin>>height>>width;
Matrix M1(p1,height,width),M2(p2,height,width),M3(p3,height,width);
M1.Input();M2.Input();
M3=M1*M2;
M3.Output();
}
////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
#include
#include
void Matrix(int**&arr,int height=0,int width=0){ //动态二维数组
arr=new int*[height];
if(!arr){
cout<<"未申请到动态内存!";exit(1);
}
for(int i=0;i arr[i]=new int[width];
if(!arr[i]){
cout<<"未申请到动态内存!";exit(2);
}
}
}
void DeleteMatrix(int**arr,int height){ //释放动态二维数组
for(int i=0;i delete []arr[i];
delete []arr;
}
int** Product(int**arr1,int**arr2,int**arr3,int height,int width){
for(int i=0;i for(int j=0;j arr3[i][j]=arr1[i][j]*arr2[i][j];
return arr3;
}
void Input(int**arr,int height,int width){
for(int i=0;i for(int j=0;j cin>>arr[i][j];
}
void Output(int**arr,int height,int width){
for(int i=0;i for(int j=0;j cout< cout< }
}
void main()
{
int**arr1=0,**arr2=0,**arr3=0,height,width;
cin>>height>>width;
Matrix(arr1,height,width);
Matrix(arr2,height,width);
Matrix(arr3,height,width);
Input(arr1,height,width);
Input(arr2,height,width);
Product(arr1,arr2,arr3,height,width);
Output(arr3,height,width);
DeleteMatrix(arr1,height);
DeleteMatrix(arr2,height);
DeleteMatrix(arr3,height);
}

回答2:

这个首先你的明确一点,两矩阵要能相称,其中一个矩阵的行数等于另一个矩阵的列数,而其列数等于另一个矩阵的行数。。。
程序就很简单了

回答3:

那要看你如何定义矩阵类