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

我的程序是:#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多一点,那位大哥请告诉我程序错在哪里了,帮我修改一下,谢谢~~

程序修改如下:
#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();
}
这样的写法,完全符合斐波那契数列的展开顺序。而且想求到第几项,就直接写几,即使想求到某个奇数的和也没有问题。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-15
int i;
float m=2,n=1,p=3,q=2;
float s=2.0/1.0+3.0/2.0;
相似回答