Онлайн компилятор C

#include <stdio.h> float factorial(int n) { float result = 1; for (int i = 1;i <= n; i++){ result *= i; } return result; } float ctenehb( int m, int p ){ float result_1 = 1; for (int j = 1; j <= p; j++){ result_1 *= m; } return result_1; float modylb(int q) { if (q < 0 ) { return -q; } return q; } } float cosinus(float x){ float rlen = 1; int plus = 1; float cymma = 0, n=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; }
这段代码试图通过泰勒级数计算余弦值,但存在语法错误和逻辑问题。代码中定义了几个辅助函数:`factorial`计算阶乘,`ctenehb`计算幂(函数名可能是俄语拼音),`modylb`计算绝对值。`cosinus`函数用循环累加级数项,直到项绝对值小于0.001。

- 第14行和第18行之间的大括号不匹配。`modylb`函数定义后多了一个多余的右花括号,导致`cosinus`函数定义被意外包含在`modylb`内部。检查花括号的配对位置。
- 在`cosinus`函数中,`rlen *= plus * (ctenehb( x, n )/factorial(n))`这一行逻辑有误。泰勒级数每一项的符号由`plus`控制,但这里将`plus`乘到了分子上,导致后续项的计算被符号重复影响。思考如何正确交替正负号,以及每一项的分子和分母应该是什么。