C语言重来30:例题赏析第二部分——求前n项和
首先我们来看一下题目,这个题目相对于其他的求和较为难一点:
计算的序列为2/1+3/2+5/3+8/5+.....的前n项的和。
注意的几点是:从序列的第二项起,每一项的分子是前一项分子和分母的和,而分母是前一项的分子。
输入格式:输入一个在一行中给出一个正整数N。
输出格式:在一行中输出部分和的值,精确到小数点后两位,题目保证计算结果不超过双精度范围。
在代码中具体看一下:
同时注意,当分子分母定义为整数的时候,当我们的n取值为100的时候,就不能进行运算了
但是,当我们变成double的时候,也是有上界的,输入2000的时候已经成为无效的浮点数了。
#include
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;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
