标题:上机题问题
只看楼主
maxdison
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2009-12-20
结帖率:71.43%
已结贴  问题点数:20 回复次数:2 
上机题问题
题:请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005, 即某项小于0.0005时停止迭代): Л/2=1+1/3+1*2/3*5+...1*2*.....*n/3*5*7......(2*n+1)
     
    程序运行后,如果输入精度0.0005,则程序输出为3.140578。
    注意:部分源程序存在文件prog.c中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
我的回答是:
#include <stdio.h>
#include <math.h>
double  fun ( double  eps)
{double i,j,sum=1;
int t=1,k=3;
for(i=1,j=1;(i/j)>=eps;t+=1,k+=2)
{i=i*t;
j=j*k;
sum=sum+i/j;

}
return sum*2;




}


main( )
{ double  x;
  printf("Input eps:") ;
  scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
  getch();
}
运行输出的是 3.141106
请问哪出问题了?算法没错?

[ 本帖最后由 maxdison 于 2010-4-1 20:37 编辑 ]
搜索更多相关主题的帖子: 上机 
2010-04-01 20:24
playmyself
Rank: 5Rank: 5
来 自:第3系4级宇宙空间
等 级:职业侠客
帖 子:76
专家分:399
注 册:2009-7-8
得分:20 
您的程序多算了一次,应该先计算值判断后再加,如果改的话,这样改。
#include <stdio.h>
#include <math.h>
double  fun ( double  eps)
{double i,j,sum=1;
int t=1,k=3;
for(i=1,j=1; (i*t)/(j*k) >=eps;t+=1,k+=2)
{i=i*t;
j=j*k;
sum=sum+i/j;
}
return sum*2;
}
main( )
{ double  x;
  printf("Input eps:") ;
  scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
  getch();
}

无聊创造奇迹。
2010-04-01 21:42
maxdison
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2009-12-20
得分:0 
哦,知道了~谢谢您
2010-04-03 21:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-301343-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033683 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved