C语言函数题,真的找不到问题在哪,pta提交总是显示两个正确一个错误,题目代码在下:

7-3 近似求PI (15 分)本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。​2​​π​​ =1+​3​​1!​​ +​3×5​​2!​​ +​3×5×7​​3!​​ +⋯+​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>
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=0.00000;//sum初始化为0
  int j;
  scanf("%le",&eps);
  if(eps<=0) {
    printf("PI = 0");
    return 0;
  }
  for(j=0;;j++) {//j从0开始枚举
    sum+=fenshi(j);
    if(fenshi(j)<eps) break;
  }
  printf("PI = %.5f",2*sum);
  return 0;
}

追问

提交正确了,您改了哪里?

追答

修改的地方我写在代码里了呀,一个是sum初始化为0,另一个是j从0开始枚举。
代码逻辑没什么变化,就是考虑到了eps比1大,序列只算第一项的情况。
两个代码在输入2啊,3啊这种比1大的数值的时候结果会有区别,其他时候结果是一样的。

温馨提示:答案为网友推荐,仅供参考
相似回答