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

#include <stdio.h> float sinus(float x) { float sin, up = x, down = 1, n = 1, znak = -1, sum = x; sin = x; while ((up/down) > 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; }
这段代码试图用泰勒级数计算正弦值,但存在几个关键问题。

首先,循环条件 `(up/down) > 0.001` 在第一次迭代时 `up/down` 可能已经小于0.001,导致循环根本不执行,直接返回初始的 `sum = x`。其次,变量 `sin` 被重复赋值,但每次只存储当前项的值,没有累加。

- 检查循环条件:你希望循环继续的条件是当前项的绝对值大于精度阈值,但第一次计算项之前,`up/down` 的值是 `x/1`,如果 `x` 很小,循环可能直接跳过。思考如何确保至少执行一次项的计算和累加。
- 注意变量 `sin` 的用途:每次循环中你计算了新的项 `sin = up/down`,但之前计算的项没有被保留。你需要将每一项累加到 `sum` 中,而不是覆盖。