鱼C论坛

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

[已解决]迭代比较

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

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

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

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。



最佳答案
2018-11-26 15:45:05
我用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;

}
TDK(S2ZEQDZ7A$ZBM@7QN{J.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-26 15:10:50 | 显示全部楼层
怎么肥四啊?问题出在哪里求指点。
想知道小甲鱼最近在做啥?请访问 -> 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;
#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;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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