在线编译器 C

#include <stdio.h> float floatabs(float y){ if(y<0){ y=-y; }else{ y=y; } return y; } 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` 函数虽然正确,但 `sinus` 函数中 `while` 循环的条件使用了未初始化的 `sin` 变量。`sin` 在第一次判断时还没有被赋值,这会导致未定义行为。

其次,泰勒级数的项计算有误。在循环中,`up` 被乘以 `x * x`,但这里应该乘以 `xrad * xrad`,因为级数展开是基于弧度值的。同时,`down` 的更新方式也不正确,分母应该是阶乘形式。

- 检查 `while` 循环的初始条件:`sin` 变量在第一次循环前没有值,应该先计算第一项再判断。
- 检查泰勒级数中每一项的分子和分母:分子应该是 `xrad` 的奇次幂,分母应该是对应阶乘,注意 `xrad` 是弧度值。