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

2024-10-30 00:55:42
推荐回答(2个)
回答1:

程序修改如下:
#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();
}
这样的写法,完全符合斐波那契数列的展开顺序。而且想求到第几项,就直接写几,即使想求到某个奇数的和也没有问题。

回答2:

int i;
float m=2,n=1,p=3,q=2;
float s=2.0/1.0+3.0/2.0;