0ueen 发表于 2020-4-16 15:52:25

求幂级数展开的部分和问题

题目:
已知函数ex可以展开为幂级数1+x+x2/2!+x3/3!+⋯+xk/k!+⋯。现给定一个实数x,要求利用此幂级数部分和求ex的近似值,求和一直继续到最后一项的绝对值小于0.00001。
输入格式:x∈
输出格式:在一行中输出满足条件的幂级数部分和,保留小数点后四位。
例如:
输入:1.2
输出:3.3201

#include<stdio.h>
int main(){
        double x;
        double xk=1,sum=1;
        scanf("%lf",&x);
        double count=1;
        while(xk>0.00001||xk<-0.00001){
                double i=1,j=1;
                while(i<=count){
                        j*=i;
                        i++;
                        int cnt=1;
                        while(cnt<=count){
                                xk*=xk;
                                cnt++;
                        }
                        xk=x/j;
                }
                sum+=xk;
                count++;
        }
        printf("%.4f",sum);
        return 0;
}

答案一直错误,不知道逻辑哪错了{:10_266:}

永恒的蓝色梦想 发表于 2020-4-16 16:07:54

题目乱码了

sunrise085 发表于 2020-4-16 16:12:33

本帖最后由 sunrise085 于 2020-4-16 16:14 编辑

按照你的逻辑修改的程序如下。
你的程序实在太冗余了
#include<stdio.h>
int main(){
    double x;
    double xk=1,sum=1;
    scanf("%lf",&x);
    double count=1;
    while(xk>0.00001){
      double i=1,j=1;
      xk=1;//按照你的逻辑,每次外循环之后应该把xk恢复为1
      while(i<=count){
            j*=i;
            i++;
      }
      int cnt=1;
      while(cnt<=count){
            xk*=x;//这里应该是x的count次幂,为什么每次乘的是xk?
            cnt++;
      }
      xk=xk/j;//这里应该是幂次书除以j,为什么用x除以j
      
      sum+=xk;
      count++;
      //printf("xk=%lf,sum=%lf\n",xk,sum);
    }
    printf("%.4lf",sum);
    return 0;
}
这是帮你简化的,没必要多次循环,每次循环计算一项就可以了,下次循环在上次循环的基础上再乘一次就OK了
#include<stdio.h>
int main(){
    double x;
    double xk=1,sum=1;
    scanf("%lf",&x);
    double xx=1;
    double i=1,j=1;
    while(xk>0.00001){
      j*=i++;//求阶乘
      xx*=x;//求幂次
      xk=xx/j;//幂次除以阶乘
      sum+=xk;//求和
      //printf("xk=%lf,sum=%lf\n",xk,sum);
    }
    printf("%.4lf",sum);
    return 0;
}

0ueen 发表于 2020-4-16 16:14:54

sunrise085 发表于 2020-4-16 16:12
按照你的逻辑修改的程序如下。
你的程序实在太冗余了



谢谢{:10_298:}
页: [1]
查看完整版本: 求幂级数展开的部分和问题