请编写一个函数fun() 它的功能是:根据以下公式求π的值(要求满足精度0.005 即某项小于0.005时停止

计算机 精度,公式,根据 已帮助 人

请编写一个函数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(" eps=%1f,PI=%1f ",x,fun(x));

}

请帮忙给出正确答案和分析,谢谢!

热搜:fun函数的功能是求3行4列二维数组每行元素中的最大值

答案解析

难度★★☆ 搜索
  • 正确答案:double fun(double eps) { double s=1.0s1=1.0; int n=1; while(s1>=eps) /*当某项大于精度要求时继续求下—项*/ {s1=s1*n/(2*n+1); /*求多项式的每—项*/ s=s+s1; /*求和*/ n++; } return 2*s; }
    double fun(double eps) { double s=1.0,s1=1.0; int n=1; while(s1>=eps) /*当某项大于精度要求时,继续求下—项*/ {s1=s1*n/(2*n+1); /*求多项式的每—项*/ s=s+s1; /*求和*/ n++; } return 2*s; } 解析:从第2项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s来表示总和后的结果。要注意s1,s的初值都为1.0,返回时要乘以2即return 2*s,这跟数学思想有关系,学习者理解后就很简单了。