1. 程式人生 > >ACM 入門題 1167

ACM 入門題 1167

/* 題目描述
用如下公式
PI/4≈1-1/3+1/5-1/7+…
求圓周率PI的近似值,直到發現某一項的絕對值小於10-6為止(該項不累加)。
要求輸出的結果總寬度佔10位,其中小數部分為8位。
程式中使用浮點型資料時,請定義為雙精度double型別。
如果需要計算絕對值,可以使用C語言數學庫提供的函式fabs,如求x的絕對值,則為fabs(x).
輸入 無
輸出 PI=圓周率的近似值
輸出的結果總寬度佔10位,其中小數部分為8位。
末尾輸出換行。
樣例輸入 無
樣例輸出 PI=3.14159065 */

#include<stdio.h>
#include<math.h>
int main()
{
    double PI=0.00,x=1.00,term=1.00,sign=1.00;   //PI值題目要求,需定義成double型別,x為比較物件,也需定義成為double,
    while(fabs(x)>=1e-6)                        // term定義成double;i也可以定義成int變數1,整形變數和單精度雙精度變數進行算術運算,先把int和float專成double再運算*/
    {
        PI=PI+x;
        sign=-sign;                             //分子不轉換,用此語句表示其進行符號變換+變成-
        term=term+2;                            //分母每次運算完+2
        x=sign/term;
    }
    PI=PI*4;                                    //題目的公式
    printf("PI=%10.8lf\n",PI);
    return 0;
}
/*問題?為什麼PI=PI+4放在while迴圈語句中x語句下邊會出現答案4.00000000000呢?
  因為假如設x=0的話,直接跳過while語句的執行範圍,直接執行PI=PI*4了

  注:寫完程式碼,不僅僅需要檢查格式,更需要腦中執行一遍,避免低階錯誤。*/

`