【代码】
#include<stdio.h>
#include<math.h>
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这样需要循环初始化的值放在循环外面。一定要理清楚逻辑。