#include <stdio.h >
#include < conio.h >
#include <math.h >
double fun( double eps)
{
double t=1.0,sum=1.0;
int i=1;
while (sum>=eps)
{ sum=sum*i/(2* i+1);
t=t+sum;
i++;
}
return 2*t;
}
void main ()
{
double x;
printf ("Input eps : ") ;
scanf("%lf",&x);
printf("\neps =%lf, PI =%lf\n",
x, fun(x));
}
#include <stdio.h >
#include < conio.h >
#include <math.h >
double fun( double eps)
{int i=1;
double t=1.0,sum=0;
while(t>=eps)
{
sum+=t;
t*=i/(2*i+1);
++i;
}
return 2*sum;
}
void main ()
{
double x;
printf ("Input eps : ") ;
scanf("%lf",&x);
printf("\neps =%lf, PI =%lf\n",
x, fun(x));
}为什么结果不一样???????????????????
sum=sum*i/(2* i+1)和sum*=i/(2*i+1)的区别
答案:4 悬赏:50 手机版
解决时间 2021-02-26 12:31
- 提问者网友:欲劫无渡
- 2021-02-26 07:42
最佳答案
- 五星知识达人网友:鱼忧
- 2021-02-26 08:00
假如i=5时就退出while循环,
一:
sum+=t;
t*=i/(2*i+1); //当i=5时,这个 t*= 5/11 ,sum 并没有把 i=5时的 t 值相加
++i;
你这样写相当于 while do 先判断再加
二:
sum=sum*i/(2* i+1); // 当i=5时,这个 sum*= 5/11
t=t+sum; // 这里 把 i=5时的 值加到 t 了
i++;
这一段相当于 do while 先加再判断
多加一项,所以两者的结果不一样
一:
sum+=t;
t*=i/(2*i+1); //当i=5时,这个 t*= 5/11 ,sum 并没有把 i=5时的 t 值相加
++i;
你这样写相当于 while do 先判断再加
二:
sum=sum*i/(2* i+1); // 当i=5时,这个 sum*= 5/11
t=t+sum; // 这里 把 i=5时的 值加到 t 了
i++;
这一段相当于 do while 先加再判断
多加一项,所以两者的结果不一样
全部回答
- 1楼网友:时间的尘埃
- 2021-02-26 11:28
这......................
- 2楼网友:夜风逐马
- 2021-02-26 10:24
额
- 3楼网友:神鬼未生
- 2021-02-26 09:15
for中被;分开的三部分分别是for(初始定义;循环继续条件;每次循环后处理内容),
这里第一部分没有,所以就是表示从i=1开始,到i<=10之前,每次循环之后做sum=2*sum+1,i++处理。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