在线编译器 C

#include <stdio.h> float cosinus(float x) { float a = 1, sum = 1; int n = 1; while (a > 0.001 || a < -0.001) { a = -a * x * x / (n * (n + 1)); sum = sum + a; n = n + 2; } return sum; } int main() { printf("%.3f", cosinus(45)); return 0; }
这段代码试图计算余弦函数 cos(x) 的近似值,但存在几个问题。

首先,代码使用泰勒级数展开来近似 cos(x),但输入角度 45 被当作弧度处理,而实际上 45 很可能是角度值,需要转换为弧度。其次,循环条件 `while (a > 0.001 || a < -0.001)` 的写法虽然能工作,但更常见的写法是检查绝对值。更重要的是,泰勒级数的项递推公式和循环更新逻辑有错误。

- 检查泰勒级数中每一项的符号和分母:当前项 a 的递推公式 `-a * x * x / (n * (n + 1))` 中,分母的 n 和 n+1 是否正确对应阶乘?考虑一下 cos(x) 级数中分母应该是 (2k)!,而你的 n 从 1 开始每次加 2,这会导致分母计算错误。
- 循环中 n 的初始值和更新方式:你的 n 从 1 开始,每次加 2,但级数中每一项的分母是 (2k)!,其中 k 从 0 开始。思考如何让 n 正确表示阶乘中的数值。