这是在Visual C++6.0环境下编写的,如果要在Turbo C中运行,可要自己多改几下,否则会不知道如何用哦!
#include
#include
#define N 100
#define TOTEL 1e-6
void main( )
{
int i,j,k,n;
double a[N][N],sum,t;
printf("请输入系数矩阵的阶数:");
scanf("%d",&n);
printf("请输入增广矩阵:\n");
for(i=0;i
for(j=0;j
scanf("%lf",&a[i][j]);
for(k=0;k
{
for(i=k+1;i
if(fabs(a[i][k])>fabs(a[k][k])) // 使得a[k][k]为a[i][k](k<=i
for(j=0;j
{
t=a[k][j];
a[k][j]=a[i][j];
a[i][j]=t;
}
if(fabs(a[k][k])
{
printf("对不起,在消去过程中的第%d步因a[%d][%d]足够小而推出!\n",k+1,k,k);
return;
}
for(i=k+1;i
{
a[i][k]=a[i][k]/a[k][k]; // a[k][k]...a[k][j]
for(j=k+1;j
a[i][j]-=a[i][k]*a[k][j];
}
}
if(fabs(a[n-1][n-1])
{
printf("对不起,在消去过程中的第%d步因a[%d][%d]足够小而推出!\n",n,n-1,n-1);
return;
} // 最后一步的主对角线上之元亦不能足够小
a[n-1][n]/=a[n-1][n-1]; //x[n];
for(k=n-2;k>=0;k--) // a[k][k]*x[k]+a[k][k+1]*x[k+1]+...+a[k][n-1]*x[n-1]=a[k][n]通过递推而求
{
sum=0;
for(j=k+1;j
sum+=a[k][j]*a[j][n];
a[k][n]=(a[k][n]-sum)/a[k][k]; // 用a[k][n]表示第k个未知数的值
}
printf("通过列主元Gauss消元法解得:\n");
for(k=0;k
printf("x[%d]=%lf\n",k+1,a[k][n]);
}
编译运行如下:
请输入系数矩阵的阶数:5
请输入增广矩阵:
1 4 3 5 2 2
4 2 3 5 2 4
4 3 5 2 3 3
8 4 3 8 2 5
5 2 3 45 3 6
通过列主元Gauss消元法解得:
x[1]=0.539130
x[2]=-0.191304
x[3]=-6.681159
x[4]=-0.257971
x[5]=11.779710
Press any key to continue