Онлайн компилятор C

#include <stdio.h> float sinus(float x) { float sin, up = x, down = 1, n = 1, znak = -1, sum = x; sin = x; while (sin > 0.001) { up = up * x * x; down = down * (n + 1) * (n + 2); sin = up / down; n += 2; sum = sum + (znak * sin); znak = znak * (-1); } return sum; } int main() { int n; scanf("%d", &n); printf("%.3f", sinus(n)); return 0; }
这段代码试图用泰勒级数计算正弦值,但存在几个关键问题。

- 循环条件 `while (sin > 0.001)` 有问题。`sin` 是当前项的值,但循环应该基于当前项的绝对值是否大于某个阈值,而不是直接比较 `sin`。而且初始时 `sin` 等于 `x`,如果 `x` 很大,循环可能直接不执行或执行次数不对。

- 变量 `n` 的初始值和更新逻辑有误。泰勒级数中分母的阶乘增长方式与你的 `down` 更新不匹配。你从 `n=1` 开始,每次加2,但分母的更新公式 `down = down * (n+1) * (n+2)` 在第一次迭代时计算的是 `1 * 2 * 3`,而实际需要的分母应该是 `3!`(即6),这看起来正确,但后续迭代会出错,因为 `n` 的更新顺序和分母计算顺序需要仔细核对。