C语言 我不知道如何修复代码以获得结果



我编写了一个代码,但不知道如何强制它工作。我确信这个问题是在循环的某个地方,但不知道如何解决它。这是一个任务:编写一个程序来近似计算函数Y(x)的值0 <| x | <用S(x)的泰勒级数展开。求函数的近似值,误差小于ε>

这是我的代码:

`#include <stdio.h>
#include <math.h>
int main(){
double x, E;
printf("x: ");
scanf("%lf", &x);
printf("E: ");
scanf("%lf", &E);
double Yx = sin(x);
double Sx = 0;
if(fabs(x) >= 1 && E >= 1e-4)
printf("Change x and e");
else if(E >= 1e-4)
printf("Change e");
else if(fabs(x) >= 1)
printf("Change x");
else{
for(int k = 0;;k++) {
double f2 = 2 * k + 1;
for(int l = 1; l <= k; l++)
f2 = f2 * l;
double S2 = pow(-1, k) * (pow(x, (2 * k + 1)) / f2);
if(fabs(Sx-Yx) <= E)
break;
Sx= Sx + S2;
}
printf(" Y(x) = %lfn", Yx);
printf(" S(x) = %lfn", Sx);
printf(" |S(x)-Y(x)| = %lf n", fabs(Yx-Sx));
return 0;
}
}`

这段代码没有正确计算期望的阶乘:

double f2 = 2 * k + 1;
for(int l = 1; l <= k; l++)
f2 = f2 * l;

以后,在调试器中逐步执行程序或插入printf语句以显示变量的值。如果在该循环之后打印f2的值,则表明它不是期望的值。