#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
void main()
{
int flag=1;
input(); //输入方程
while(flag)
{
print_menu(); //打印主菜单
}
void print_menu()
{
system("cls");
cout<<"方程系数和常数矩阵表示如下:\n";
for(int j=0;j<length;j++)
cout<<"系数"<<j+1<<" ";
cout<<"\t常数";
cout<<endl;
for(int i=0;i<length;i++)
{
for(j=0;j<length;j++)
cout<<setw(8)<<setiosflags(ios::left)<<a[i][j];
cout<<"\t"<<b[i]<<endl;
}
cout<<" gauss_row()\n";
cout<<"exit\n";
void print_menu(){
system("cls");
cout<<"方程系数和常数矩阵表示如下:\n";
for(int j=0;j<lenth;j++)
cout<<"系数"<<j+1<<" ";
cout<<"\t常数";
cout<<endl;
for(int i=0;i<length;i++)
{
for(j=0;j<length;j++)
cout<<setw(8)<<setiosflags(ios::left)<<a[i][j];
cout<<"\t"<<b[i]<<endl;
}
cout<<" gauss_row()\n";
cout<<"exit\n";
void input()
{ int i,j;
cout<<"方程的个数:3\n";
cin>>length;
if(length>Number)
{
cout<<"It is too big.\n";
return;
}
x=new char[length];
for(i=0;i<length;i++)
x[i]='a'+i;
cout<<3x+2y+z=14<<x+y+z=10<<2x+3y-z=1;
cout<<"请在每个方程里输入"<<length<<"系数和一个常数:\n";
cout<<"例:\n方程:3x+2y+z=14";
for(i=1;i<lenth;i++)
{
cout<<"+"<<i+1<<x[i];
}
cout<<"=10\n";
cout<<"应输入:"<<3x+2y+z=14<<x+y+z=10<<2x+3y-z=1;
for(i=0;i<lenth;i++)
cout<<i+1<<" ";
cout<<"10\n";
cout<<"\n";
for(i=0;i<lenth;i++)
{
cout<<"输入方程:"<<3x+2y+z=14<<x+y+z=10<<2x+3y-z=1;
for(j=0;j<lenth;j++)
cin>>a[i][j];
cin>>b[i];
}
for(i=0;i<length;i++)
for(j=0;j<length;j++)
copy_a[i][j]=a[i][j];
for(i=0;i<length;i++)
copy_b[i]=b[i];
copy_length=length;
}
void gauss_row()
{
int i,j;
gauss_row_xiaoqu(); //用高斯列主元消区法将系数矩阵变成一个上三角矩阵
for(i=0;i<length;i++)
{
for(j=0;j<length;j++)
cout<<setw(10)<<setprecision(5)<<a[i][j];
cout<<setw(10)<<b[i]<<endl;
}
if(a[length-1][length-1]!=0)
{
cout<<"系数行列式不为零,方程有唯一的解:\n";
gauss_calculate();
for(i=0;i<length;i++) //输出结果
{
cout<<x[i]<<"="<<b[i]<<"\n";
}
}
else
cout<<"系数行列式等于零,方程没有唯一的解.\n";
}
void gauss_row_xiaoqu() //高斯列主元消去法
{
int i,j,k,maxi;double lik;
cout<<"用Gauss列主元消去法结果如下:\n";
for(k=0;k<lenth-1;k++)
{
j=k;
for(maxi=i=k;i<lenth;i++)
if(a[i][j]>a[maxi][j]) maxi=i;
if(maxi!=k)
exchange_hang(k,maxi);//
for(i=k+1;i<length;i++)
{
lik=a[i][k]/a[k][k];
for(j=k;j<length;j++)
a[i][j]=a[i][j]-a[k][j]*lik;
b[i]=b[i]-b[k]*lik;
}
}
}