來源:浙大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;
}