亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言解線性方程的四種方法

2020-01-26 15:42:20
字體:
來源:轉載
供稿:網友
發了好幾天編了個解線性方程組的小程序,可第一次實戰就大敗而歸。經過半天的調試,仍找不出糾正的方法。因為并不是算法的問題,而是因為自己對編譯器處理 浮點函數的方法不是很理解。明明D=0的方陣解出來不等于0了,跟蹤調試發現,計算過程程序對數據進行了舍去處理,導致最終結果不對。不過如果沒有浮點型 的話,這個程序應該算不錯了 。

復制代碼 代碼如下:

#include<stdio.h>
#include<math.h>
#include<mem.h>
#define NUM 100
void print(void)     /* 使用說明 */
      { clrscr();
        printf("/n/n/n/n/n/t/t/t/t Introduction /n");
        printf("/t*--------------------------------------------------------------*/n");
        printf("/t*    This program was design for compute linear equations.       */n");
        printf("/t*    The way of use it is very simple.                           */n");
        printf("/t*    First : Input the number of the equation;(Input 0 to exit) */n");
        printf("/t*    Second: Input the coefficient of every eqution;             */n");
        printf("/t*    Third : Input the constant of every eqution;                */n");
        printf("/t*    Last : Chose the way you want use to solve the equtions; */n");
        printf("/t*    That's all, input any key to run it . . .                   */n");
        printf("/t*-------------------------By__TJX------------------------------*/n");
        getch(); }

void chose(void)    /*選擇計算方法*/
    { clrscr();
       fflush(stdin);
        printf("/n/n/n/n/n/t/t**********Introduction********** /n");
                  printf("/t/t* Chose the way,please.        * /n");
                  printf("/t/t* a : Gauss eliminant.         * /n");
                  printf("/t/t* b : Gauss_yd eliminant.      * /n");
          printf("/t/t* c : Iterative way.           * /n");
                  printf("/t/t* d : Cramer way.              * /n");
                  printf("/t/t* e : exit.                    * /n");              
                  printf("/t/t*************By__TJX************ /n");
                  printf("/t/tPlease choose number :/n");}

void input(double **a1,double b1[],int num)    /*數據輸入*/
     { int i,j,t;
       double *p;
       char de1,de2;
do{
     printf("Please input array a[%d][%d]: /n",num,num);
     printf("Warn: The first number of the array mustn't contain zero! /n");
    for(i=1;i<=num;i++)
      {printf("Please input array a[%d][]: /n",i);
       for(j=1;j<=num;j++)
       {t=0;
         if(i==1&&j==1)
          { do{
           if(t==0) { scanf("%lf",&a1[i][j]); t++;}
            else {printf("The input is invalid,please input again:/n"); scanf("%f",&a1[i][j]);}
           }while(a1[i][j]==0);}
         else scanf("%lf",&a1[i][j]);}}
      printf(" /nPlease check the value of array a[%d][%d],press Y to input again./n",num,num);
      do{
         de1=getch();
         }while(de1!='y'&&de1!='Y'&&de1!='n'&&de1!='N');
    }while(de1=='y'||de1=='Y');
    do{
       printf("Please input array b[%d]: /n",num);
       p=b1+1;
       for(i=1;i<=num;i++)
        scanf("%lf",p++);
       printf(" /nPlease check the value of array b[%d],press Y to input again./n",num);
        do{
         de2=getch();
         }while(de2!='y'&&de2!='Y'&&de2!='n'&&de2!='N');
    }while(de2=='y'||de2=='Y');}

 
int max(double *t1, double x1[],int n)    /*迭代子函數*/
     { int i,temp=0;
           for(i=1;i<=n;i++)
          if(fabs(x1[i]-t1[i])>1e-2) {temp=1;break;}
     /* printf("    %d    ",temp); */
          return temp;
     }

