问答题 请编写一个函数proc(),它的功能是:根据以下公式求π的值(要求满足精度0.0005,即某项小于0.005时停止迭代)。
π/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…+1*2*3*…*n/(3*5*7*…*(2n+1))
程序运行后,如果输入精度0.0005,则程序输出3.140578。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<math.h>
double proc(double eps)
{
}
void main()
{
double s;
printf("/nPlease enter a precision:");
scanf("%1f",&s);
printf("/nPi=%1f/n",proc(s));
}
【正确答案】
【答案解析】double proc(double eps)
{
double s,t;int n=1;
s=0.0;
t=1;
while(t>=eps)
{ s+=t;
t=t*n/(2*n+1);
n++;
return(2*s);
} [解析] 我们应定义一个变量表示其和,一个变量表示其分数,由题目中可知循环结束的标志为分数小于eps,因此其为循环结束的条件,根据公式的变化规律,可求得s,最后把2*s返回到主函数中。