鱼C论坛

 找回密码
 立即注册
查看: 1207|回复: 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

  1. #include<stdio.h>
  2. int main(){
  3.         double x;
  4.         double xk=1,sum=1;
  5.         scanf("%lf",&x);
  6.         double count=1;
  7.         while(xk>0.00001||xk<-0.00001){
  8.                 double i=1,j=1;
  9.                 while(i<=count){
  10.                         j*=i;
  11.                         i++;
  12.                         int cnt=1;
  13.                         while(cnt<=count){
  14.                                 xk*=xk;
  15.                                 cnt++;
  16.                         }
  17.                         xk=x/j;
  18.                 }
  19.                 sum+=xk;
  20.                 count++;
  21.         }
  22.         printf("%.4f",sum);
  23.         return 0;
  24. }
复制代码


答案一直错误,不知道逻辑哪错了
最佳答案
2020-4-16 16:12:33
本帖最后由 sunrise085 于 2020-4-16 16:14 编辑

按照你的逻辑修改的程序如下。
你的程序实在太冗余了
  1. #include<stdio.h>
  2. int main(){
  3.     double x;
  4.     double xk=1,sum=1;
  5.     scanf("%lf",&x);
  6.     double count=1;
  7.     while(xk>0.00001){
  8.         double i=1,j=1;
  9.         xk=1;//按照你的逻辑,每次外循环之后应该把xk恢复为1
  10.         while(i<=count){
  11.             j*=i;
  12.             i++;
  13.         }
  14.         int cnt=1;
  15.         while(cnt<=count){
  16.             xk*=x;//这里应该是x的count次幂,为什么每次乘的是xk?
  17.             cnt++;
  18.         }
  19.         xk=xk/j;//这里应该是幂次书除以j,为什么用x除以j
  20.         
  21.         sum+=xk;
  22.         count++;
  23.         //printf("xk=%lf,sum=%lf\n",xk,sum);
  24.     }
  25.     printf("%.4lf",sum);
  26.     return 0;
  27. }
复制代码

这是帮你简化的,没必要多次循环,每次循环计算一项就可以了,下次循环在上次循环的基础上再乘一次就OK了
  1. #include<stdio.h>
  2. int main(){
  3.     double x;
  4.     double xk=1,sum=1;
  5.     scanf("%lf",&x);
  6.     double xx=1;
  7.     double i=1,j=1;
  8.     while(xk>0.00001){
  9.         j*=i++;//求阶乘
  10.         xx*=x;//求幂次
  11.         xk=xx/j;//幂次除以阶乘
  12.         sum+=xk;//求和
  13.         //printf("xk=%lf,sum=%lf\n",xk,sum);
  14.     }
  15.     printf("%.4lf",sum);
  16.     return 0;
  17. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-16 16:07:54 | 显示全部楼层
题目乱码了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 16:12:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-4-16 16:14 编辑

按照你的逻辑修改的程序如下。
你的程序实在太冗余了
  1. #include<stdio.h>
  2. int main(){
  3.     double x;
  4.     double xk=1,sum=1;
  5.     scanf("%lf",&x);
  6.     double count=1;
  7.     while(xk>0.00001){
  8.         double i=1,j=1;
  9.         xk=1;//按照你的逻辑,每次外循环之后应该把xk恢复为1
  10.         while(i<=count){
  11.             j*=i;
  12.             i++;
  13.         }
  14.         int cnt=1;
  15.         while(cnt<=count){
  16.             xk*=x;//这里应该是x的count次幂,为什么每次乘的是xk?
  17.             cnt++;
  18.         }
  19.         xk=xk/j;//这里应该是幂次书除以j,为什么用x除以j
  20.         
  21.         sum+=xk;
  22.         count++;
  23.         //printf("xk=%lf,sum=%lf\n",xk,sum);
  24.     }
  25.     printf("%.4lf",sum);
  26.     return 0;
  27. }
复制代码

这是帮你简化的,没必要多次循环,每次循环计算一项就可以了,下次循环在上次循环的基础上再乘一次就OK了
  1. #include<stdio.h>
  2. int main(){
  3.     double x;
  4.     double xk=1,sum=1;
  5.     scanf("%lf",&x);
  6.     double xx=1;
  7.     double i=1,j=1;
  8.     while(xk>0.00001){
  9.         j*=i++;//求阶乘
  10.         xx*=x;//求幂次
  11.         xk=xx/j;//幂次除以阶乘
  12.         sum+=xk;//求和
  13.         //printf("xk=%lf,sum=%lf\n",xk,sum);
  14.     }
  15.     printf("%.4lf",sum);
  16.     return 0;
  17. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 11:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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