老规矩先上代码。
#include<stdio.h>
int main()
{
double a=2,b=1,i,sum=0,c;
for(i=0;i<20;i++)
{
sum+=a/b;
c=a;
a=a+b;
b=c;
}
printf("前20项的和为:%lf\n",sum);
return 0;
}
在double a=2.0,b=1.0,i,sum=0,c;
这一行代码中首先double是双精度类型的数,为什么用他是因为例如3/2是有小数的,如果用int的话小数部分就被舍去了,这里用float同样也是可以的float是单精度。
然后for(i=0;i<20;i++)
做一个20个数列。
在sum+=a/b
这句语句中做了一个把数列加起来赋给sum的操作,sum+=就是sum=sum+上后面的数也就是每次的a/b的值。
c=a;
a=a+b;
b=c;
这边三行干了啥呢,首先观察函数,你会发现每一次的a就是a+b每一次的b就是原来的a那我们的思路就非常的明确了,首先我们再拿一个c来先把a赋给c,为什么呢因为下面的a变成a+b了那么b拿什么赋呢,所以我们拿a赋给c再把a+b赋给a最后把c也就是a赋给b这样就转换完成了。当然你把b先拿出来也是可以的。
最后输出的时候%lf是双精度的输出数据的类型,用%f也可以但是可能会有精度损失。