大家帮帮忙啊!一个用列主元消去法求解线性方程组的程序,不知道哪儿出问题啦,求不出正确解!
下面是我的源程序, 应该没有什么问题啊,我是按数学步骤一步一步来的,不知道哪儿错啦,用Turboc 2.0来跟踪,也查不出来为什么会是0呢?高手来看看啊,到底是哪儿的问题?
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define MAX 100
void main()
{
double A[MAX][MAX]={0};
double S,temp,L;
int N,i,j,k,r;
printf("Please input the N: "); //输入方程组阶数N
scanf("%ld", &N);
for(i=1;i<=N; i++) //输入增广矩阵A
for(j=1;j<=N+1; j++)
scanf("%ld", &A[i][j]);
printf("\n\n");
for(i=1;i<=N; i++)
{
for(j=1;j<=N; j++)
printf(" %ld ", A[i][j]); //在这里时,还是我输入的值
printf("\n");
}
k=1;
for(k=1;k<=N-1;k++) //选主元
{
S=A[k][k]; r=k; //但是在这里,跟踪时就是0值,不知道为什么,
i=k+1;
do
{
if(S<A[i][k])
{
S=A[i][k];
r=i;
}
i++;
}while(i==N);
printf("The S is %ld, R is %d", S, r); //这里输入的S又不是零
printf("\n\n");
if(S==0)
{
printf("\n\nS is %ld", S);
exit(0);
}
if(r==k)
{
for(;j<=N+1;j++)
{
temp=A[k][j]; //可是在这里参与交换的A[k][j]就是0值,这又是为什么啊? 怎么会这样呢? 不明白
A[k][j]=A[r][j];
A[r][j]=temp;
}
}
else
{
j=k;
for(;j<=N+1;j++)
{
temp=A[k][j];
A[k][j]=A[r][j];
A[r][j]=temp;
}
}
for(i=1;i<=N; i++)
{
for(j=1;j<=N; j++)
printf(" %ld", A[i][j]);
printf("\n");
}
i=k+1;
for(;i<=N;i++) //消元
{
L=A[i][k]/S;
printf("\n\nThe compare is : %ld",L);
j=k;
for(j;j<=N+1;j++)
{
A[i][j]=A[i][j]-L*A[k][j];
}
}
printf("\n\n");
for(i=1;i<=N; i++)
{
for(j=1;j<=N; j++)
printf(" %ld", A[i][j]);
printf("\n");
}
}
//下面是回代
A[N][N+1]/=A[N][N];
i=N-1;
for(i;i==1;i--)
{
S=0;
j=i+1;
do
{
S+=A[i][j]*A[j][N+1];
j++;
}while(j==N);
A[i][N+1]=(A[i][N+1]-S)/A[i][i];
}
for(k=1;k<=N;k++) //打印结果
printf(" %ld ",A[k][N+1]);
printf("\n\n");
}