早教吧作业答案频道 -->其他-->
编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代).请编写函数fun,其功能是根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代).π/2
题目详情
编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代).
请编写函数fun,其功能是根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代).
π/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+……+(1*2*3*4*……*n)/(3*5*7*……*(2n+1))
程序运行后,若输入精度为0.0005,则输出为3.1416
#include
#include
double fun ( double eps)
{ double pi=0,a=1,i;
for(i=1;a>=eps;i++){
pi=pi+a;
a=a*i/(2*i+1);
}
return 2*pi;
}
main( )
{ double x;void NONO ();
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf,PI=%lf\n",x,fun(x));
NONO();
}
double fun ( double eps)
{ double s=1.0,s1=1.0; int n=1;
while(s1>=eps) /*当某项大于精度要求时,继续求下一项*/
{s1=s1*n/(2*n+1); /*求多项式的每一项*/
s=s+s1; /*求和*/
n++; } return 2*s; }
请编写函数fun,其功能是根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代).
π/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+……+(1*2*3*4*……*n)/(3*5*7*……*(2n+1))
程序运行后,若输入精度为0.0005,则输出为3.1416
#include
#include
double fun ( double eps)
{ double pi=0,a=1,i;
for(i=1;a>=eps;i++){
pi=pi+a;
a=a*i/(2*i+1);
}
return 2*pi;
}
main( )
{ double x;void NONO ();
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf,PI=%lf\n",x,fun(x));
NONO();
}
double fun ( double eps)
{ double s=1.0,s1=1.0; int n=1;
while(s1>=eps) /*当某项大于精度要求时,继续求下一项*/
{s1=s1*n/(2*n+1); /*求多项式的每一项*/
s=s+s1; /*求和*/
n++; } return 2*s; }
▼优质解答
答案和解析
无论是你的答案还是正确答案 都有问题
你的答案 问题在于自变量i设置成了double型
浮点型 做自加操作的时候可能导致死循环的 也就是你的程序 如果精度设置的特别高会出问题
所谓的正确答案,没有这个问题 但是不符题意
即某项小于0.0005时停止迭代
正确答案中是某项小于精度后 把该项累加并在下一项停止迭代
下面是把你的程序改成了完全符合“正确答案”的代码
PS:题目中也有一个错误 当精度为0.0005时 输出的是3.141106 即保留四位小数位3.1411
要想输出3.1416 最低精度为0.00002
#include
double fun ( double eps)
{ double pi=1,a=1;
\x09int i;
for(i=1;a>=eps;i++){
a=a*i/(2*i+1);
pi=pi+a;
}
return 2*pi;
}
main( )
{ double x;
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%.4lf\n", x, fun(x));//输出4位小数
}
你的答案 问题在于自变量i设置成了double型
浮点型 做自加操作的时候可能导致死循环的 也就是你的程序 如果精度设置的特别高会出问题
所谓的正确答案,没有这个问题 但是不符题意
即某项小于0.0005时停止迭代
正确答案中是某项小于精度后 把该项累加并在下一项停止迭代
下面是把你的程序改成了完全符合“正确答案”的代码
PS:题目中也有一个错误 当精度为0.0005时 输出的是3.141106 即保留四位小数位3.1411
要想输出3.1416 最低精度为0.00002
#include
double fun ( double eps)
{ double pi=1,a=1;
\x09int i;
for(i=1;a>=eps;i++){
a=a*i/(2*i+1);
pi=pi+a;
}
return 2*pi;
}
main( )
{ double x;
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%.4lf\n", x, fun(x));//输出4位小数
}
看了编写函数fun,其功能是:根据...的网友还看了以下:
f(x)在0,正无穷)上连续,在(0,正无穷)上可导并满足f(0)=0,f(x)>=0,f(x)= 2020-05-14 …
求f(x)=x/(x^2+x-1)在[0,1]上的最大值为什么这样不对:f`(x)=(-x^2-1 2020-06-14 …
信号与系统,关于冲激平衡法冲激平衡法的使用有没有限制条件?是只能应用于LT吗I.给出题目y"(t) 2020-07-05 …
导数的连续性设f(x)可导,且f(0)=0,f(x)在0点的导数不为0,求w=lim(x→0){x 2020-07-16 …
设f'(x)=arctan[(x-1)^2],f(0)=0,求∫(0,1)f(x)dx,其中0是下 2020-07-22 …
这道高数的上限积分求到怎么求,说明白点!F(x,0)(x-t)f‘(x)dt的导数是多少!F(x, 2020-07-31 …
柯西方法求解抽象函数问题f(x)为定义在R的不恒为0的函数,f(1/2)=0,且对任意x,y,都有 2020-08-02 …
原函数积分加反函数积分…我总不可能画个图吧…怎办…原函数f(x)在[a,b]上单调递增,a>0,f( 2020-11-08 …
一个关于赋值法的问题f(0)=1,而且对于任意实数x,y总有f(x+y/2)=f(x)+y(2x+y 2020-12-31 …
f(x)=(sin(x^(1/3)))^3当用求导公式求出f'(x)时,x不能为0,如何求f'(0) 2021-01-16 …