浙大版《C语言程序设计(第3版)》练习4-7 求e的近似值 (15分)

自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。
输入格式:

输入第一行中给出非负整数 n(≤1000)。
输出格式:

在一行中输出部分和的值,保留小数点后八位。
输入样例:

10

输出样例:

2.71828180

第一次答案:
得分13/15
编译器显示:取最大值1000时无法得到正确答案。
错因:???

**

因为:用1.0/fact,而fact是int类型,把fact改成double型就可以了

13分答案:

**

#include 
int f(int n);
int main(void){
	int n;
	double sum=0.0;
	scanf("%d",&n);
	int x;
	for(x=0;x<=n;x++){
		sum+=1.0/f(x);
	}

	printf("%.8lf",sum);
	return 0;
}
int f(int x){
    int fact=1;
    int i;
	if(x==0){
		fact=1;
	}else{
		for(i=1;i<=x;i++){
			fact*=i;
		}
	}
	return fact;
}

第二次答案;满分15/15

两种方法:
①.不调用函数:

#include 
int main(void){
	int n,x,i;
	double sum=1.0,fact=1.0;
	scanf("%d",&n);
		for(x=1;x<=n;x++){
			for(i=1;i<=x;i++){
				fact*=i;
			}
			sum+=1.0/fact;
			fact=1;
		}
	printf("%.8lf",sum);
	return 0;
}

②调用函数:

#include 
double f(int n);
int main(void){
	int n;
	double sum=0.0;
	scanf("%d",&n);
	int x;
	for(x=0;x<=n;x++){
		sum+=1.0/f(x);
	}

	printf("%.8lf",sum);
	return 0;
}
double f(int x){
    double fact=1;
    int i;
	for(i=1;i<=x;i++){
		fact*=i;
	}
	return fact;
}

你可能感兴趣的:(PTA)