【代码】
#include#include double sin(double x) { int flag = 1,i,n=1,k; double sum = 0, item ; do { double fz = 1, fm = 1; for (i = 1; i <= 2 * n - 1; i++) { fz *= x; fm *= i; } item = fz / fm; sum += flag * item; flag = (-1) * flag; n++; } while (fabs(item) >=1e-6); return sum; } int main() { double x; printf("请输入负无穷到正无穷之间的一个数:n"); scanf_s("%lf", &x); printf("sin(x)=%lf", sin(x)); return 0; }
【解释】
这道题思路很清楚,就是定义一个函数去求,由于要保证最后一项精度在10^-6,所以我们用do while循环来做,然后在循环里面是我们主要的结构,里面有两个核心内容,一个是求x的2n-1次方,一个是求2n-1的阶层,可以放到一个for循环里面求,在for循环后面把求得值整合起来加到sum,条件满足时函数返回sum值。
值得注意的是fz和fm两个变量要放在do循环里,for循环前面进行初始化,这样每次do循环依次,fz与fm回归初始值,这样才不会出现累乘了多余值情况。不要把fz和fm这样需要循环初始化的值放在循环外面。一定要理清楚逻辑。



