鱼C论坛

 找回密码
 立即注册
查看: 1515|回复: 2

[已解决]迭代比较

[复制链接]
发表于 2018-11-26 15:08:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include"stdio.h"
  2. #include"math.h"
  3. int main()
  4. {
  5.         double a,b,c,d,e,n;
  6.         b=4/3;
  7.         n=2;
  8.         scanf("%lf",&e);
  9.         fflush(stdin);
  10.         do
  11.         {
  12.                 a=(2*n)/(2*n-1)*(2*n)/(2*n+1);
  13.                 c=b*a;
  14.                 d=b-c;
  15.                 b=c;
  16.                 n=n+1;
  17.         }while(abs(d)>=e);
  18.         printf("%d",n);
  19.         return 0;

  20. }
复制代码



有公式 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。



最佳答案
2018-11-26 15:45:05
我用VS直接运行了你的程序会报错。n是浮点型的,printf(%d,n)输出整形数据。
其次b=4/3时n为1.do-while循环结束前,c里面又使用一次b*a,所以循环结束后n=n+1;
  1. #include"stdio.h"
  2. #include"math.h"
  3. int main()
  4. {
  5.         double a, b, c, d, e;
  6.         b = 4 / 3;
  7.         int n = 1;
  8.         scanf_s("%lf", &e);
  9.         fflush(stdin);
  10.         do
  11.         {
  12.                 a = (2.0 * n) / (2.0 * n - 1.0)*(2.0 * n) / (2.0 * n + 1.0);
  13.                 c = b*a;
  14.                 d = b - c;
  15.                 b = c;
  16.                 n = n + 1;
  17.         } while (fabs(d) >= e);
  18.         n = n + 1;
  19.         printf("%d", n);
  20.         return 0;

  21. }
复制代码
TDK(S2ZEQDZ7A$ZBM@7QN{J.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-26 15:10:50 | 显示全部楼层
怎么肥四啊?问题出在哪里求指点。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-26 15:45:05 | 显示全部楼层    本楼为最佳答案   
我用VS直接运行了你的程序会报错。n是浮点型的,printf(%d,n)输出整形数据。
其次b=4/3时n为1.do-while循环结束前,c里面又使用一次b*a,所以循环结束后n=n+1;
  1. #include"stdio.h"
  2. #include"math.h"
  3. int main()
  4. {
  5.         double a, b, c, d, e;
  6.         b = 4 / 3;
  7.         int n = 1;
  8.         scanf_s("%lf", &e);
  9.         fflush(stdin);
  10.         do
  11.         {
  12.                 a = (2.0 * n) / (2.0 * n - 1.0)*(2.0 * n) / (2.0 * n + 1.0);
  13.                 c = b*a;
  14.                 d = b - c;
  15.                 b = c;
  16.                 n = n + 1;
  17.         } while (fabs(d) >= e);
  18.         n = n + 1;
  19.         printf("%d", n);
  20.         return 0;

  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-12 20:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表