7-3 近似求PI (15 分)本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。2π =1+31! +3×52! +3×5×73! +⋯+3×5×⋯×(2×i+1)i! +⋯输入格式:输入在一行中给出精度eps,可以使用以下语句来读输入:scanf("%le", &eps);输出格式:在一行内,按照以下格式输出π的近似值(保留小数点后5位):PI = 近似值输入样例:1E-5输出样例:PI = 3.14158代码文本:#include<stdio.h>double fenshi(int x){ double q,shang=1.0,xia=1.0; int i; for(i=1;i<=x;i++) { shang*=i; xia*=2*i+1; } q=shang/xia; return q;}int main(){ double eps,sum=1.00000; int j; scanf("%le",&eps); if(eps<=0) { printf("PI = 0"); return 0; } for(j=1;;j++) { sum+=fenshi(j); if(fenshi(j)<eps) break; } printf("PI = %.5f",2*sum);return 0;}
看上去没什么大问题,试试这个:
#include<stdio.h>提交正确了,您改了哪里?
追答修改的地方我写在代码里了呀,一个是sum初始化为0,另一个是j从0开始枚举。
代码逻辑没什么变化,就是考虑到了eps比1大,序列只算第一项的情况。
两个代码在输入2啊,3啊这种比1大的数值的时候结果会有区别,其他时候结果是一样的。