cos(x)=x0/0!−x2/2!+x4/4!−x6/6!+⋯
double fact(int n)//计算阶乘使用递归
{
if(n==0||n==1)
return 1;
else
return n*fact(n-1);
}
double funcos( double e, double x )
{
double sum=1;//和的第一个值是1
int t;
for(int i=1; ;i++)
{
t=2*i;//这里控制次方
sum+=pow(-1,i)*pow(x,t)/fact(t);//用pow(-1,i)控制加减法
if(pow(x,t)/fact(t)<e)//若控制到小于e,直接跳出该循环
break;
}
return sum;
}
int main()
{
double e, x;
scanf("%lf %lf", &e, &x);
printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
return 0;
}
“精确到最后一项的绝对值小于e”这句话是解题关键,每次都要判断值的大小,一旦发现小于e就可以直接结束循环返回sum值。我比pta的题多了一个阶乘函数,这样写看起来比较好看。