【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的精度需要调整什么
  • 你还能提出其他的解题方法吗?
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值