c语言 根据公式求出π的近似值。

c语言 根据公式求出π的近似值。
根据公式求出π的近似值。
(2)功能要求
①公式
π/6=1/2+(1/2)×1/3×(1/2)3+(1/2×3/4)×1/5×(1/2)5+(1/2×3/4×5/6)×1/7×(1/2)7...
②编程求π的近似值,当数列的最后一项小于10的-6次方为止。
③输出π值,小数点后保留6位有效数字。
木鱼笨 1年前 已收到1个回答 举报

fairy_cindy 幼苗

共回答了10个问题采纳率:80% 举报

#include


double powi(double num, int multi) {
double r = 1.0;
int i;
for (i = 0; i < multi; i++) {
r *= num;
}
return r;
}

double item(int n) {
double r = 1.0;
int i;
/*1.0 * 1 / 2 * 3 / 4 * 5 / 6 .....*/
for (i = 1; i < n; i++) {
if (i % 2) {
r *= i;
/*printf("*%d", i); */
} else {
r /= i;
/*printf("/%d", i); */
}
}
r *= 1;
/*printf("*%d", 1); */
r /= n;
/*printf("/%d", n); */
r *= powi(0.5, n);
/*printf("*%lf", powi(0.5, n)); */
/*printf(" -- item %d: %lf n", n, r); */
return r;
}

int main() {
double pd6 = 0.0, ci = 0.0;
int i = 1;


do {
ci = item(i);
pd6 += ci;
i += 2;
} while (ci >= 1e-6);

printf("PI=%.6lfn", pd6 * 6);

return 0;
}完全按你的公式做的,结果真的对了,3.141592(这里对6位有效数字有个存疑,就是应该输出6位还是7位数字,理论上有效数字后面应该带上一个估值,用来修正有效数字的,如果要求真的那么严格,我可以给你写个函数用来输出6位有效数字)。
一般级数很少有用这个复杂的式子的吧,一般都是 1-1/3+1/5-1/7+1/9-1/11 这个式子,你的公式竟然也是对的。楼上的完全没看懂级数的项的规律。-------------------------------------------------以上是20:29分发的回答,既然你没有追问,我只能通过修改这个回答,慢慢解释一下:powi函数 是为了不引用庞大的math库,而自己写的一个简单的正整数幂的函数(math库里有double pow(double, double),这个运算过程中不需要小数的幂值,就用循环乘法来实现了。item函数 是每个项的计算过程,仔细看的话可能会发现,这些项并不是 i=1,2,3,4... 而是 i=1,3,5,7... 这个是为了符合级数的项中的值,都是奇数在做运算。item里面的那些注释掉的 printf 是故意留下用来观察级数表达式的。由于每一项都是多个数值相乘或除,如1/2x3/4x5/6 其实就是1 * 2 / 3 * 4 ,这些printf可以在计算每一项的时候把整个过程打印出来。级数的难点其实就是找到项的通用表达式,你的公式已经把表达式写的很清楚了,就看你把它提取成算法了

1年前

5
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 1.863 s. - webmaster@yulucn.com