回覆列表
  • 1 # 髒話比謊話乾淨558


    給,下面的程式碼已經編譯執行確認,肯定好用了,試試吧:)

    #include<conio.h>

    #include<stdio.h>

    #include<math.h>

    #include<stdlib.h>

    #define

    number

    20

    #define

    esc

    0x1b

    #define

    enter

    0x0d

    float

    a[number][number+1]

    ,ark;

    int

    flag,n;

    void

    exchange(int

    r,int

    k);

    float

    max(int

    k);

    void

    message();

    int

    main()

    {

    float

    x[number];

    /*此陣列用於存放方程解*/

    int

    k,i,j;

    char

    celect;

    system("cls");

    printf("\n用gauss列主元消元法解線性方程組");

    printf("\n1.解方程組請按enter.");

    printf("\n2.退出程式請按esc.");

    celect=getch();

    if(celect==esc)

    exit(0);

    printf("\n

    輸入方程組的維數:n=");

    scanf("%d",&n);

    printf("\n現在輸入係數矩陣a和向量b:");

    for(i=1;i<=n;i++)

    {

    printf("\n請輸入a%d1--a%d%d係數和向量b%d:

    \n",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此方程組不合法!");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("\nx%d=%f",i,x[i]);

    }

    message();

    getch();

    return

    1;

    }

    void

    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;

    }

    void

    message()

    /*實現選單選擇的函式*/

    {

    printf("\n

    繼續運算按

    enter

    ,退出程式按

    esc!");

    switch(getch())

    {

    case

    enter:

    main();

    case

    esc:

    exit(0);

    default:{printf("\n不合法的輸入!");message();}

    }

    }

  • 中秋節和大豐收的關聯?
  • 送老婆本命年什麼禮物好?