Online Compiler C

#include <stdio.h> float floatabs(float y){ if(y<0){ y=-y; }else{ y=y; } return y; } float cosinus(float x) { float pi = 3.1415926f; float xrad; xrad = x * pi / 180; float cos=xrad, up = xrad, down = 1, n = 1, znak = -1, sum = 1; while (floatabs(cos) > 0.0001){ up = up * xrad * xrad; down = down * (n + 1) * (n + 2); cos = up / down; n += 2; sum = sum + (znak * cos); znak = znak * (-1); } return sum; } int main() { float n; scanf("%f", &n); printf("%.3f", cosinus(n)); return 0; }
这段代码试图通过泰勒级数计算余弦值,但存在几个关键问题。

首先,`cos`变量的初始值设置不正确。在循环中,`cos`被用作当前项的值,但初始赋值为`xrad`,这会导致第一次迭代时计算错误。泰勒级数的第一项应该是1,而不是xrad。

其次,循环条件`floatabs(cos) > 0.0001`检查的是当前项的绝对值,但初始`cos`是xrad,如果输入角度较大,xrad可能已经大于0.0001,导致循环行为异常。

- 检查`cos`变量的初始值应该是什么?泰勒级数中第一项是1,后续项才通过递推计算。
- 思考循环条件应该检查什么?通常检查当前项是否足够小,但初始项需要单独处理。