行列式求值的算法

梦里伊人 posted @ 2007年8月04日 06:29 in c语言笔记 , 1688 阅读
  1. #include<stdio.h>
  2. #include<malloc.h>
  3.  
  4. float A(float **a,int m)
  5. {
  6.       int i,j,c,k,l,t,u;
  7.       float **b,g,h,f;
  8.       u=m-1;
  9.       b=malloc(u*sizeof(float *));
  10.       for(i=0;i<u;i++)
  11.             b[i]=malloc(u*sizeof(float));
  12.       f=0;
  13.       t=-1;
  14.       for(c=0;c<m;c++)
  15.       { 
  16.              g=a[0][c];
  17.              for(k=0,i=1;i<m,k<u;i++)
  18.              { 
  19.                    for(l=j=0;j<m,l<u;j++)
  20.                    { 
  21.                          if(j==c)
  22.                          continue;
  23.                          b[k][l]=a[i][j];
  24.                          l++;//注意:该语句在此处与在for语句中的差别,后者为什么不对。
  25.                    }
  26.                    k++;
  27.              }
  28.              t=t*(-1);
  29.              if(u==0)
  30.                    h=1;
  31.              else
  32.                    h=A(b,u);
  33.                    f+=t*g*h;
  34.       }
  35.       return f;
  36. }
  37.  
  38. int main(void)
  39. {
  40.    int i,j,n;
  41.    float k;
  42.    float **a;
  43.    printf("n=");
  44.    scanf("%d",&n);
  45.    a=malloc(n*sizeof(float *));
  46.    for(i=0;i<n;i++)
  47.          a[i]=malloc(n*sizeof(float));
  48.    for(i=0;i<n;i++)
  49.    {
  50.          for(j=0;j<n;j++)
  51.          {
  52.                printf("a[%d][%d]=",i,j);
  53.                scanf("%f",&a[i][j]);
  54.          }
  55.          printf("\n");
  56.    }
  57.    k=A(a,n);
  58.    printf("|A|=%5.1f\n",k);
  59.    return 0;
  60. }
  61.  

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter