|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include"stdio.h"
- #include"math.h"
- int main()
- {
- double a,b,c,d,e,n;
- b=4/3;
- n=2;
- scanf("%lf",&e);
- fflush(stdin);
- do
- {
- a=(2*n)/(2*n-1)*(2*n)/(2*n+1);
- c=b*a;
- d=b-c;
- b=c;
- n=n+1;
- }while(abs(d)>=e);
- printf("%d",n);
- return 0;
- }
复制代码
有公式 pi = (2/1 x 2/3) x (4/3 x 4/5) x (6/5 x 6/7) x ......x [2n/(2n-1)x2n/(2n+1)],利用该公式可以计算pi;的近似值。给定一个精度值e,求前后两次迭代之差的绝对值小于e时相应的最小迭代次数n(n大于等于2)
比如:输入的精度为0.01。利用上述计算公式求π值,当n为7时,求得的π的近似值为3.038674;当n为8时,求得的π的近似值为3.05059,两者之差的绝对值为0.011916,大于要求的精度0.01,所以应继续迭代计算。当n为9时,求得的π的近似值为3.060035,与n为8求得的近似值之差的绝对值是0.009445,小于要求的精度,所以满足精度要求的最小迭代次数为9。
我用VS直接运行了你的程序会报错。n是浮点型的,printf(%d,n)输出整形数据。
其次b=4/3时n为1.do-while循环结束前,c里面又使用一次b*a,所以循环结束后n=n+1;
- #include"stdio.h"
- #include"math.h"
- int main()
- {
- double a, b, c, d, e;
- b = 4 / 3;
- int n = 1;
- scanf_s("%lf", &e);
- fflush(stdin);
- do
- {
- a = (2.0 * n) / (2.0 * n - 1.0)*(2.0 * n) / (2.0 * n + 1.0);
- c = b*a;
- d = b - c;
- b = c;
- n = n + 1;
- } while (fabs(d) >= e);
- n = n + 1;
- printf("%d", n);
- return 0;
- }
复制代码
|
-
|