在线编译器 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(60)); return 0; }
这段代码试图用泰勒级数计算余弦值,但结果不正确。代码将角度转换为弧度后,通过循环累加级数项直到项足够小。

- 阶乘计算有误:`fact*=(n+1)*(n+2)` 在第一次循环时 n=0,计算的是 1*2=2,但余弦级数的第一项(n=0)分母应为 0! = 1。循环结构导致阶乘从第二项开始才正确,第一项的分母被错误地乘了2。
- 变量 `znak` 初始值为0,第一次循环时 `znak = -znak` 仍为0,导致第一项符号为0。应该初始化为1,使第一项为正。