|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
看了答案也不是很明白。
#include <stdio.h>
#include <math.h>
int main()
{
int sign = 1; // 表示符号
double pi = 0.0, n = 1, term = 1.0; // n表示分母,term表示当前项的值
while (fabs(term) >= 1e-8) // 1e-8表示10^(-8)
{
pi = pi + term;
n = n + 2;
sign = -sign;
term = sign / n;
}
pi = pi * 4;
printf("pi = %10.7f\n", pi);
return 0;
}
希望能解读下这段代码的意思
首先,公式给你了,
提示1,分子永远都是1,包括第一个,1=1/1,那么我们可以设一个常数1,来表示分子,也就是代码中的sign=1
提示2,分母的规律就是从1开始,后面每一项都加2,那么,我们可以设分母一开始为1,每循环一次,加2,也就是代码中的n=1
提示3,每次前一个数和后一个数的符号都相反,所以,在循环的时候要变号,也就是sign=-sign
提示4,因为我们是把每一项的值加起来,而每一项会越来越小,因为分母越来越大,题目要我们求小数点后七位,所以到最后一项为八位的时候,就可以停下来了
好,开始看代码,首先我们要明白,这题是要用循环,把每一项加起来求和。
1.double pi = 0.0, n = 1, term = 1.0; pi就是我们要求的总和,一开始是0,n就是分母,term是我们要求的每一项的值,一开始是1,从1加起的
2.然后 while (fabs(term) >= 1e-8),循环,到小数点第8位的时候停下来(代码第9位才停下来的原因可能是取第8位,保持精准度),注意,要取绝对值,因为循环中term的值会变成负数
3. pi = pi + term; 一开始总和pi和第一项相加,得到前一项的总和
n = n + 2; 然后分母加2
sign = -sign; 下一项是负数,所以,把sign变为负数
term = sign / n; 然后得出下一项的值
然后循环
4.这样,得出pi是所有项的总和,然后乘4,得出真正的pi,一共循环到小数点的后八位,保持前七位的精度
5.输出结果,10.7f表示输出10位位宽输出,其中小数占7位,不足的右边补空格。
|
-
|