📄 gauss消去法解线性方程组.txt
字号:
#include <stdio.h>
#include <malloc.h>
#include <math.h>
int SoLinQ(int n,float *matrix,float esp)
{
float m,sum,*temp,*x;
int i,j,k,add;
temp=(float *)malloc((n+1)*sizeof(float));
x=(float *)malloc(n*sizeof(float));
for(i=0;i<n;i++)
{
if(fabs(matrix[i*(n+1)+i])<=esp)
{
for(j=i+1;j<n;j++)
if(fabs(matrix[j*(n+1)+i])>esp)
{
for(k=0;k<=n;k++)
{
temp[k]=matrix[i*(n+1)+k];
matrix[i*(n+1)+k]=matrix[j*(n+1)+k];
matrix[j*(n+1)+k]=temp[k];
}
break;
}
if(fabs(matrix[i*(n+1)+i])<=esp)
{
if(i==n-1)
{
free(temp);
free(x);
return 0;
}
free(temp);
free(x);
return 1;
}
}
for(j=i+1;j<n;j++)
{
m=matrix[j*(n+1)+i]/matrix[i*(n+1)+i];
for(k=0;k<=n;k++)
matrix[j*(n+1)+k]-=m*matrix[i*(n+1)+k];
}
}
for(i=0;i<n;i++)
for(j=0;j<=n;j++)
{
printf("%f ",matrix[i*(n+1)+j]);
if(j==n) printf("\n");
}
for(k=n-1;k>=0;k--)
{
sum=matrix[k*(n+1)+n];
for(add=1;k+add<n;add++)
sum-=matrix[k*(n+1)+k+add]*x[k+add];
x[k]=sum/matrix[k*(n+1)+k];
}
for(i=0;i<n;i++)
printf("x%d=%f\n",i,x[i]);
free(temp);
free(x);
return 2;
}
void main()
{
float *matrix;
int i,n,sign;
printf("Please input the number of vars of the equation: ");
scanf("%d",&n);
matrix=(float *)malloc(n*(n+1)*sizeof(float));
printf("Please input the of");
for(i=0;i<n*(n+1);i++)
scanf("%f",&matrix[i]);
sign=SoLinQ(n,matrix,1e-5);
switch(sign)
{
case 0:printf("There is no only result!");break;
case 1:printf("It's a invalid equation!");break;
case 2:printf("The results are printed!");
}
free(matrix);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -