【C语言】用莱布尼茨公式π/4≈1−1/3+1/5−1/7+⋯求π的近似值

分析问题

这个问题是一个利用循环迭代求解的过程。和之前讨论的累加求和类似,后一项的值是前一项的值+一个有规律可循的数,表示为s=s+i。只要我们分析出来需要加上的数据的规律这个题就有解了,我们来分析下规律(1) 每项的分子都是1。 (2) 后一项的分母是前一项的分母加2。 (3) 第1项的符号为正,从第2项起,每一项的符号与前一项的符号相反。

分析完成规律还要有一个结束循环的条件,这是求近似值,去们定一个循环结束条件i的绝对值是否大于或等于10-6,这里需要用到求绝对值的函数fabs(),需要在程序头部添加#include<math.h>头文件。

梳理思路

变量及初值: double s=0,i=1.0; int n=1,sign=1;

循环体

  • s=s+i
  • i:由符号、分子、分母组成,
  • 符号:sign=-sign;
  • 分子:1
  • 分母:1、3、5、7、9......规律:n=n+2,2*n-1;
  • i=sign*1.0/n;

循环条件:|i|绝对值小于10的-5次方  -----while(fabs(i)>=1e-5)

  • 10的-5次方 用科学计数法的形式表示1e-5
  • #include<math.h> 

绘制流程图(变量做适当调整

sign=1, pi=0, n=1, term=1

当 |term|≥10-6

pi=pi+term

n=n+2

sign=-sign

term=sign/n

pi=pi*4

输出pi

编写程序

#include<stdio.h>
#include<math.h>
int main()
{
	int sign=1;
	double item=1,pi=0,n=1;
	
	while(fabs(item)>=1e-6)
	{
		pi=pi+item;
		n=n+2;
		sign=-sign;
		item=sign/n;				
	}
	pi=4*pi;
	printf("pi=%f",pi);
	return 0;
 } 

运行结果

 思考

  • 要提高pi的精度需要调整什么
  • 你还能提出其他的解题方法吗?

猜你喜欢

转载自blog.csdn.net/studyup05/article/details/130375039
今日推荐