初学者做的求解方程组,有奇怪的问题
#include<iostream>using namespace std;
class fangcheng
{
public:int default_x=0;
//这句为什么不对啊,放在开头用 define就好使呢
double xishu[default_x][default_x+1];
fangcheng()
{
cin>>default_x;
for(int i=0;i<default_x;i++)
{
cout<<"请输入第 "<<(i+1)<<" 个方程的系数:"<<endl;
for(int j=0;j<default_x+1;j++)
cin>>xishu[i][j];
}
}
void jiaohuan(int x,int y)
{
double r;
for(int i=0;i<default_x+1;i++)
{
r=xishu[x][i];
xishu[x][i]=xishu[y][i];
xishu[y][i]=r;
}
}
void output()
{
int i;
cout<<endl<<"方程组:"<<endl;
for(i=0;i<default_x;i++)
{
cout<<endl<<"第 "<<(i+1)<<" 个方程:";
for(int j=0;j<default_x+1;j++)
cout<<xishu[i][j]<<" ";
}
cout<<endl;
}
bool bianhuaxia(int x)
{
int r,i;
// cout<<"变化 第"<<x<<" 列"<<endl;
if(x<=default_x)
{
for(i=x-1;i<default_x;i++)
{
// cout<<"i="<<i<<endl;
if(!(xishu[i][x-1]>-1e-6&&xishu[i][x-1]<1e-6))
{
// cout<<"xishu["<<i<<"]["<<(x-1)<<"] = "<<xishu[i][x-1]<<endl;
if((i>x-1)&&(i<default_x))
{
// cout<<"交换 "<<x-1<<","<<i<<endl;
jiaohuan(x-1,i);
}
return true;
}
}
return false;
}
else
{
cout<<"\nError: bianhuaxia :x-->"<<x<<endl;
return false;
}
}
void add(int x1,double n,int x2)
{
for(int i=0;i<default_x+1;i++)
{
xishu[x2][i]+=xishu[x1][i]*n;
}
}
void mul(int x,double n)
{
for(int i=0;i<default_x+1;i++)
{
xishu[x][i]*=n;
}
}
bool movexia()
{
for(int i=0;i<default_x;i++)
{
if(bianhuaxia(i+1))
{
for(int j=i+1;j<default_x;j++)
{
add(i,(-1)*xishu[j][i]/xishu[i][i],j);
}
}
else
{
cout<<"无解"<<endl;
return false;
}
}
return true;
}
void moveshang()
{
if(movexia())
{
for(int i=default_x-1;i>=0;i--)
{
if(xishu[i][i]!=1)
mul(i,1/xishu[i][i]);
for(int j=i-1;j>=0;j--)
{
add(i,(-1)*xishu[j][i]/xishu[i][i],j);
}
}
}
}
};
int main()
{
cout<<"请输入方程组阶数:"<<endl;
int x;
cin>>x;
if(x>0)
{
fangcheng a;
a.output();
a.moveshang();
a.output();
}
else
{
cout<<"方程组个数少于一个"<<endl;
}
cout<<endl<<endl<<"输入BYE关闭程序"<<endl;
string s;
cin>>s;
while(s!="BYE")
{
cin>>s;
}
return 1;
}