改写矩阵类的C++程序
怎样把这个程序改成有构造函数,而且能构建任意行,列的矩阵#include<iostream>
#include<cmath>
using namespace std;
class Matrix
{
public:
void jiafa();
void jianfa();
void chengfa();
void zhuanzhi();
void ni();
private:
int i;
int j;
float a[100][100],b[100][100],c[100][100];
};
void Matrix::jiafa()
{
int m,n;
cout<<"请输入矩阵的行数:"<<endl
<<"矩阵的列数:"<<endl;
cin>>m>>n;
cout<<"请输入第一个矩阵:"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
cout<<"请输入第二个矩阵:"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>b[i][j];
cout<<"矩阵做加法的结果是:"<<endl;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=a[i][j]+b[i][j];
cout<<c[i][j]<<" ";
}
cout<<endl;
}
}
void Matrix::jianfa()
{
int m,n;
cout<<"请输入矩阵的行数:"<<endl
<<"矩阵的列数:"<<endl;
cin>>m>>n;
cout<<"请输入第一个矩阵:"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
cout<<"请输入第二个矩阵:"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>b[i][j];
cout<<"矩阵做减法的结果是:"<<endl;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=a[i][j]-b[i][j];
cout<<c[i][j]<<" ";
}
cout<<endl;
}
}
void Matrix::chengfa()
{
int m,n,k;
float s;
cout<<"请输入矩阵的行数:"<<endl
<<"矩阵的列数:"<<endl;
cin>>m>>n;
cout<<"请输入第一个矩阵:"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
cout<<"请输入第二个矩阵:"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>b[i][j];
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
s=0;
for(k=0;k<n;k++)
{
s=s+a[i][j]*b[i][j];
c[i][j]=s;
}
}
}
cout<<"矩阵做乘法的结果是:"<<endl;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cout<<c[i][j]<<" ";
}
cout<<endl;
}
}
void Matrix::zhuanzhi()
{
int m,n;
cout<<"请输入矩阵的行数:"<<endl
<<"矩阵的列数:"<<endl;
cin>>m>>n;
cout<<"请输入第一个矩阵:"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
cout<<"矩阵做转置的结果是:"<<endl;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
b[i][j]=a[j][i];
cout<<b[i][j]<<" ";
}
cout<<endl;
}
}
void Matrix::ni()
{
int N;
cout<<"输入矩阵的阶数N: "<<endl;
cin>>N;
float t;
int m;
cout<<"请输入行列式不为0的矩阵A:"<<endl; //矩阵A的各元素存入二维数组a中。
for(i=0;i<N;i++)
for(j=0;j<N;j++)
cin>>a[i][j];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=a[i][j]; //增广矩阵(A|E)存入二维数组b中
for(i=0;i<N;i++)
for(j=N;j<2*N;j++)
b[i][j]=0;
for(i=0;i<N;i++)
b[i][N+i]=1;
for(m=0;m<N;m++) //对每行进行处理。
{
t=b[m][m]; //预存b[m][m]。
i=m;
while(b[m][m]==0)
{
b[m][m]=b[i+1][m];
i++;
}
if(i>m)
{
b[i][m]=t; //实现交换。
//交换其它各列相应位置的元素
for(j=0;j<m;j++)
{
t=b[m][j];
b[m][j]=b[i][j];
b[i][j]=t;
}
for(j=m+1;j<2*N;j++)
{
t=b[m][j];
b[m][j]=b[i][j];
b[i][j]=t;
}
}
for(i=m+1;i<N;i++)
for(j=2*N-1;j>=m;j--)
b[i][j]-=b[i][m]*b[m][j]/b[m][m]; //m=0时,将第一行的-b[i][0]/b[0][0]倍加到以下各行。这样以下每行第一个元素b[i][0]就为0。
for(j=2*N-1;j>=m;j--)
b[m][j]/=b[m][m]; //对第m行作行变换,同除以b[m][m],使b[m][m]为1。
}
m=N-1;
while(m>0)
{
for(i=0;i<m;i++)
for(j=2*N-1;j>=m;j--) //千万注意,此处j必须递减,否则b[i][m]先变为0,后面的计算就无效!
b[i][j]-=b[i][m]*b[m][j];
m--;
}
for(i=0;i<N;i++) //将逆矩阵存入二维数组c中。
for(j=0;j<N;j++)
c[i][j]=b[i][N+j];
cout<<"逆矩阵为:"<<endl;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
cout<<c[i][j]<<" ";
cout<<endl; //实现了:每个i对应一个换行。
}
}
int main()
{
int w;
cout<<" 1.矩阵加法 "<<endl
<<" 2.矩阵减法 "<<endl
<<" 3.矩阵乘法 "<<endl
<<" 4.矩阵转置 "<<endl
<<" 5.矩阵求逆 "<<endl
<<" 6.退出程序 "<<endl
<<" 请输入选择 "<<endl;
cin>>w;
Matrix p;
switch(w)
{
case 1:p.jiafa();break;
case 2:p.jianfa();break;
case 3:p.chengfa();break;
case 4:p.zhuanzhi();break;
case 5:p.ni();break;
case 6:cout<<"退出程序!"<<endl;break;
default:
cout<<"输入错误!请从新输入:"<<endl;
}
return 0;
}
求大神解答啊!