猿头猿脑 发表于 2021-10-23 21:55:54

为什么调试时一轮循环结束后p的值会为零?这个代码用来计算sinx的

本帖最后由 猿头猿脑 于 2021-10-23 22:00 编辑

#include<stdio.h>
#include<math.h>
int main()
{
        printf("please input x\n");
        double x = 1, y = 0, a = 1.0, b=1 , z=1;
        double n = 1,p=0;
        int i=1,s = 1;
        scanf_s("%lf", &y);
        while (fabs(n) > 1e-7)
        {
                a = a * i;//循环1!,2!,3!
                x = x * y;//循环x,x^2,x^3.
      if (i % 2 != 0)//当i为奇数时把值赋给b和z
                {       
                        b = a;
                        z = x;
                }
                n = (z / b) * s;//sinx=x-x^3/3!+x^5/5!........
                s = -s;
                p += n;
      i++;
        }
        printf("sin(x)=%lf", p);


        system("pause");
        return 0;
}

大马强 发表于 2021-10-23 22:20:32

n = (z / b) * s;
你这句让n 一直为上轮p的相反数,导致每两轮p 都为0
页: [1]
查看完整版本: 为什么调试时一轮循环结束后p的值会为零?这个代码用来计算sinx的