wyd264699424 发表于 2018-11-26 15:08:04

迭代比较

#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 ,利用该公式可以计算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。



wyd264699424 发表于 2018-11-26 15:10:50

怎么肥四啊?问题出在哪里求指点。

Mountain_gs 发表于 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;

}
页: [1]
查看完整版本: 迭代比较