1、請編一個函數fun,它的功能是:根據以下公式求π的值(要求滿足精度0.0005,即,某項小于0.0005時停止迭代):
程序運行后,如果輸入精度0.0005,則程序輸出多少。
注意:部分源程序存在PROG1.C中,請勿改動主函數和其他函數中的內容,僅在函數fun的指定的部位填入你編寫的若干語句。
試題源程序如下:
#include <stdio.h>
#include <math.h>
double fun(double eps)
{
}
main()
{ double x;
printf("Input eps:");
scanf("%lf",&x); printf("\neps=%lf, PI=%lf\n",x,fun(x));
}
分析:
(1)本題所用基本算法應為累加。假設累加值放在變量s中,累加項放在變量t中,累加操作由語句s=s+t;來實現。
(2)若稱 為第1累加項,則其前的1為第0累加項,其后的一項為第2累加項,按給定的公式可知,從第1累加項開始,后一項的累加項是前一項的值乘以 。所以當前的累加項應當是:t=t*n/(2.0*n+1.0)。表達式右邊的t中是前一項的值,表達式左邊的t為當前的每累加累加項。請注意,不要寫成:t*n/(2*n+1)而進行整除。
(3)若第0累加項的1作為s的初值,語句:s=s+t;執(zhí)行n次,就把第1到第n項累加到了s中。每進行一次累加,n值增1。
(4)把以上操作放在循環(huán)中。按本題規(guī)定,當某項小于eps(0.0005)時停止迭代,因此若用while循環(huán),可用t>=eps作為控制循環(huán)進行的條件:
while( t>=eps ){ s+=t; n++; t=t*n/(2.0*n+1); }
(5)注意應給所用變量賦適當的初值。
(6)退出循環(huán)后,函數的返回值應是:2*s。
程序運行后,如果輸入精度0.0005,則程序輸出多少。
注意:部分源程序存在PROG1.C中,請勿改動主函數和其他函數中的內容,僅在函數fun的指定的部位填入你編寫的若干語句。
試題源程序如下:
#include <stdio.h>
#include <math.h>
double fun(double eps)
{
}
main()
{ double x;
printf("Input eps:");
scanf("%lf",&x); printf("\neps=%lf, PI=%lf\n",x,fun(x));
}
分析:
(1)本題所用基本算法應為累加。假設累加值放在變量s中,累加項放在變量t中,累加操作由語句s=s+t;來實現。
(2)若稱 為第1累加項,則其前的1為第0累加項,其后的一項為第2累加項,按給定的公式可知,從第1累加項開始,后一項的累加項是前一項的值乘以 。所以當前的累加項應當是:t=t*n/(2.0*n+1.0)。表達式右邊的t中是前一項的值,表達式左邊的t為當前的每累加累加項。請注意,不要寫成:t*n/(2*n+1)而進行整除。
(3)若第0累加項的1作為s的初值,語句:s=s+t;執(zhí)行n次,就把第1到第n項累加到了s中。每進行一次累加,n值增1。
(4)把以上操作放在循環(huán)中。按本題規(guī)定,當某項小于eps(0.0005)時停止迭代,因此若用while循環(huán),可用t>=eps作為控制循環(huán)進行的條件:
while( t>=eps ){ s+=t; n++; t=t*n/(2.0*n+1); }
(5)注意應給所用變量賦適當的初值。
(6)退出循環(huán)后,函數的返回值應是:2*s。