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

 我来答
罗杰Rodger
2012-06-07 · 超过11用户采纳过TA的回答
知道答主
回答量:28
采纳率:66%
帮助的人:20.1万
展开全部
这是用类实现的,另一个是模块化的,希望对你有用。
///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
#include<iostream>
#include<cstdlib>
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<height;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<height;i++)
{
p[i]=new double[width];
if(!p){cout<<"未申请到动态内存!";exit(2);}
}
for(i=0;i<height;i++)
for(int j=0;j<width;j++)
p[i][j]=m1.p[i][j];
}
~Matrix(){
for(int i=0;i<height;i++) delete []p[i];delete []p;
}
void Input(){
for(int i=0;i<height;i++)
for(int j=0;j<width;j++) cin>>p[i][j];
}
Matrix operator*(Matrix&);
Matrix& operator=(Matrix&);
void Output(){
for(int i=0;i<height;i++)
for(int j=0;j<width;j++)
cout<<p[i][j]<<'\t';
cout<<endl;
}
};
Matrix Matrix::operator*(Matrix&M1){
Matrix M(p,height,width);
for(int i=0;i<height;i++)
for(int j=0;j<width;j++)
M.p[i][j]=p[i][j]*M1.p[i][j];
return M;
}
Matrix& Matrix::operator=(Matrix&M1){
for(int i=0;i<height;i++)
for(int j=0;j<width;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<iostream.h>
#include<cstdlib>
void Matrix(int**&arr,int height=0,int width=0){ //动态二维数组
arr=new int*[height];
if(!arr){
cout<<"未申请到动态内存!";exit(1);
}
for(int i=0;i<height;i++){
arr[i]=new int[width];
if(!arr[i]){
cout<<"未申请到动态内存!";exit(2);
}
}
}
void DeleteMatrix(int**arr,int height){ //释放动态二维数组
for(int i=0;i<height;i++)
delete []arr[i];
delete []arr;
}
int** Product(int**arr1,int**arr2,int**arr3,int height,int width){
for(int i=0;i<height;i++) //矩阵乘积
for(int j=0;j<width;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<height;i++)
for(int j=0;j<width;j++)
cin>>arr[i][j];
}
void Output(int**arr,int height,int width){
for(int i=0;i<height;i++){
for(int j=0;j<width;j++)
cout<<arr[i][j]<<'\t';
cout<<endl;
}
}
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);
}
浪漫10O天
2012-06-02
知道答主
回答量:63
采纳率:0%
帮助的人:10.7万
展开全部
这个首先你的明确一点,两矩阵要能相称,其中一个矩阵的行数等于另一个矩阵的列数,而其列数等于另一个矩阵的行数。。。
程序就很简单了
追问
这一点我知道,我问的是。矩阵的行和列的大小是由用户来定的,该如何实现
追答
那你就定义函数嘛,这样可以不再主函数里实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e35feca
2012-06-02
知道答主
回答量:32
采纳率:0%
帮助的人:12.9万
展开全部
那要看你如何定义矩阵类
更多追问追答
追问
比如说我定义的是矩阵mat[i][j],在使用for循环时,for<n,n是由用户决定的。而且我用的是是模块化,各个函数的作用分开,不在main函数里面,所以就要求n有全局的作用
追答
直接写一个函数呗,输出用户所需要的矩阵;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式