习题4-3 求分数序列前N项和

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:
20
结尾无空行
输出样例:
32.66
结尾无空行
#include<stdio.h>
int main(){
	
	int n,i;
	double numerator,denominator;
    /*当n的值较大的时,分子和分母会超过int型的范围,所以需要定义double型*/
	double sum,item,flag;
	sum=0;
	scanf("%d",&n); //接受函数(用户输入),别忘了打&!!!,好多次都犯这个错误!
	
	if(n>=1){

	denominator=1;
	numerator=2;
	item=numerator/denominator;
	sum=sum+item;
	
	if(n>=2){
		
		for(i = 2;i <= n;i++){
	
		flag=numerator;  //引用一个变量储存前一项的分子 
		numerator=denominator+flag;  //分子=前一项分子与分母之和
		denominator=flag;  //分母=前一项分子 
		item=1.0*numerator/denominator;//需要乘以1.0转化为double型,不然是以整数型输出 
	    sum=sum+item;
	    }
    } 
            }
	printf("%.2f",sum);
	
	return 0;
}

这道提最容易犯的错误是:较大n!

自己在博客查了一下,结合自己的理解,应该是当n的值较大时,分子和分母会超出int型的范围,而double的范围会很大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值