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/11/08 09:32:41
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个