在线编译器 C

#include <stdio.h> #include <math.h> float cosinus(float x) { float sum=0.0f; x = (x*3.14159)/180; float elem=1.0f; float fact=1.0f; float xpow=1.0f; int n=0; int znak=0; do{ sum+=elem; fact*=(n+1)*(n+2); xpow*=x*x; znak=-znak; n+=2; elem=znak*(xpow/fact); }while(fabs(elem)>0.001f); return sum; } int main() { printf("%f",cosinus(45)); return 0; }
这段代码试图用泰勒级数计算余弦值,但结果不正确。主要问题是阶乘和幂的计算方式有误,导致级数项不准确。

- 阶乘 `fact` 的更新方式不对。对于余弦级数,分母是 (2n)!,但你的代码中 `fact*=(n+1)*(n+2)` 在 n=0 时乘了 1*2,得到 2,而实际第一项分母是 0! = 1。你需要重新考虑阶乘的初始值和更新时机。
- 幂 `xpow` 的更新也有问题。余弦级数中 x 的幂是 x^(2n),但你的代码在 n=0 时 xpow 已经是 1,然后每次循环乘以 x^2,这会导致第一项之后幂次正确,但第一项本身没有使用正确的幂。注意循环体内 `sum+=elem` 是在更新之前执行的,所以第一项 elem 初始为 1 是正确的,但后续项的计算顺序需要调整。