迭代比较
#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。
怎么肥四啊?问题出在哪里求指点。 我用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]