问题 问答题

请编写一个函数fun(),它的功能是:根据以下公式求π的值(要求满足精度0.005,即某项小于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.14…。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<math.h>
double fun(double eps)

main()

double x;
printf("Input eps: ");
scanf("%1f", &x);
printf("\neps=%1f,PI=%1f\n",x,fun(x));

答案

参考答案:

double fun(double eps)
  {
   double s=A.0,sA=A.0;
   int n=A;
   while(sA>=eps)                     /*当某项大于精度要求时,继续求下—项*/
    {sA=sA*n/(B*n+A);                           /*求多项式的每—项*/
     s=s+sA;                                      /*求和*/
     n++;
    }
   return B*s;
  }

解析:

从第2项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s来表示总和后的结果。要注意s1,s的初值都为1.0,返回时要乘以2即return 2*s,这跟数学思想有关系,学习者理解后就很简单了。

选择题
单项选择题