问题 G: 例题5-7 求圆周率pi的近似值 三种方法
原创
©著作权归作者所有:来自51CTO博客作者fanxinglanyu的原创作品,请联系作者获取转载授权,否则将追究法律责任
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;
}