第一种:我们发现其实分子和分母都是斐波那契数列(从第三项开始,每一项等于前两项之和),所以我们可以定义两个数组,分别来存放分子和分母。然后两个数组里的数按位置相除累加。
参考代码:
#include<stdio.h>
int main ()
{
int N;
double total = 0;
scanf("%d",&N);
int a[N],b[N];
a[0] = 2,a[1] = 3; //这里需要手动输入0 1位置的值
b[0] = 1,b[1] = 2;
for(int i = 2;i < N;i++){ //按规律求出数组里的每个数
a[i] = a[i - 1] + a[i - 2];
b[i] = b[i - 1] + b[i - 2];
}
for(int i = 0;i < N;i++){
total += (double )a[i] / b[i]; 这里需要强制类型转换或者一开始定义的时候就定义成double
}
printf("%.2lf",total);
return 0;
}
第二种(不太好理解):
我们从题面中可以看到一下规律:从第二项开始,后一项的分子为前一项的分子与分母之和,分母为前一项的分子,所以我们可以从这点入手利用for循环累加。本题的难点则是在于对分子分母变化的控制。
参考代码:
#include
int main()
{
double a = 2.0,b = 1.0,c = 1.0;
double sum = 2.0;
int i,N;
scanf("%d",&N);
for(i = 1;i < N;i++)
{
b = c;
c = a;
a = a + b;
sum += a / c;
}
printf("%.2lf",sum);
return 0;
}
程序解读:
我们定义a为分子,c为分母,b为初始分母,也是中间变量,利于我们计算和理解。
因为sum的值2.0,所以for循环的循环变量也是从1开始的。方便理解循环的内部,我们先把b = c;屏蔽。根据规律,将a的值赋给c作为分母,a+b的值赋给a作为分子,我们就能得到下一项的值,然后累加到sum里面。但是就这样写,我们发现b的值始终为1.0,没有得到更新,只能正确的得到第二项的值。此时我们则要考虑如何对b的值进行正确的更新。
我们知道b的意义本质上也是分母,他决定着下一项分子的值, 由a = a + b;这句语句便知,在新的式子a/c中,c为分母,这里也就不难理解为什么会有b = c这句了。
0.0分
1 人评分
A+B for Input-Output Practice (IV) (C语言代码)浏览:551 |
奖学金 (C++代码)浏览:2056 |
C语言训练-斐波纳契数列 (C语言代码)浏览:1272 |
回文串 (C语言代码)浏览:3100 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1015 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:1292 |
用筛法求之N内的素数。 (C语言代码)浏览:685 |
1013题解浏览:596 |
A+B for Input-Output Practice (III) (C语言代码)浏览:595 |
C二级辅导-计负均正 (C语言代码)浏览:524 |