int ddcompute(double **a1,double b1[],double x1[],int n) /*迭代法計算*/
      {double *t;
       int i,j,k=0;
       double sum1=0.0,sum2=0.0;
       t=(double*)malloc(n*sizeof(double));
       printf("/nPlease Input The Initial Value of x:/n");
         for(i=1;i<=n;i++)
         scanf("%lf",&x1[i]);
        do{ k++;
         for(i=1;i<=n;i++)
             t[i]=x1[i];
           for(i=1;i<=n;i++)
            { sum1=0.0;sum2=0.0;
            for(j=1;j<=i-1;j++) sum1=sum1+a1[i][j]*x1[j]; /*printf(" sum1= %0.4f ",sum1);*/

               for(j=i+1;j<=n;j++) sum2=sum2+a1[i][j]*t[j]; /* printf(" sum2= %0.4f ",sum2);}*/
           if(a1[i][i]==0||fabs(sum1)>1e+12||fabs(sum2)>1e+12)
          {printf(" /nWarning: These equtions can't be solve by this way!/n Press any Key to continue...");
          getch();
                   free(t);
          return 0;}
            x1[i]=(b1[i]-sum1-sum2)/a1[i][i];}
     }while(max(t,x1,n));
     /* for(i=1;i<=n;i++)
                {if(i%3==0) printf("/n");
          printf("    %.4f    ",x1[i]);}*/
     free(t);
           return 1; }

int gscompute(double **a1,double b1[],double x1[],int n) /*高斯消元法計算*/
     {int i,j,k;
      double m,sum;
      for(k=1;k<=n-1;k++)
      for(i=k+1;i<=n;i++)
     { if(a1[k][k]==0) {printf(" /nThese equtions can't be solve is this way./n Press any Key to continue...");
          getch();
                   return 0; }
         if((m=0-a1[i][k]/a1[k][k])==0) {i++; continue;}
     else {for(j=k+1;j<=n;j++)
            a1[i][j]=a1[i][j]+a1[k][j]*m;
     b1[i]=b1[i]+b1[k]*m;}}
/* yi xia ji suan x zhi */
    x1[n]=b1[n]/a1[n][n];
    for(i=n-1;i>=1;i--)
     {sum=0.0;
     for(j=n;j>=i+1;j--)
     sum=sum+a1[i][j]*x1[j];
      x1[i]=(b1[i]-sum)/a1[i][i];}
      return 1;    }

int gs_ydcompute(double **a1,double b1[],double x1[],int n) /*高斯_約當法計算*/
     {int i,j,k;
      double m,sum;
      for(k=1;k<=n;k++)
         {i=1;
           while(i<=n)
            { if(a1[k][k]==0) {printf(" /nThese equtions can't be solve is this way./n Press any Key to continue...");
          getch();                    return 0;}
                if(i!=k)
                  { if((m=0-a1[i][k]/a1[k][k])==0) {i++; continue;}
                 else {for(j=k+1;j<=n;j++)
                        a1[i][j]=a1[i][j]+a1[k][j]*m;
                        b1[i]=b1[i]+b1[k]*m;}
                    i++;}
                 else i++;    }}
/* yi xia ji suan x zhi */   
    for(i=n;i>=1;i--)
     x1[i]=b1[i]/a1[i][i];
     return 1;}

 
double computed(double **a,int h,int l, int *c1,int n) /*計算系數行列式D值*/
       { int i, j,p=1;
    double sum=0.0;
        if(h==n)
               sum=1.0;
        else {
               i=++h;
               c1[l]=0;
               for(j=1;j<=n;j++)
                  if(c1[j])
                    if(a[i][j]==0) p++;
                    else {sum=sum+a[i][j]*computed(a,i,j,c1,n)*pow(-1,1+p); p++; }                 c1[l]=1; }
       return sum; }
void ncompute(double **a,double b[],double x[],int n,int *c,double h)      /*克萊姆法計算*/
      {int i,j;
       double t[NUM];
        for(j=1;j<=n;j++)
         { for(i=1;i<=n;i++)
             {t[i]=a[i][j];a[i][j]=b[i];}
     x[j]=computed(a,0,0,c,n)/h;
           for(i=1;i<=n;i++)
              a[i][j]=t[i]; }
         }

