求幂级数展开的部分和问题
题目:已知函数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:}
题目乱码了 本帖最后由 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;
} sunrise085 发表于 2020-4-16 16:12
按照你的逻辑修改的程序如下。
你的程序实在太冗余了
谢谢{:10_298:}
页:
[1]