一道c语言编程题 我觉得答案不对

根据以下公式求pi(要求精度为0.0005即某项小于0.0005时停止迭代)pi/2=1+1/3+1*2*3/(3*5*7)+...1*2*3*...n/(3*5*7*.... 根据以下公式求pi (要求精度为0.0005 即某项小于0.0005时停止迭代)
pi/2=1+1/3+1*2*3/(3*5*7)+...1*2*3*...n/(3*5*7*...(2n-1))

答案为(这里我只写调用函数)
double fun(double e)
{double s; float n,t,pi;
t=1;pi=0;n=1.0;s=1.0;
while (s>=e)
{pi+=s; t=n/(2*n+1);
s*=t; n++;}
pi=pi*2;
return pi;}

我认为答案的代码是编写1+1/3+1*2/(3*5)+1*2*3/(3*5*7).......
这与公式不同 请问我的想法对吗 ??
这题应该怎么正确编写
ps;上面的代码是书上的答案 但是我认为书上的答案不对。。。
展开
 我来答
liaohanjie1314
2011-03-21 · TA获得超过451个赞
知道答主
回答量:181
采纳率:0%
帮助的人:78.7万
展开全部
答案的代码的确是编写1+1/3+1*2/(3*5)+1*2*3/(3*5*7)....这没有错,你理解的很好。
我觉得错的是pi/2=1+1/3+1*2*3/(3*5*7)+...1*2*3*...n/(3*5*7*...(2n-1))这里题目写漏了
根据最后一个表达式n!/(3*5*7*...(2n-1))可以知道每个位置的数,当n=1时为第一位数,n=k时为第
k位数,所以第三项应该为1*2/(3*5),原题写漏了

书上的答案代码没问题,但是出题时的数列写错了,写漏了一个
代三个表__
2011-03-21 · TA获得超过108个赞
知道答主
回答量:65
采纳率:0%
帮助的人:74.1万
展开全部
思路有错误。。
数字有规律的,
楼主可以这样:
定义两个double变量fenzi,fenmu,并初始化成1
定义一个int变量 i = 1开始,在while里边做循环
每次
fenzi = fenzi * i;
funmu = fenmu * (2*i-1)
然后 fenzi/fenmu 就是每次的结果

累加自己操作吧,你会的,我懂的!~~~
追问
请问你说的是书上答案有问题  还是我的思路有问题?
追答
你写的这个有一些问题,也就是书上的答案是错的。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
戈壁与清潭
2011-03-21 · TA获得超过735个赞
知道小有建树答主
回答量:571
采纳率:57%
帮助的人:125万
展开全部
pi/2=1+1/3+1*2*3/(3*5*7)+...1*2*3*...n/(3*5*7*...(2n-1))

可以看成是
pi/2=1+1/(2*1+1)+(1/(2*1+1))*(2/(2*2+1))*(3/(2*3+1))所以可以这么写

t=1
i=1;
while(t>e)
{
pi+=t;
t*=i/(2*i+1);
i++

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乐汉星
2011-03-21
知道答主
回答量:46
采纳率:0%
帮助的人:0
展开全部
这个题目掉了一项1*2/(3*5)

而且有个地方错了t=n/(2*n+1);

应该是t=n/(2*n-1);

因为从题目可以看出1*2*3*...n/(3*5*7*...(2n-1))

这个题目我做过的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式