解题思路:

    首先通过拆分,可分为以下几步:


        1.实现fact()函数 ,完成阶乘

                阶乘可以看成1*2*3*..*n,  其中由1到n可以借用循环变量,

            再使用一个变量用于存储前一次的乘积,最后该变量所存储的值就是n的阶乘

            for(i=1;i<=n;i++)

                m=m*i;


        2.实现mypow()函数,完成xn次方

               xn次方可以看为n个x相乘的结果,即一个循环n次的乘法,

            注意此时x累乘后值发生变化,因用一变量存储初始x

            t=x;

            for(i=1;i<n;i++)

                x=x*t;


        3.实现奇数项为+,偶数项为-,并求和

                该功能易于实现,即奇数项乘以1,偶数项乘以-1,

                只需一个变量不断替换为相反数,再累积再变量上即可

             sum=0;

            for(i=1,t=1;i<=n;i++)

            {

                sum+=t * mypow( x,n )  / fact( n );

                t=-t;

            }



注意事项: 


1.合理使用数据类型

2.注意格式要求

参考代码:

#include <stdio.h>
double Fact(long long n)
{
	long long m=1;
	for (int i = 2; i <= n; i++)
		m=m * i;
	return m;
}

double MyPow(double x, long long n)
{
	double t = x;
	for (int i = 1; i < n; i++)
		x = x * t;
	return x;
}

int main(void)
{
	double x;
	long long n;
	double sum = 0;
	
	scanf("%lf", &x);
	scanf("%lld", &n);
	
	for (int i = 1, t = 1; i <= n; i++, t = -t)
		sum += t * MyPow(x, i) / Fact(i);
	printf("%.4lf", sum);
	return 0;
}



点赞(0)
 

0.0分

17 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 13 条评论

嗑盐要努力呀 2年前 回复TA
#include <stdio.h>
#include <math.h>>
double fact(double n)
{
	int i;
	double j=1;
	for(i=1;i<=n;i++)
	{
		j=i*j;
	
	}
		return j;
}


double mypow(double x,int n)
{
	int i;
	double m,fac;
	for(i=1;i<=n;i++)
	{	fac=fact(n);
		m=(pow((-1),i-1)*pow(x,i))/fac+m;
	}
	return m;
}
int main ()
{ int n;
double x,w;
scanf("%lf %d",&x,&n);
w=mypow(x,n);
printf("%.4lf",w);
}

输出1.000问题在哪求解
btest 2年前 回复TA
@MnT hxd,主要是你的数据类型问题,还有这几个强制转换可有可无哈
MnT 2年前 回复TA
#include <stdio.h>
#include <math.h>
int fact(int n)
{
	int i;
	double p=1;
	for(i=1;i<=n;i++)
	p=(double)p*i;
	return p;
}
int mypow(int x,int n)
{
	double y=1;
	int i;
	for(i=0;i<n;i++)
	y=(double)y*x;
	return y;
}
int main()
{
	double x,r=0,t=0,sum=0;
	int n,i,q=1;
	scanf("%lf%d",&x,&n);
	for(i=1;i<=n;i++)
	{
		q=1;
		if(i%2==0)
		{
			q=-1;
		}
		r=fact(i);
		t=mypow(x,i);
		sum=(double)sum+q*t/r;	
	}
	printf("%.4lf",sum);
}



这个哪里有问题呢??大佬们拜托拜托!!