QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 894|回复: 0
打印 上一主题 下一主题

重要的算法C语言实现源代码3

[复制链接]
字体大小: 正常 放大

398

主题

13

听众

1346

积分

  • TA的每日心情
    慵懒
    2015-12-12 14:33
  • 签到天数: 81 天

    [LV.6]常住居民II

    跳转到指定楼层
    1#
    发表于 2015-8-28 16:46 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    3.高斯列主元消去法,求解其次线性方程组

    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[j]);}
    printf("Now input b(i),i,j=0...%d:\n",n-1);
    for(i=0;i<n;i++)
    scanf("%f",&b);
    for(i=0;i<n-2;i++)
    { for(j=i+1,mi=i,mx=fabs(a[j]);j<n-1;j++)
        if(fabs(a[j])>mx)
        { mi=j;
          mx=fabs(a[j]);
        }
        if(i<mi)
        { tmp=b;b=b[mi];b[mi]=tmp;
          for(j=i;j<n;j++)
          { tmp=a[j];
            a[j]=a[mi][j];
            a[mi][j]=tmp;
          }
        }
        for(j=i+1;j<n;j++)
        { tmp=-a[j]/a;
          b[j]+=b*tmp;
          for(k=i;k<n;k++)
          a[j][k]+=a[k]*tmp;
        }
    }
    x[n-1]=b[n-1]/a[n-1][n-1];
    for(i=n-2;i>=0;i--)
    { x=b;
        for(j=i+1;j<n;j++)
        x-=a[j]*x[j];
        x/=a;
    }
    for(i=0;i<n;i++)
    printf("Answer:\n x[%d]=%f\n",i,x);
    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[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[j]=A[j]-A[k][j]*A[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);
       }
       message();
    }

    exchange(int r,int k)      
    {
    int i;
    for(i=1;i<=n+1;i++)
        A[0]=A[r];
    for(i=1;i<=n+1;i++)
        A[r]=A[k];
    for(i=1;i<=n+1;i++)
        A[k]=A[0];
    }

    float max(int k)         
    {
    int i;
    float temp=0;
    for(i=k;i<=n;i++)
        if(fabs(A[k])>temp)
        {
          temp=fabs(A[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();}
    }
    }



    关于本帖内容欢迎大家踊跃讨论,与在下交流!

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-11-10 19:48 , Processed in 0.930857 second(s), 53 queries .

    回顶部