列主元消去法,换行没有成功,也可以帮忙修改一个简单完美的程序出来
#include<stdio.h>#include<math.h>
int main(void)
{
double a[50][50],x[50],temp,sum,s;
int i,j,k,r,n;
printf("请输入线性方程组的系数:\n");
scanf("%d",&n);
printf("请输入线性方程组的元素值:\n");
for(i=0;i<n;i++)
{
for(j=0;j<=n;j++)
scanf("%lf",&a[i][j]);
}
printf("刚才输入的矩阵为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<=n;j++)
{
printf("%10lf",a[i][j]);
}
printf("\n");
}
k=0;
do
{
r=k;
for(i=k;i<n;i++)
{
if(fabs(a[r][k])<fabs(a[i][k]))
r=i;
if(r>k)
for(j=k;j<=n;j++)
{
temp=a[r][j];
a[r][j]=a[k][j];
a[k][j]=temp;
}
}/*交换成功,接下来进行计算*/
for(i=k+1;i<n;i++)
{
s=a[i][k]/a[k][k];
for(j=k;j<=n;j++)
{
a[i][j]=a[i][j]-s*a[k][j];
}
}
k++;
}
while(k<n-1);/*循环结束条件*/
printf("输出计算后的矩阵为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<=n;j++)
{
printf("%10lf",a[i][j]);
}
printf("\n");
}
for(k=n-1;k>=0;k--)
{
sum=0;
for(j=k+1;j<n;j++)
sum+=a[k][j]*x[j];
x[k]=(a[k][n]-sum)/a[k][k];
}
for(k=0;k<n;k++)
printf("x[%d]=%lf\n",k,x[k]);
return 0;
}
书上的例子正确答案应该是:
请输入线性方程组的系数:
3
请输入线性方程组的元素值:
2 1 2 5
5 -1 1 8
1 -3 -4 -4
刚才输入的矩阵为:
2 1 2 5
5 -1 1 8
1 -3 -4 -4
输出计算后的矩阵为:
5 -1 1 8
0 -2.8 -4.2 -5.6
0 0 -0.5 -1