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

#include <stdio.h> float sinus(float x) { float sin, up = x, down = 1, n = 1, znak = -1, sum = x; sin = x while (sin > 0.001) { up = up * x * x; down = down * (n + 1) * (n + 2); sin = up / down; n += 2; sum = sum + znak * sin; znak = znak * (-1); } return sum; } int main() { int n; scanf("%d", &n); printf("%.3f", sinus(n)); return 0; }
这段代码试图用泰勒级数计算正弦值,但存在几个问题。程序从用户输入一个整数,然后计算该整数的正弦值并保留三位小数。

- 第7行 `sin = x` 后面缺少分号,会导致编译错误。
- while循环的条件 `sin > 0.001` 有问题:sin变量在循环中被更新,但初始时sin等于x,如果x本身小于0.001,循环根本不会执行,直接返回x作为结果,这不对。而且循环条件应该基于当前项的大小,而不是sin变量本身。
- 泰勒级数展开式中的项是交替正负的,但你的变量znak初始为-1,第一项(x)之后的第一项应该是负的,但你的代码中第一项之后的第一项(即x^3/3!)的符号是znak * sin,其中znak=-1,所以第一项之后的项符号正确,但初始项x没有乘以znak,这没问题。不过要注意,当x为负数时,初始项x已经是负的,后续项的符号处理可能仍正确,但循环条件判断会出问题。
- 输入是整数,但sinus函数期望浮点数,虽然C会隐式转换,但如果你输入角度值(如30度),这里直接当作弧度计算,结果会不对。不过这不是主要错误。