高斯列主元消去法,求解齐次线性方程组的C语言实现

RT

C/C++ code #include<stdio.h> #include <math.h> #define N 20 int main() { int n,i,j,k; int mi,tmp,mx; float a[N][N],b[N],x[N]; printf("\nInput n:"); scanf("%d",&n); if(n>N) { printf("The input n should in(0,N)!\n");     getch();     return 1; } if(n<=0) { printf("The input n should in(0,N)!\n");     getch();     return 1; } printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++) { for(j=0;j<n;j++)     scanf("%f",&a[i][j]);} printf("Now input b(i),i,j=0...%d:\n",n-1); for(i=0;i<n;i++) scanf("%f",&b[i]); for(i=0;i<n-2;i++) { for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++)     if(fabs(a[j][i])>mx)     { mi=j;       mx=fabs(a[j][i]);     }     if(i<mi)     { tmp=b[i];b[i]=b[mi];b[mi]=tmp;       for(j=i;j<n;j++)       { tmp=a[i][j];         a[i][j]=a[mi][j];         a[mi][j]=tmp;       }     }     for(j=i+1;j<n;j++)     { tmp=-a[j][i]/a[i][i];       b[j]+=b[i]*tmp;       for(k=i;k<n;k++)       a[j][k]+=a[i][k]*tmp;     } } x[n-1]=b[n-1]/a[n-1][n-1]; for(i=n-2;i>=0;i--) { x[i]=b[i];     for(j=i+1;j<n;j++)     x[i]-=a[i][j]*x[j];     x[i]/=a[i][i]; } for(i=0;i<n;i++) printf("Answer:\n x[%d]=%f\n",i,x[i]); getch(); return 0; } #include<math.h> #include<stdio.h> #define NUMBER 20 #define Esc   0x1b #define Enter 0x0d float A[NUMBER][NUMBER+1] ,ark; int flag,n; exchange(int r,int k); float max(int k); message(); main() {    float x[NUMBER];        int r,k,i,j;    char celect;    clrscr();      printf("\n\nUse Gauss.");    printf("\n\n1.Jie please press Enter.");    printf("\n\n2.Exit press Esc.");    celect=getch();    if(celect==Esc)      exit(0);    printf("\n\n input n=");    scanf("%d",&n);      printf(" \n\nInput matrix A and B:");    for(i=1;i<=n;i++)    {     printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);            for(j=1;j<=n+1;j++)        scanf("%f",&A[i][j]);    }    for(k=1;k<=n-1;k++)                         {    ark=max(k);     if(ark==0)                      {       printf("\n\nIt's wrong!");message();     }     else if(flag!=k)      exchange(flag,k);      for(i=k+1;i<=n;i++)      for(j=k+1;j<=n+1;j++)      A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];    }    x[n]=A[n][n+1]/A[n][n];    for( k=n-1;k>=1;k--)    {      float me=0;      for(j=k+1;j<=n;j++)      {        me=me+A[k][j]*x[j];      }        x[k]=(A[k][n+1]-me)/A[k][k];    }    for(i=1;i<=n;i++)    {      printf(" \n\nx%d=%f",i,x[i]);    }    message(); } exchange(int r,int k)      { int i; for(i=1;i<=n+1;i++)     A[0][i]=A[r][i]; for(i=1;i<=n+1;i++)     A[r][i]=A[k][i]; for(i=1;i<=n+1;i++)     A[k][i]=A[0][i]; } float max(int k)         { int i; float temp=0; for(i=k;i<=n;i++)     if(fabs(A[i][k])>temp)     {       temp=fabs(A[i][k]);       flag=i;     } return temp; } message()                                    { printf("\n\n Go on Enter ,Exit press Esc!"); switch(getch()) {    case Enter: main();    case Esc: exit(0);    default:{printf("\n\nInput error!");message();} } }
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网