题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

我的程序是:#include"stdio.h"main(){intm=2,n=1,p=3,q=2,i;floats=2/1+3/2;for(i=1;i<=9;i++){m... 我的程序是:#include "stdio.h"
main()
{
int m=2,n=1,p=3,q=2,i;
float s=2/1+3/2;
for(i=1;i<=9;i++)
{
m=m+p;
n=n+q;
s=s+m/n;
p=m+p;
q=n+q;
s=s+p/q;
}
printf("s is %9.6f\n 19.000 ",s);

}
运行结果是:21
我用计算机算了下结果32多一点,那位大哥请告诉我程序错在哪里了,帮我修改一下,谢谢~~
展开
 我来答
gglddqccdc
2010-04-15 · TA获得超过4082个赞
知道小有建树答主
回答量:372
采纳率:100%
帮助的人:654万
展开全部
程序修改如下:
#include "stdio.h"
main()
{
int i;
float m=2,n=1,p=3,q=2,s=2.0/1.0+3.0/2.0;
clrscr();
for(i=1;i<=9;i++)
{
m=m+p;
n=n+q;
s=s+m/n;
p=m+p;
q=n+q;
s=s+p/q;
}
printf("s is %9.6f\n",s);
getche();
}
几点说明:
1、做除法运算必须注意整除的问题,你不想整除,就不能写成整数形式,所以要写成:s=2.0/1.0+3.0/2.0;,同样道理,m=2,n=1,p=3,q=2不能定义在int处,必须定义在float处。
2、clrscr();这是个清屏函数,把过去的结果清除,不至于混淆,以便调试。
3、getche();这是个等待按键的函数,使得输出窗口不至于立即关闭,可马上查看结果,也是方便调试。按任意键即可回到运行前的窗口。
4、不知你为什么连写两个求和,繁琐的步骤应该尽可能交给计算机去完成。如果感到应该改进的话,下面的程序供你参考:
#include "stdio.h"
main()
{
int i;
float m=1,n=1,t,s=0;
clrscr();
for(i=1;i<=20;i++)
{
t=m+n;
s=s+t/n;
m=n;
n=t;
}
printf("s is %9.6f\n",s);
getche();
}
这样的写法,完全符合斐波那契数列的展开顺序。而且想求到第几项,就直接写几,即使想求到某个奇数的和也没有问题。
匿名用户
2010-04-15
展开全部
int i;
float m=2,n=1,p=3,q=2;
float s=2.0/1.0+3.0/2.0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式