题目描述:
请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):
程序运行后,如果输入精度0.0005,则程序输出为3.140578
注意:部分源程序存在文件 progl.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
部分代码:
#include <stdio.h>
#include <math.h>
double fun ( double eps)
{
}
main( )
{ double x;void NONO ();
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
NONO();
getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i ;
double x ;
fp = fopen("C:\\WEXAM\\000000000000\\in.dat","r") ;
wf = fopen("C:\\WEXAM\\000000000000\\out.dat","w") ;
for(i = ; i < ; i++) {
fscanf(fp, "%lf", &x) ;
fprintf(wf, "%lf\n", fun(x)) ;
}
fclose(fp) ;
fclose(wf) ;
}
参考答案:
本题的考核点是求派的值的算法,循环语句的使用。
解题思路:通过循环语句判断公式中某项是否在精度范围之内,以控制迭代。
int n=;
double down=,up=;
double one,pi=;
one=(double)up/(double)down;
while(one>=eps)
{
pi+=one;
n++;
up=up*n;
down=down*(*n+);
one=(double)up/(double)down;
}
return pi*;