高斯约当消元法解线性方程组
要求用c++编写 要用到类和类的派生#include<iostream>
#include<cmath>
#include<iomanip>
#define kk 50 //定义最大方程元数
int n;
using namespace std;
void changer(double *p,double *q);
main()
{
int i,j,k,s;
double A[kk][kk],r,l[kk][kk],b[kk],u,temp;
aa: cout<<"输入的方程元数"<<endl;
cin>>n;
cout<<"请输入方程系数矩阵:"<<"\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>A[i][j];
cout<<"请输入右边向量:"<<"\n";
for(i=0;i<n;i++)
cin>>b[i];
for(k=0;k<n-1;k++)
{
s=k;
r=fabs(A[k][k]);
for(i=k;i<n;i++)
if(r<fabs(A[i][k]))
{
r=fabs(A[i][k]);
s=i;
}//获取主元
if(s!=k)
{
changer(*(A+k),*(A+s));//交换行元素
temp=b[k];b[k]=b[s];b[s]=temp; //右边向量的交换
}
cout<<"第"<<k+1<<"次选取主元并交换行的顺序"<<endl;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
cout<<setw(4)<<setprecision(4)<<A[i][j]<<" ";
cout<<b[i]<<endl;
}//
cout<<endl;
for(i=k+1;i<n;i++)
{
l[i][k]=A[i][k]/A[k][k];//计算消去系数
for(j=k;j<n;j++)
A[i][j]=A[i][j]-l[i][k]*A[k][j];
b[i]=b[i]-l[i][k]*b[k];
}//消元过程
cout<<"第"<<k+1<<"次消元"<<endl;
for (int e=0;e<n;e++)
{
for (j=0;j<n;j++)
cout<<setw(4)<<setprecision(4)<<A[e][j]<<" ";
cout<<b[e]<<endl;
}
cout<<endl;
}
if(A[k][k]<0.0001)
{
cout<<"系数矩阵是非奇异矩阵!"<<"\n";
cout<<"所以:方程无唯一解!"<<"\n";
cout<<"请问是否?"<<endl;
cout<<"退出请输入1"<<endl;
cout<<"要继续请输入任意非1的整数"<<endl;
int g;
cin>>g;
if(g!=1)goto aa;
else exit(1);
}//判断系数矩阵的奇异性
for(i=n-1;i>=0;i--)
{
u=0;
for(j=i+1;j<n;j++)
u=u+A[i][j]*b[j];
b[i]=(b[i]-u)/A[i][i];
}
cout<<"最后得方程的根为:"<<"\n";
for(i=0;i<n;i++)
cout<<"x"<<i+1<<"="<<b[i]<<"\n";
system("pause");
return 0;
}
void changer(double *p,double *q)
{
int i;
double temp;
for(i=0;i<n;i++)
{
temp=*(p+i);
*(p+i)=*(q+i);
*(q+i)=temp;
}
}
哪位大大给我改写下子嘛 类的使用我不太熟悉额