Онлайн компилятор 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",consius(45)); return 0; }
这段代码试图用泰勒级数计算余弦值,但存在几个问题。

首先,主函数中调用的是 `consius`,但定义的函数名是 `cosinus`,这会导致编译错误。

其次,在计算阶乘时,`fact*=(n+1)*(n+2)` 的逻辑有问题。当 n=0 时,fact 乘以 1*2 得到 2,但此时应该对应的是 2! 而不是 0!。后续的迭代也会因为累积方式错误导致阶乘值不正确。

- 检查函数名是否一致,确保调用时使用的名称与定义匹配。
- 思考阶乘的计算方式:每一项的分母应该是 (2n)!,而你的循环中每次 n 增加 2,需要重新设计如何正确累积阶乘值。