Online Compiler C

#include <stdio.h> float floatabs(float y){ if(y<0){ y=-y; }else{ y=y; } return y; } float cosinus(float x) { float pi = 3.1415926f; float xrad; xrad = x * pi / 180; float cos=xrad, up = xrad, down = 1, n = 0, znak = -1, sum = 1; while (floatabs(cos) > 0.0001){ up = up * xrad * xrad; down = down * (n + 1) * (n + 2); cos = up / down; n += 2; sum = sum + (znak * cos); znak = znak * (-1); } return sum; } int main() { float n; scanf("%f", &n); printf("%.3f", cosinus(n)); return 0; }
这段代码试图用泰勒级数计算余弦函数,但存在逻辑错误。代码将初始的 `cos` 设为 `xrad`,但泰勒级数的第一项应该是1,而循环中又用 `cos` 作为当前项并累加到 `sum`,导致计算顺序混乱。

- 检查泰勒级数展开式:cos(x) = 1 - x^2/2! + x^4/4! - ...。你的 `sum` 初始化为1是正确的,但循环中 `cos` 的初始值不应是 `xrad`,而应该是第一项之后的下一项(即 -x^2/2!)。思考如何正确初始化当前项 `cos` 以及 `n` 的起始值。
- 注意 `up` 和 `down` 的更新顺序:每次循环中,`up` 和 `down` 应先更新为下一项对应的值,再计算 `cos`。当前代码在第一次循环时,`up` 和 `down` 从 `xrad` 和 1 开始,但第一项实际是 `xrad^2/2!`,所以需要调整初始值或更新逻辑。