首先我们来看一下题目,这个题目相对于其他的求和较为难一点:
计算的序列为2/1+3/2+5/3+8/5+.....的前n项的和。
注意的几点是:从序列的第二项起,每一项的分子是前一项分子和分母的和,而分母是前一项的分子。
输入格式:输入一个在一行中给出一个正整数N。
输出格式:在一行中输出部分和的值,精确到小数点后两位,题目保证计算结果不超过双精度范围。
在代码中具体看一下:
同时注意,当分子分母定义为整数的时候,当我们的n取值为100的时候,就不能进行运算了
但是,当我们变成double的时候,也是有上界的,输入2000的时候已经成为无效的浮点数了。
#include<stdio.h>
int main()
{
int n;
//同时注意由于整数的上界的问题,所以下面的这两个数都是用double的类型,来防止超出界限。
double dividend, divisor;//前者是分子,后者是分母。
double sum = 0.0;
int i;
double t;
scanf_s("%d", &n);
dividend = 2;
divisor = 1;
//从第一项开始循环。
for (i = 1; i <= n; i++)
{
//先计算当前这两项的和。
sum += dividend / divisor;
//把分母给分子,原来的分母变成原来的分子加分母。
//这里和交换两个数据的顺序的方法几乎一致,就是注意分子要变成分子加分母。
t = dividend;
dividend = dividend + divisor;
divisor = t;
}
printf("%lf %lf\n",dividend,divisor);
printf("%.2f\n", sum);
return 0;
}