📄 gauss(4).txt
字号:
#include <stdio.h>
#include <math.h>
#define N 20
int n;
void input(float a[][N+2])
{
int i,j;
printf("input like this:\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("a[%d][%d] ",i,j);
printf("b[%d]\n",i);
}
for(i=1;i<=n;i++)
for(j=1;j<=n+1;j++)
scanf("%f",&a[i][j]);
}
void copy(float a[][N+2],float b[][N+2])
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n+1;j++)
b[i][j]=a[i][j];
}
void sort(float a[][N+2],int i)
{
int j,max_i;
float max,temp;
max=a[i][i];
max_i=i;
for(j=i+1;j<=n;j++)
if(fabs(a[j][i])>fabs(max))
{max=a[j][i];max_i=j;}
if(max_i!=i)
for(j=i;j<=n+1;j++)
{temp=a[i][j];a[i][j]=a[max_i][j];a[max_i][j]=temp;}
}
void calculate(float a[][N+2])
{
int i,m,j;
float l;
for(i=1;i<n;i++)
{
sort(a,i);
for(m=i+1;m<=n;m++)
{
l=a[m][i]/a[i][i];
for(j=i+1;j<=n+1;j++)
a[m][j]-=l*a[i][j];
}
}
}
void back(float a[][N+2],float *x)
{
int i,j;
float sum;
for(i=n;i>0;i--)
{
sum=0;
for(j=i+1;j<=n;j++)
sum+=a[i][j]*x[j];
x[i]=(a[i][n+1]-sum)/a[i][i];
}
}
void output(float *x)
{
int i;
for(i=1;i<=n;i++)
printf("x%d=%f ",i,x[i]);
printf("\n");
}
void check(float b[][N+2],float *x)
{
int i,j;
float sum;
for(i=1;i<=n;i++)
{
sum=0;
for(j=1;j<=n+1;j++)
{
if(j<=n)
{
sum+=b[i][j]*x[j];
if(j==n) printf("%.3f*x%d",b[i][j],j);
else printf("%.3f*x%d+",b[i][j],j);
}
else printf("=%f",sum);
}
printf("\n");
}
}
main()
{
int i;
float a[N+1][N+2],x[N],b[N+1][N+2];
while(1){
clrscr();
printf("input n(0-%d,0:exit):",N);
do{
scanf("%d",&n);
if(n==0) return 0;
if(n<0||n>N) printf("error,input again(0-%d,0:exit):",N);
}while(n<0||n>N);
input(a);
copy(a,b);
calculate(a);
back(a,x);
output(x);
check(b,x);
getch();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -