编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代)
题目
编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代)
请编写函数fun,其功能是根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代).
π/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+……+(1*2*3*4*……*n)/(3*5*7*……*(2n+1))
程序运行后,若输入精度为0.0005,则输出为3.1416
double fun ( double eps)
{double s,x;int n;
x=1.0;s=0.;n=1;
while(x>0.0005)
{s=s+x;x=x*n/(2n+1);n++;}
x05return 2s;
}
main( )
{ double x;void NONO ();
printf("Input eps:") ;
scanf("%lf",&x); printf("
eps = %lf,PI=%lf
",x,fun(x));
NONO();
}
这个程序说有一个错误.求教大神在哪里?
答案
无论是你的答案还是正确答案 都有问题
你的答案 问题在于自变量i设置成了double型
浮点型 做自加操作的时候可能导致死循环的 也就是你的程序 如果精度设置的特别高会出问题
所谓的正确答案,没有这个问题 但是不符题意
即某项小于0.0005时停止迭代
正确答案中是某项小于精度后 把该项累加并在下一项停止迭代
下面是把你的程序改成了完全符合“正确答案”的代码
PS: 题目中也有一个错误 当精度为0.0005时 输出的是3.141106 即保留四位小数位3.1411
要想输出3.1416 最低精度为0.00002
#include double fun ( double eps){ double pi=1,a=1;x09int i; for(i=1;a>=eps;i++){ a=a*i/(2*i+1); pi=pi+a; } return 2*pi;}main( ){ double x; printf("Input eps:") ; scanf("%lf",&x); printf("
eps = %lf, PI=%.4lf
", x, fun(x));//输出4位小数}
举一反三
已知函数f(x)=x,g(x)=alnx,a∈R.若曲线y=f(x)与曲线y=g(x)相交,且在交点处有相同的切线,求a的值和该切线方程.
我想写一篇关于奥巴马的演讲的文章,写哪一篇好呢?为什么好
最新试题
热门考点
- 平行空间,平行世界,平行宇宙,是同一个概念有三个名称而已吗?
- 小强买5盒糖,小红买5盒蛋糕用去44元,如果小强和小红对换一盒,则每人所有物品的价钱相等,一盒糖、一盒蛋糕各多少元?
- 英语翻译
- 1,知:[a]表示不大于a的最大整数,如:[-5.1]=-6,[5.1]=5,已知x=1+1/x,则[(x³+x+1)之x^5] 的值为—
- 请证明(sinX+X)/X是有界函数?
- 比喻初入社会,不怕困难(含有十二生肖的词语)
- 德国科学家魏格纳提出的大陆漂移说.这个学说的主要观点是什么?
- 若-3≤≤2化简x-2|+根号下(x+3)^2+根号下x^2-10x+25
- 9路公共汽车英语如何表达?一共有多少种表达法?
- 大儿锄豆溪东,中儿正织鸡笼; 最喜小儿无赖,溪头卧剥莲蓬.各用几句话写出三个儿子的不同表现.