|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
答案一直错误,不知道逻辑哪错了
本帖最后由 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;
- }
复制代码
|
|