问题 G: 例题5-7 求圆周率pi的近似值 三种方法

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<stdio.h>
#include<math.h>
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<stdio.h>
#include<math.h>
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<stdio.h>
#include<math.h>
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;
}
发布了321 篇原创文章 · 获赞 51 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_33375598/article/details/104060218
今日推荐