第一种:我们发现其实分子和分母都是斐波那契数列(从第三项开始,每一项等于前两项之和),所以我们可以定义两个数组,分别来存放分子和分母。然后两个数组里的数按位置相除累加。
参考代码:
#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 (C语言代码)浏览:573 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:483 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:1099 |
WU-输出九九乘法表 (C++代码)浏览:1671 |
字符串的输入输出处理 (C语言代码)浏览:1005 |
整除问题 (C语言代码)浏览:526 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:401 |
上车人数 (C语言代码)浏览:713 |
回文数(一) (C语言代码)浏览:1118 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:393 |