1699 - 2004年秋浙江省计算机等级考试二级C 编程题(2)

输入一个正数x和一个正整数n,求下列算式的值。要求顶一个调用2个函数:fact(n)计算n的阶乘;mypow(x,n)计算x的n次幂(即xn),两个函数的返回值类型是double。

      x - x2/2! + x3/3! + ... + (-1)n-1xn/n!

×输出保留4位小数。

题目输入

x n

题目输出

数列和

输入/输出样例

题目输入

2.0 3

题目输出

1.3333

C语言解答

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <iso646.h>
#include <math.h>
#include <malloc.h>

double fact(int m)
{
	int i;
	double s=1;
	for (i=1;i<=m;i++)
		s*=i;
	return s;
}

double mypow(double y,int m)
{
	double z;
	z=pow(y,m);
	return z;
}

int main()
{
	double x;
	int i,n;
	double ns,xs,s,sum=0;
	scanf ("%lf %d",&x,&n);
	
	for (i=1;i<=n;i++)
	{
		ns=fact(i);
		xs=mypow(x,i);
		s=xs/ns;
		if (i%2==0)
			s*=-1;
		sum+=s;
	}
	printf ("%.4lf\n",sum);

return 0;
}

C++解答

#include<iostream>
using namespace std;

double fact(int);
double mypow(double, int);
int main()
{
	double x;
	int n;
	double sum = 0.0;
	cin >> x >> n;
	for(int i=1; i <= n; ++i){
		if(i % 2 == 1){
			sum += mypow(x, i) / fact(i);
		}else if(i % 2 == 0){
			sum -= mypow(x, i) / fact(i);
		}
	}
//	int i = 1;
//	while (i <= n){
//		
//	}
	printf("%.4f", sum);
	return 0;
}

double fact(int n){
	long f = 1;
	if(n == 0 || n == 1)
		f = 1;
		else f = fact(n-1) * n;
	return (double)f;
}

double mypow(double x, int n){
	double p = 1.0;
	if(n == 0)
		p = 1.0;
		else if (n > 0){
			p = mypow(x, n-1) * x;
		}
	return p;
}
时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题