Онлайн компилятор 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 = n * (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; }
这段代码试图用泰勒级数计算正弦值,但存在几个关键问题。

首先,变量 `sin` 的初始值设为1,但循环条件 `while (sin > 0.001)` 依赖于这个初始值。第一次循环时 `sin` 被重新计算,但初始值1可能让循环提前结束或行为异常。其次,分母的计算公式 `down = n * (n + 1) * (n + 2)` 不符合正弦级数中阶乘的规律,正弦级数的分母应该是 `(2k+1)!` 的形式。

- 检查循环条件:`sin` 的初始值应该是什么?循环应该基于当前项的大小还是其他条件来控制?
- 检查分母公式:正弦级数的第k项(从0开始)分母是 `(2k+1)!`,你的 `n` 从1开始每次加2,但分母计算没有体现阶乘的累积关系。