【C語言】求給定精度的簡單交錯序列部分和

2020-08-08 12:45:07

來源:浙大PTA


本題要求編寫程式,計算序列部分和 1 - 1/4 + 1/7 - 1/10 + … 直到最後一項的絕對值不大於給定精度eps。

輸入格式:
輸入在一行中給出一個正實數eps。

輸出格式:
在一行中按照「sum = S」的格式輸出部分和的值S,精確到小數點後六位。題目保證計算結果不超過雙精度範圍。

輸入樣例1:
4E-2
輸出樣例1:
sum = 0.854457
輸入樣例2:
0.02
輸出樣例2:
sum = 0.826310

這道題的實際意思是輸入最後一項的大小,求到這一項爲止的和。最後一項的大小爲eps,這裏稱作誤差項,借用了數學中o(x)的定義。可以用一個變數num來代表每一項,並作爲回圈結束的條件。
解答:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int i=1,sign=1;                 /*設定一個分母i,一個符號量sign*/
    double eps=0,sum=0;             /*設定一個誤差量eps,求和的結果sum*/
    double num=0;                   /*設定每一項的值爲num*/
    scanf("%lf",&eps);              /*傳入可以接受的誤差項*/
    do                              /*開始一個回圈*/
    {
        num = 1.0/i;                /*初始值爲1*/
        i+=3;                       /*根據規律分母每次加3*/
		sum += sign*num;            /*sum加上每一項的值*/
        sign = -sign;               /*每一項相較上一項要變號*/
    }while(num>eps);                /*當已有的最新一項的值不大於eps時就退出*/
    printf("sum = %.6f\n",sum);     /*按題目要求列印結果*/
    system("pause");
    return 0;
}