求Π的近似值,已知Π/4≈1-1/3+1/5-1/7.....直到最后一项绝对值小于10的-7次方

  1. 使用while循环语句
#include<stdio.h>
#include<math.h>
int main()
{
	int s=1;
	double n=1,t=1,pi=0;
	while((fabs(t))>1e-7)//指数 
	{
		pi=pi+t;//1
		n=n+2;//3
		s=-s;//-1符号变化 
		t=s/n;//如果n为整数型,则该等式为0; 1/3=0 0.0000 1/3
	}
	pi=pi*4;//pi 
	printf("pi=%10.6f\n",pi);
	return 0;
}

 运行结果

 

2.使用for循环语句

#include<stdio.h>
#include<math.h>
void main()
{
	int s=1;
    double t=1,n,pi=1;
    for(n=3;;n+=2){
	
	if((fabs(t))>1e-7)
	{
		 s=-s;
		t=s/n;
		 pi+=t;
	}
	else break;}
	printf("%f",4*pi);
return;
}

运行结果

  • 使两者最后一位数不一样的原因是什么呢?

在C语言的学习中,我们也会遇到一种这种小数的一种舍入的情况,在C语言中double类型的数据在C里面通过取不同的小数位数,输出能够是实现,0到4舍,6到9进,真值为5的时候,舍入不确定。所以是通过了一个进一的一个操作才导致最后一位小数部分不一样。

 稍加分析的话,可以知道第一个循环体比第二个循环体少运行一次。

这里将这个范围缩小更能直观的感受到

程序1:

#include<stdio.h>
#include<math.h>
int main()
{
	int s=1;
	double n=1,t=1,pi=0;
	while((fabs(t))>0.1)//指数 
	{
		pi=pi+t;//1
		n=n+2;//3
		s=-s;//-1符号变化 
		t=s/n;//如果n为整数型,则该等式为0; 1/3=0 0.0000 1/3
	}
	pi=pi*4;//pi 
	printf("pi=%f\n",pi);
	return 0;
}

 

 

 

 第二个程序:

#include<stdio.h>
#include<math.h>
void main()
{
	int s=1;
    double t=1,n,pi=1;
    for(n=3;;n+=2){
	if((fabs(t))>0.1)
	{
		 s=-s;
		t=s/n;
		 pi+=t;
	}
	else break;}
	printf("%f",4*pi);
	return;
}

 ​​​​​​​​​​​​​​

第一个程序运行到了t=1/9,然后判断t=1/11小于0.1,停止计算。

第二个程序运行到了t=1/9时,程序继续运行,到t=1/11的时候继续运行了一次。

所以我们对第二个程序进行改进。

#include<stdio.h>
#include<math.h>
void main()
{
	int s=1;
    double t,n=1,pi=0;
    for(t=1;(fabs(t))>1e-7;t=s/n){
        pi=pi+t;
		n=n+2;
		s=-s;
}
	printf("%f",4*pi);
	return;
}

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值