根据计算公式,计算前N项和

编写程序根据用户输入的x和n的值,利用下面公式计算s的近似值,要求输出结果小数点后保留4位。

请问这个要怎么修改?最后的输出结果是错的

img

img

把分子和分母的计算方法修改下,下面是我的一个实现,供参考:

#include <stdio.h>

int main(void){
    
    int i=1,n,k=-1;
    double x,s=1,t=1,power=1,factorial=1;
    scanf("%lf%d",&x,&n);
    while(i<=n){
        power*=x; //分子,幂次方 
        factorial*=i; //分母,阶乘 
        t=power/factorial ; //分子除以分母 
        s+=k*t; // 把每一项乘以系数后累加到和中 
        k=-k; // 系数变换 
        i++;  // i++,以便计算下一项的阶乘 
    }
    
    printf("%.4f",s);
    return 0;
} 

img

泰勒展开公式是一种用于计算函数的近似值的方法。它可以表示函数f(x)在点x0附近的近似值,并且当x足够接近x0时,近似值会越来越准确。

泰勒展开公式可以表示为:f(x) ≈ f(x0) + f'(x0)(x - x0) + (f''(x0)/2!) (x - x0)^2 + (f'''(x0)/3!) (x - x0)^3 + …

在这里,f(x0)表示函数f(x)在点x0的值,f'(x0)表示函数的一阶导数在点x0的值,f''(x0)表示函数的二阶导数在点x0的值,以此类推。

#include <stdio.h>
#include <math.h>
int main(void) {
    double x, n, s, term;
    // 定义x、n、s、term变量
    int i;
    // 定义循环计数变量i
    printf("Enter x and n: ");
    // 提示用户输入x和n的值
    scanf("%lf%lf", &x, &n);
    // 读入x和n的值
    s = 0;
    // 初始化和为0
    term = 1;
    // 初始化项为1
    for (i = 1; i <= n; i++) {
        // 从1到n循环
        s += term;
        // 累加项
        term *= x / i;
        // 更新项
    }
    printf("Result: %.4f\n", s);
    // 输出结果,保留4位小数
    return 0;
}