PTA 6-2 疑难杂症求解


#include <stdio.h>
#include <math.h>
double funcos( double e, double x );
int main()
{
    double e, x;
    scanf("%lf %lf", &e, &x);
    printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
    return 0;
}
/*
你的代码将被嵌在这里
*/
double funcos( double e, double x )
{
    int i,j;
    double pwr;
    int factorial = 1;
    double cos = 0;
    double last_cos = 0;
    for (i=0;;i+=2)
    {
        printf("ok");
        factorial = 1;
        for (j=1;j<i;++j)
        {
            factorial*=j;
        }
        pwr = pow(x,i);
        last_cos = pwr/factorial;
        if((last_cos>0 && last_cos<e) || (last_cos<0 && -last_cos<e))
        cos += last_cos;
        else
        break;
    }
    return cos;
}

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/986268673836142.jpg "#left")


```**这道题这样写哪里不对,结果总是0,求原因**********
double funcos( double e, double x )
{
    int i,j;
    double pwr;
    int factorial = 1;
    double cos = 0;
    double last_cos = 0;
    for (i=0;;i+=2)
    {
        factorial = 1;
        //阶乘到i
        for (j=1;j<=i;++j)
        {
            factorial*=j;
        }
        pwr = pow(x,i);
        last_cos = pwr/factorial;
        cos += last_cos;
        //最后一项小于e就停止计算
        if((last_cos>0 && last_cos<e) || (last_cos<0 && -last_cos<e))
        break;
    }
    return cos;
}