农业推广体系:谁有高斯消元法的程序用C语言实现的?如果给我发一份,我会给他很高的悬赏分。

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 06:54:44

//这是C++的程序,用文件输入输出
#include<iostream.h>
#include<fstream.h>
#include<math.h>
#include<stdlib.h>

void init(double[100][100],int &);
void work(double[100][100],int);
void pr(double[100][100],int);

void main()
{
double x[100][100];
int n;
init(x,n);
work(x,n);
pr(x,n);
}

void init(double x[100][100],int &n)
{
ifstream infile;
infile.open("equations.in",ios::in);
infile>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++)
infile>>x[i][j];
infile.close();
}

void work(double x[100][100],int n)
{
int q[100],p,i,j,k;
double min,l;
for(i=0;i<n;i++)
q[i]=0;
for(k=0;k<n;k++)
{
p=-1;
min=10000;
for (i=0;i<n;i++)
if (!q[i] && x[i][k]!=0 && min-1e-10>fabs(x[i][k]))
{
min=fabs(x[i][k]);
p=i;
}
if (p==-1)
{
ofstream outfile;
outfile.open("equations.out",ios::out);
outfile<<"这个方程组无解或有无穷个解。"<<endl;
outfile.close();
exit(0);
}
else
q[p]=1;
for(i=0;i<n;i++)
if (i!=p)
{
l=x[i][k]/x[p][k];
for(j=0;j<n+1;j++)
x[i][j]=x[i][j]-l*x[p][j];
}
}
}

void pr(double x[100][100],int n)
{
ofstream outfile;
outfile.open("equations.out",ios::out);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if (fabs(x[i][j])>1e-10)
{
outfile<<"x["<<i+1<<"]="<<x[i][n]/x[i][j]<<endl;
break;
}
outfile.close();
}