1 问题

时间限制: 1 Sec 内存限制: 12 MB
提交: 3450 解决: 1630
[提交][状态][讨论版][命题人:外部导入]
题目描述
用如下公式

求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。

要求输出的结果总宽度占10位,其中小数部分为8位。

程序中使用浮点型数据时,请定义为双精度double类型。

如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为fabs(x).

输入

输出
PI=圆周率的近似值

输出的结果总宽度占10位,其中小数部分为8位。

末尾输出换行。

样例输入

样例输出
PI=3.14159065

2 参考代码:

  • 方法一
//求pi 使用迭代法 pi/4=1-1/3+1/5-1/7+1/9-。。。
#include
#include
int main(int argc, char const *argv[])
{
double PI=0,term=1,n=1;
int sign=1;
while(fabs(term)>=pow(10,-6)){
PI+=term;
n=n+2;
sign=-sign;
term=sign/n;
}
printf("PI=%10.8f\n",PI*4);
return 0;
}
  • 方法二
//求pi,使用迭代法 pi/2=1+1/3+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+...
//An=An-1*((n-1)/(2*n-1))
#include
#include
int main(int argc, char const *argv[])
{
double PI=0,term=1,n=1;
while(fabs(term)>=pow(10,-6)){
PI+=term;
n++;
term=term*((n-1)/(2*n-1));
}
PI=PI*2;
printf("PI=%10.8f\n",PI);
return 0;
}
  • 方法三
//求pi,使用迭代法 pi/2=1+1/3+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+...
//An=An-1*((n-1)/(2*n-1))
#include
#include
int main(int argc, char const *argv[])
{
double PI=0,term=1,n=1;
while(fabs(term)>=pow(10,-6)){
PI+=term;
n++;
term=term*((n-1)/(2*n-1));
}
PI=PI*2;
printf("PI=%10.8f\n",PI);
return 0;
}