我这里有一个程序 改了好多次 编译和链接都通过了 但是就是运行的时候出现了逻辑错误,情各位帮忙看看,我是新手,不好意思,麻烦各位了,请帮忙看看吧,我相信当你们是初学者的时候也有很多问题需要别人的帮忙,所以就互相鼓励帮忙一下吧 谢谢
#include<iostream>
using namespace std;
class MAT;
istream &operator>>(istream &in,MAT &ma);
ostream &operator<<(ostream &out,MAT &ma);
MAT operator+(MAT ma1,MAT ma2);
MAT operator-(MAT ma1,MAT ma2);
MAT operator*(MAT ma1,MAT ma2);
MAT operator*(int c,MAT ma2);
class MAT
{
int **a;
int m,n;
public:
MAT();
MAT(int x,int y);
int getm();
int getn();
friend istream &operator>>(istream &in,MAT &ma);
friend ostream &operator<<(ostream &out,MAT &ma);
friend MAT operator+(MAT ma1,MAT ma2);
friend MAT operator-(MAT ma1,MAT ma2);
friend MAT operator*(MAT ma1,MAT ma2);
friend MAT operator*(int c,MAT ma2);
virtual ~MAT();
};
#include<iostream>
using namespace std;
#include "MAT.h"
int MAT::getm()
{
return m;
}
int MAT::getn()
{
return n;
}
istream &operator>>(istream &in,MAT &ma)
{
int i,j;
for(i=0;i<ma.getm();i++)
{
for(j=0;j<ma.getn();j++)
{
in>>ma.a[i][j];
}
}
return(in);
}
ostream &operator<<(ostream &out,MAT &ma)
{
int i,j;
for(i=0;i<ma.getm();i++)
{
for(j=0;j<ma.getn();j++)
{
out<<ma.a[i][j]<<" ";
}
out<<endl;
}
return (out);
}
MAT operator+(MAT ma1,MAT ma2)
{
MAT v;
int i,j;
for(i=0;i<ma2.getm();i++)
{
for(j=0;j<ma2.getn();j++)
{
v.a[i][j]=ma1.a[i][j]+ma2.a[i][j];
}
}
return v;
}
MAT operator-(MAT ma1,MAT ma2)
{
MAT v;
int i,j;
for(i=0;i<ma2.getm();i++)
{
for(j=0;j<ma2.getn();j++)
{
v.a[i][j]=ma1.a[i][j]-ma2.a[i][j];
}
}
return v;
}
MAT operator*(MAT ma1,MAT ma2)
{
int i;
int j;
int k;
long lSum=0;
MAT matResult;
if(ma1.getn()!=ma2.getm())
{
cout<<"不能相乘的矩阵"<<endl;
return matResult;
}
else
{
for( i = 0;i<ma1.getm();i++)
{
for( j = 0;j < ma2.getn(); j++)//按照矩阵乘法的规则计算结果矩阵的i*j元素
{
for( k = 0 ;k < ma1.getn();k++)
{
lSum += ma1.a[i][k] * ma2.a[k][j];
}
matResult.a[i][j] = lSum;
lSum = 0;
}
}
return matResult;
}
}
MAT operator*(int c,MAT ma2)
{
MAT v;
int i,j;
for(i=0;i<ma2.getm();i++)
{
for(j=0;j<ma2.getn();j++)
{
v.a[i][j]=c*ma2.a[i][j];
}
}
return v;
}
MAT::MAT(int x,int y)
{
m=x;
n=y;
a=new int *[x];
for(int i=0;i<m;i++)
{
a[i]=new int[y];
}
}
MAT::MAT()
{
}
MAT::~MAT()
{
for(int i=0;i<m;i++)
delete a[i];
delete a;
}
int main()
{
MAT c;
int m,n,m1,n1;
cout<<"请输入矩阵a的行和列:"<<endl;
cin>>m>>n;
MAT a(m,n);
cout<<"请按行输入a矩阵的元素"<<endl;
cin>>a;
cout<<"请输入矩阵b的行和列:";
cin>>m1>>n1;
MAT b(m1,n1);
cout<<"请按行输入b矩阵的元素"<<endl;
cin>>b;
c=a+b;
cout<<c;
c=2*b;
cout<<c;
c=a*b;
cout<<c;
return 0;
}