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

#include <stdio.h> float sinus(float x) { float pi = 3.1415926f; float xrad; xrad = x * pi / 180; float sin, up = xrad, down = 1, n = 1, znak = -1, sum = xrad; while (floatabs(sin) > 0.0001){ 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() { float n; scanf("%f", &n); printf("%.3f", sinus(n)); return 0; }
这段代码试图用泰勒级数计算正弦函数,但存在几个问题。

首先,`floatabs` 不是标准C函数,应该是 `fabs` 或 `fabsf`。其次,循环条件 `while (floatabs(sin) > 0.0001)` 中 `sin` 变量在第一次判断时还未被赋值(因为循环体里才计算 `sin`),这会导致未定义行为。另外,级数项的计算公式有误:`up` 的更新应该使用弧度值 `xrad` 而不是角度值 `x`。

- 检查 `floatabs` 的拼写,C语言中求浮点数绝对值应使用 `fabsf`(需要包含 `<math.h>`)或自己实现。
- 思考循环的初始条件:第一次进入循环时 `sin` 还没有值,应该先计算第一项再判断是否继续循环,或者改用 `do-while` 结构。