main()
{double x[NUM];
double b[NUM];
int i,j=2,n=0;
int *c;
double he;
char m,decision;
double **a;
a=(double**)malloc(NUM*sizeof(double*));
for (i=0; i<NUM; i++)
a[i]=(double*)malloc(NUM*sizeof(double));
    print();
do{
    clrscr();
    do{
       if(n>=NUM) printf("n is too large,please input again:/n");
       else
          printf("Please input the total number of the equations n(n<NUM): /n");
          scanf(" %d",&n);
       }while(n>NUM);
    if(n==0) {for(i=1; i<NUM; i++) free(a[i]);
                  free(a); exit(1);}
    input(a,b,n);
    c=(int *)malloc((n+1)*sizeof(int));
    memset(c,1,(n+1)*sizeof(int));
    he=computed(a,0,0,c,n);
       if(fabs(he)>1e-4)   
         {
          Other:    chose();
          do{
             m=getche();
            }while(m!='a'&&m!='b'&&m!='A'&&m!='B'&&m!='c'&&m!='C'&&m!='d'&&m!='D'&&m!='e'&&m!='E');
          switch(m)
           { case 'a': ;
           case 'A': j=gscompute(a,b,x,n);     break;
           case 'b': ;
           case 'B': j=gs_ydcompute(a,b,x,n); break;
           case 'c': ;
           case 'C': j=ddcompute(a,b,x,n);     break;
           case 'd': ;
           case 'D': j=1; ncompute(a,b,x,n,c,he); break;
           case 'e': ;
           case 'E': j=2; break;
              default: j=2; break;
           }
          if(j==1)
            {    clrscr();
                printf("/n/n/n/n");
                printf("     D=%.4f /n",he);
                for(i=1;i<=n;i++)
                  {if(i%5==0) printf("/n");
                    printf("    %.4f    ",x[i]);}
            }
          else if(j==0)   
            {printf(" /nThese equtions can't be solve is this way./nPlease chose the other way."); goto Other;}
          else {for(i=1; i<NUM; i++) free(a[i]);
          free(a);
          free(c);
          exit(1);}
         }
       else printf(" /n/n/tD=%.4f/n This linear equations hasn't accurate answer!",he);
       printf(" /n Do you want to continue?(Y/N) /n");
       do{
           decision=getchar();}while(decision!='y'&&decision!='Y'&&decision!='n'&&decision!='N');
         }while(decision=='y'||decision=='Y');
for(i=1; i<NUM; i++) free(a[i]);
free(a);
free(c);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
7m第一福利500精品视频| 高潮白浆女日韩av免费看| 国产精品久久久久久一区二区| 欧美成人一区在线| 91国内在线视频| 欧美电影《睫毛膏》| 成人免费xxxxx在线观看| 成人写真视频福利网| 久久男人av资源网站| 欧美国产日产韩国视频| 久久视频在线视频| 一个色综合导航| 亚洲天堂av在线播放| 日韩av在线网站| 欧美一区二区三区图| 91精品国产高清久久久久久久久| 都市激情亚洲色图| 久久频这里精品99香蕉| 国内成人精品一区| 亚洲精品自产拍| 91精品国产免费久久久久久| 亚洲国语精品自产拍在线观看| 日韩中文在线视频| 欧美激情综合亚洲一二区| 国语自产精品视频在线看一大j8| 一区二区三区日韩在线| 97人人模人人爽人人喊中文字| 日韩欧美有码在线| 欧美亚洲日本黄色| 欧美亚洲第一页| 国模精品系列视频| 欧美日韩日本国产| 色老头一区二区三区在线观看| 成人福利在线视频| 91精品中国老女人| 91精品久久久久久久久| 日韩精品视频在线免费观看| 精品国产一区二区三区久久久| 成人网中文字幕| 欧洲永久精品大片ww免费漫画| 18一19gay欧美视频网站| 亚洲性无码av在线| 一区二区在线视频| 欧美国产在线视频| 国产大片精品免费永久看nba| 国产免费一区二区三区香蕉精| 久久久97精品| 国产va免费精品高清在线观看| 精品一区二区电影| 黑丝美女久久久| 久久精品国亚洲| 精品国产乱码久久久久久婷婷| 免费av一区二区| 欧美在线激情网| 九九热最新视频//这里只有精品| 久久精品免费电影| 日韩av电影免费观看高清| 久久69精品久久久久久久电影好| 欧美韩国理论所午夜片917电影| 色妞一区二区三区| 日韩成人在线网站| 国产美女久久精品| 高清欧美性猛交| 久久久久久久久久久久久久久久久久av| 欧美精品电影免费在线观看| 91亚洲国产精品| 亚洲人成电影网站色www| 欧美日韩亚洲天堂| 国产精品日韩欧美| 亚洲欧美日韩国产成人| 久久久电影免费观看完整版| 亚洲欧美日韩中文在线制服| 自拍偷拍亚洲欧美| 亚洲第一av网| 国产在线播放91| 亚洲精品视频在线观看视频| 精品久久久久久久久久ntr影视| 欧美激情综合亚洲一二区| 亚洲夜晚福利在线观看| 欧美情侣性视频| 国产日韩换脸av一区在线观看| 一区二区三区在线播放欧美| 中日韩美女免费视频网站在线观看| 久久99精品国产99久久6尤物| 中文一区二区视频| 亚洲一区二区三区久久| 久久99精品久久久久久青青91| 国产视频在线观看一区二区| 欧美性猛交xxxx免费看漫画| 欧美性猛交丰臀xxxxx网站| www国产精品com| 日韩国产在线播放| 日韩在线观看免费av| 国产精品丝袜高跟| 久久久久久成人精品| 欧美在线视频免费| 日韩电影在线观看永久视频免费网站| 国产精品96久久久久久又黄又硬| 91精品在线看| 91最新国产视频| 精品成人av一区| 久久五月天综合| zzjj国产精品一区二区| 国产精品成人一区二区| 97涩涩爰在线观看亚洲| 97在线观看视频国产| 亚洲精品美女视频| 欧美中文字幕在线播放| 一区二区三区久久精品| 午夜精品在线观看| 欧美成人免费全部| 国产一区玩具在线观看| 日韩美女在线观看| 亚洲精品99久久久久中文字幕| 欧美大胆在线视频| 96精品久久久久中文字幕| 国产69精品久久久久9999| 国产日韩中文字幕| 亚洲欧美综合区自拍另类| 国产精品扒开腿爽爽爽视频| 欧美另类xxx| 国产一区二区三区直播精品电影| 国产欧美精品久久久| 国产aⅴ夜夜欢一区二区三区| 这里只有精品在线播放| 大胆欧美人体视频| 亚洲黄页网在线观看| 午夜精品一区二区三区视频免费看| 亚洲黄一区二区| 国产偷亚洲偷欧美偷精品| 免费不卡欧美自拍视频| 日韩在线一区二区三区免费视频| 欧美精品日韩www.p站| 欧美日韩成人在线播放| 久久精品2019中文字幕| 久久久久久久久国产| 庆余年2免费日韩剧观看大牛| 日韩欧美主播在线| 日韩www在线| 久久久久亚洲精品成人网小说| 91免费视频国产| 亚洲激情在线观看| 91免费精品国偷自产在线| 亚洲欧美另类自拍| 精品毛片三在线观看| 91香蕉嫩草神马影院在线观看| 欧美日韩国产成人高清视频| 国产精品老牛影院在线观看| 欧美裸体xxxxx| 插插插亚洲综合网| 国产97色在线|日韩| 亚洲精品美女久久| 日韩中文字幕第一页| 国产不卡在线观看| 亚洲福利在线视频| 欧美成人中文字幕| 一区二区三区无码高清视频| 亚洲男人天堂视频| 91日本视频在线| 亚洲va男人天堂| 中文字幕亚洲欧美一区二区三区| 欧美日韩在线第一页| 亚洲毛片在线免费观看| 成人黄色免费在线观看|