C++程序,使两矩阵相乘,要求矩阵大小由用户输入,该如何实现
展开全部
这是用类实现的,另一个是模块化的,希望对你有用。
///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
#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);
}
///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
#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);
}
展开全部
这个首先你的明确一点,两矩阵要能相称,其中一个矩阵的行数等于另一个矩阵的列数,而其列数等于另一个矩阵的行数。。。
程序就很简单了
程序就很简单了
追问
这一点我知道,我问的是。矩阵的行和列的大小是由用户来定的,该如何实现
追答
那你就定义函数嘛,这样可以不再主函数里实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那要看你如何定义矩阵类
更多追问追答
追问
比如说我定义的是矩阵mat[i][j],在使用for循环时,for<n,n是由用户决定的。而且我用的是是模块化,各个函数的作用分开,不在main函数里面,所以就要求n有全局的作用
追答
直接写一个函数呗,输出用户所需要的矩阵;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询