鱼C论坛

 找回密码
 立即注册
查看: 983|回复: 3

[已解决]求幂级数展开的部分和问题

[复制链接]
发表于 2020-4-16 15:52:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

答案一直错误,不知道逻辑哪错了
最佳答案
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-16 16:07:54 | 显示全部楼层
题目乱码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-16 16:14:54 | 显示全部楼层
sunrise085 发表于 2020-4-16 16:12
按照你的逻辑修改的程序如下。
你的程序实在太冗余了

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表