观察这些分数的分子分母:
分母:1,2,3,5,8,13.........可发现前两个数相加等于后一个数。即1+2=3,2+3=5,3+5=8,5+8=13,是一段"斐波那契数列"(即a[i]=a[i-1]+a[i-2])。
分子:可以观察分子也是一段斐波那契数列。
思路:1.运用循环与斐波那契数列规律计算出每个分母,并储存在数组a[20]
2.同上将20个分数的每个分数分子求出,并储存在数组b[20]
3.再定义一个数组c[20],将分子分母按序组合储存再c中,例如第一个分数=c[0]=分子/分母=b[o]/a[o].
4.如此一来20个分数都储存再了数组c[20]中,将数组c内所有元素相加即可 。
下面是代码部分:
#include<stdio.h>//需要引入的文件
int main() {
double a[20];//定义一个数组储存分数的分母
double b[20];//定义一个数组储存分数的分子
int i;
a[0]=1,a[1]=2;//先给前两个分数的分母赋值,方便下面使用斐波那契数列规律:a[i]=a[i-1]+a[i-2]求后面的分数的分母
for(i=2;i<20;i++)
{
a[i]=a[i-1]+a[i-2];
}
//此段代码是为了利用斐波那契数列规律求出20个分数每个分数的分母,并储存在数组a[0],a[1],a[2].....a[19]中。
b[0]=2;b[1]=3;
for(i=2;i<20;i++)
{
b[i]=b[i-1]+b[i-2];
}
//此段代码是为了求出二十个分数每个分数的分子,并一一储存在b[0],b[1]......b[19]中。
double c[20];//再定义一个数组,作用是上面求出的分子分母对应组合还原为分数,因为是分数,所以类型必须为实型。
for(i=0;i<20;i++)
{
c[i]=b[i]/a[i];//因为此处涉及到用除号,所以数组a[]与b[]也必须为实型。
}
//此段代码是为了将分子分母对应组合并储存在数组c中,例如b[0]/a[0]=2/1,b[1]/a[1]=3/2,与原式一样。
double sum=c[0];
for(i=1;i<20;i++)
{
sum=sum+c[i];
}
//将数组c中元素相加
printf("%.6lf",sum);
return 0;
}
目前还想不出更简洁的写法,若有更简洁易取的方法,欢迎大家分享在评论区互相学习借鉴。。。。。。。