在线编译器 C

#include <stdio.h> float factorial(int n) { float result = 1; for (int i = 1;i <= n; i++){ result *= i; } return result; } float ctenehb( float m, int p ){ float result_1 = 1; for (int j = 1; j <= p; j++){ result_1 *= m; } return result_1; } float modylb(float q) { if (q < 0 ) { return -q; } return q; } float cosinus(float x){ float rlen = 1; int plus = 1, n = 0 ; float cymma = 0; while (modylb(rlen) > 0.001 ) { cymma += rlen; n += 2; plus *= -1; rlen = plus * (ctenehb( x, n )/factorial(n)); } return cymma; } int main() { printf("%0.3f", cosinus(0.866) ); return 0; }
这段代码实现了一个计算余弦函数近似值的程序,使用泰勒级数展开。它包含了几个辅助函数:计算阶乘、幂运算、绝对值,以及主函数cosinus通过循环累加级数项直到项小于0.001。

- 在cosinus函数中,循环的初始条件有问题。第一项(n=0时)应该是1,但你的代码中rlen初始为1,然后直接进入循环累加,接着n增加2,这样第一项被正确加了,但后续的项计算时n已经变成了2,导致第一项之后的项都从n=2开始计算,缺少了n=0对应的项。实际上应该先计算第一项,再进入循环处理后续项。

- 泰勒级数中,余弦的项是(-1)^k * x^(2k) / (2k)!,其中k从0开始。你的循环结构让n从0开始,但每次循环后n增加2,这会导致项的顺序错乱。建议重新考虑循环的初始化和更新方式,确保每一项的指数和阶乘参数对应正确的k值。