A[4][6],B[6][4]。A*B
C[3][4],D[4][3],C*D。
我问过别人,说是用指针,小弟不才,望高手指教!!
小弟不甚感激!!!有源码更好!!!
#include<iostream.h>
#include<math.h>
class A
{
public:
A()
{
int i,j,k;
cout<<"请输入矩阵的行数和列数: ";
cin>>go>>row;
elem=new double *[go];
for(i=0;i<go;i++)
elem[i]=new double[row];
cout<<"请输入矩阵的元素."<<endl;
for(j=0;j<go;j++)
{
cout<<"请输入第"<<j+1<<"行的"<<row<<"个数:";
for(k=0;k<row;k++)
cin>>elem[j][k];
}
}
A(int i,int j)
{
go=i;row=j;
elem=new double *[i];
for(int k=0;k<go;k++)
elem[k]=new double[j];
}
A(A &a1)
{
go=a1.go;
row=a1.row;
elem=new double *[go];
for(int i=0;i<go;i++)
elem[i]=new double[row];
int k,l;
for(k=0;k<go;k++)
for(l=0;l<row;l++)
elem[k][l]=a1.elem[k][l];
}
~A()
{
for(int i=0;i<go;i++)
{
delete elem[i];
}
delete elem;
}
void print()
{
int i,j;
for(i=0;i<go;i++)
{
for(j=0;j<row;j++)
cout<<elem[i][j]<<' ';
cout<<endl;
}
}
int getgo()
{
return go;
}
int getrow()
{
return row;
}
friend A operator *(A &a1,A &a2);
A & A::operator =(A &a1);
private:
int go,row;
double **elem;
};
A & A::operator =(A &a1)
{
if(this==&a1)
return *this;
else
{
for(int i=0;i<go;i++)
{
delete elem[i];
}
delete elem;
go=a1.go;
row=a1.row;
elem=new double *[go];
for(i=0;i<go;i++)
elem[i]=new double[row];
int t,u;
for(t=0;t<a1.go;t++)
{
for(u=0;u<a1.row;u++)
elem[t][u]=a1.elem[t][u];
}
return *this;
}
}
A operator *(A &a1,A &a2)
{
A a3(a1.getgo(),a2.getrow());
int t,u,c;
for(t=0;t<a1.go;t++)
{
for(u=0;u<a2.row;u++)
{
a3.elem[t][u]=0;
for(c=0;c<a1.row;c++)
a3.elem[t][u]+=a1.elem[t][c]*a2.elem[c][u];
}
}
return a3;
}
void main()
{
A a1,a2,a3(0,0);
if(a1.getrow()==a2.getgo())
{
cout<<"两个矩阵的积为:"<<endl;
a3=a1*a2;
a3.print();
}
else
cout<<"因为第一个矩阵的列不等于第二个矩阵的行,所以两矩阵无法相乘。"<<endl;
}