利用泰勒级数计算sinx的值,要求最后一项的绝对值小于1e-5,并统计出此时累加了多少项。示例Input x:3↙sin(x)=0.141,count=9

大神们能不能看看我这个为啥不对,谢谢

#include <stdio.h>
#include<math.h>
int main()
{
 int i,j;//循环变量
    int flag=1;  //符号位
    double term;   //分数
    long n=1,counter=0;   // n为 次数 ,counter为次数
    double sin=0;   //有符号的分数
    double x;  //x为输入量
    double s=1,f;//s为分数的分子,f为分母
    f=1;
    printf("Input x:\n");
    scanf("%lf",&x);
   do
   {
       for(j = 1;j <= n;j++)
           s*= x;
       for(i=1;i<n;i++)
           f=f*(f+1);
       term=s/f;
       sin+=flag*term;
       n+=2;
       flag=-flag;
       counter++;

   }while(term<1e-5);
      printf("sin(x)=%.3f,count=%d\n",sin,counter);
   return 0;
}

(1)do{}中,需要把s和f重置为1
(2)求阶乘写错了
(3)while()中应该是while(term>1e-5); 应该是大于,你写成小于了
代码修改如下:

#include <stdio.h>
#include<math.h>
int main()
{
    int i,j;//循环变量
    int flag=1;  //符号位
    double term;   //分数
    long n=1,counter=0;   // n为 次数 ,counter为次数
    double sin=0;   //有符号的分数
    double x;  //x为输入量
    double s=1,f;//s为分数的分子,f为分母
    f=1;
    printf("Input x:\n");
    scanf("%lf",&x);
    do
    {
        s=1; //添加
        f=1; //添加
        for(j = 1;j <= n;j++)
            s*= x;
        for(i=1;i<=n;i++) //修改
            f*=i;//f*(f+1);
        term=s/f;
        sin+=flag*term;
        n+=2;
        flag=-flag;
        counter++;
    }while(term>1e-5); //修改
    printf("sin(x)=%.3f,count=%d\n",sin,counter);
    return 0;
}



#include <stdio.h>
#include<math.h>
 
double fact(int n)
{
    if (n == 0)
        return 1;
    return fact(n - 1)*n;//求1-(2*n-1)的阶层
}
double fact_2(int n)
{
    long sum = 1;
    while (n > 1)
    {
        sum *= n;
        n--;
    }
    return sum;
} //第二种计算阶层的方法
int main()
{
    int n = 1, j = 1;//n是项数,j是正负
    double x, sinx = 0, order = 1;//x是项,sinx是结果,order是项值
    scanf("%lf", &x);
    while (order >= 1e-5) //精度
    {
        order = pow(x, 2 * n - 1) / fact(2 * n - 1);
        sinx += j * order;
        j = -j;
        n++;
    }
    printf("sinx=%lf,次数%d", sinx,n-1 );
    getchar();
    getchar();
    return 0;
}