一道C语言的编程题 ~~求高手解答

2024-11-23 01:33:36
推荐回答(2个)
回答1:


#include 

#include 

const double eps = 1e-6;

double fact(int i)//求参数i的阶乘阶乘的函数

{

    double n=1;

    while(i>1)

    {

        n *= i;

        i--;

    }

    return n;

}

int main(void)

{

    double sum=0, S, Sn;

    int i, j, m;

    for (j=0; j<4; j++,sum=0)//4个测试点

    {

        scanf("%lf", &S);

        for (i=1; ;i++)

        {

            if (i%2 == 0)

                Sn = -1 * pow(S, 2*i-1) / fact(2*i-1);//pow函数是求S的2*i-1次方

            else

                Sn = pow(S, 2*i-1) / fact(2*i-1);


            if (fabs(Sn) < eps)//如果该项的绝对值小于精度,那么就要退出循环了,

            {

                m = i-1;//m要记录的是最后一个大于精度的数的项数,所以是i-1

                break;//退出当前的循环

            }

            else

                sum += Sn;

        }

        printf("%d,%.6lf\n", m, sum);

    }

    return 0;

}

回答2:

就是F%前面加上你要精确到的位数就好了