习题4-2 求幂级数展开的部分和 (20分)
已知函数ex可以展开为1+x+x2 /2!+x3/3!+⋯+xk/k!+⋯幂级数现给定一个实数x,要求利用此幂级数部分和求ex的近似值,求和一直继续到最后一项的绝对值小于0.00001。
输入格式:
输入在一行中给出一个实数x∈[0,5]。
输出格式:
在一行中输出满足条件的幂级数部分和,保留小数点后四位。
输入样例:
1.2
输出样例:
3.3201
#include<stdio.h>
#include<math.h>
int main()
{
double x,sum=1.0,item=1,i;
int k=1;
scanf("%lf",&x);
while(fabs(pow(x,k)/item)>=0.00001)
{
sum=sum+1.0*pow(x,k)/item;
item=1;
k=k+1;
for(i=1;i<=k;i++)
{
item=item*i;
}
}
printf("%.4f",sum+pow(x,k)/item);
return 0;
}
如上是我的通过代码,但是我最开始不是这样写的,使用的思路和下面这个代码一样,但是当x=5时不正确
#include <stdio.h>
#include <math.h>
double func(int n)
{
double s=1;
for(int i=1;i<=n;i++)
{
s=s*i;
}
return(s);
}
int main()
{
double x,sum=1.0;
int i=1;
scanf("%lf",&x);
do
{
sum=sum+pow(x,i)/func(i);
i++;
}while(pow(x,i)/func(i)>=0.00001);
printf("%0.4f\n",sum);
return 0;
}
想了很久,后来发现错在sum=sum+x和i++的顺序,如果按我上面所示运行,相当于每次加的是上一次的,当最后一项不满足条件加的最后一次加的其实是上一次满足条件的值,sum累加流程其实是要先满足while才会加满足的x对应的值。这自然就会错啦,缺少了最后一项,感觉自己加了结果没加,把sum=sum+x和i++的顺序替换一下就成功运行啦,先加了下一项的值在判断。
然后去查看下其他大佬们的代码,有些疑问,查看的代码如下:
#include<stdio.h>
#include<math.h>
int main(){
double x,sum=1,item=1,s=1;
int k=1;
scanf("%lf",&x);
while(fabs(item)>0.00001){
for(int i=1;i<=k;i++){
s=s*i;
}
item=1.0*pow(x,k)/s;
sum+=item;
k++;
s=1;
}
printf("%.4f",sum);
return 0;
}
为什么这个逻辑可以,这样最后一项不是也没加吗?等待某个大佬解答