C语言程序调用函数返回值的问题题目是求pi的值:pi/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5****(2n-1))double fun (double eps){double s;float n,t,pi;t=1;pi=0;n=1.0;s=1.0; //对各个累加项,累加积等赋初始化值
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/31 10:55:21
![C语言程序调用函数返回值的问题题目是求pi的值:pi/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5****(2n-1))double fun (double eps){double s;float n,t,pi;t=1;pi=0;n=1.0;s=1.0; //对各个累加项,累加积等赋初始化值](/uploads/image/z/3686797-37-7.jpg?t=C%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%B0%83%E7%94%A8%E5%87%BD%E6%95%B0%E8%BF%94%E5%9B%9E%E5%80%BC%E7%9A%84%E9%97%AE%E9%A2%98%E9%A2%98%E7%9B%AE%E6%98%AF%E6%B1%82pi%E7%9A%84%E5%80%BC%EF%BC%9Api%2F2%3D1%2B1%2F3%2B%281%2A2%29%2F%283%2A5%29%2B%281%2A2%2A3%29%2F%283%2A5%2A7%29%2B.%2B%281%2A2%2A3%2A.%2An%29%2F%283%2A5%2A%2A%2A%2A%282n-1%29%29double+fun+%28double+eps%29%7Bdouble+s%3Bfloat+n%2Ct%2Cpi%3Bt%3D1%3Bpi%3D0%3Bn%3D1.0%3Bs%3D1.0%3B+%2F%2F%E5%AF%B9%E5%90%84%E4%B8%AA%E7%B4%AF%E5%8A%A0%E9%A1%B9%2C%E7%B4%AF%E5%8A%A0%E7%A7%AF%E7%AD%89%E8%B5%8B%E5%88%9D%E5%A7%8B%E5%8C%96%E5%80%BC)
C语言程序调用函数返回值的问题题目是求pi的值:pi/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5****(2n-1))double fun (double eps){double s;float n,t,pi;t=1;pi=0;n=1.0;s=1.0; //对各个累加项,累加积等赋初始化值
C语言程序调用函数返回值的问题
题目是求pi的值:
pi/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5****(2n-1))
double fun (double eps)
{
double s;
float n,t,pi;
t=1;pi=0;n=1.0;s=1.0;
//对各个累加项,累加积等赋初始化值
while((fabs(s))>=eps)//精度判断
{
pi+=s; //pi存放累加和
t=n/(2*n+1); //每一项
s*=t; //累积
n++;
}
pi=pi*2; //求得π值
return pi;
}
如果改为
double fun (double eps)
{
double sum=1,a=1,b=1,i=1;
while(fabs(b)>=eps)
{
a=i/(2*i+1);
b*=a;
i++;
sum+=b;
}
sum=2*sum;
return sum;
}
当eps=0.0005时,为何返回值不一样,
第一个是3.140578 ,第二个是3.141106
C语言程序调用函数返回值的问题题目是求pi的值:pi/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5****(2n-1))double fun (double eps){double s;float n,t,pi;t=1;pi=0;n=1.0;s=1.0; //对各个累加项,累加积等赋初始化值
问题出现在这里:第一个程序是先判断上次循环得到s的值是否小于eps,把其值累加到pi的;而第二个程序是先得到b值后没进行判断就把它加给sum了,进行下一个循环才判断b是否符合条件的!综上,最后导致第2个函数比第一个函数多加了项,就出现第2个的返回值大于第1个