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

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

代码中 `sinus` 函数使用 `while (sin > 0.001)` 作为循环条件,但 `sin` 变量初始值为1,而实际需要比较的是当前项的大小。另外,循环中 `sin` 变量被重新赋值为当前项的值,这会导致循环条件判断的是当前项而非累计和。

- 检查循环条件:应该用当前项的大小(即 `up/down`)与精度比较,而不是用名为 `sin` 的变量。注意变量命名容易混淆。
- 检查初始值:泰勒级数第一项是 `x`,你的 `sum` 初始为 `x` 是正确的,但 `sin` 初始值设为1会导致第一次循环条件判断错误。