求教!!近似值求PI。请大神看看我的代码哪里不对,一直是输出2.00000

一墨千里无色 2017-11-17 07:47:19
题目:设计一个函数,根据以下公式返回满足精度e要求的的值。

/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+......

我的代码:#include<stdio.h>
int main()
{
int i, n;
double pi, m=1.0,k;
int jk(int x);
int term(int y);
for (n = 2; jk(n - 1) / term(n) >= 1e-6; n++)
{
k = jk(n - 1) / term(n);
m = m + k;
}
pi = 2*m;
printf("%lf\n", pi);
return 0;

}
int jk(int x)
{
int j,y=1;
for (j = 1; j <= (x - 1); j++)
y = y*(j + 1);
return y;
}
int term(int y)
{
int d = 1,i=1;
for (i = 1; i<=y; i++)
d = d*(2 * i - 1);
return d;
}

好难过这是我们期中考试题目。。。
...全文
251 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-22
  • 打赏
  • 举报
回复
#include <stdio.h>
long a=10000;
long b;
long c=2800;
long d;
long e;
long f[2801];
long g;
int main() {
    for(;b-c;) f[b++]=a/5;
//  while (1) {
//      if (0==b-c) break;
//      f[b]=a/5;
//      b++;
//  }

    //f[0 - 2800] = 10000/5
    for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
          for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
//  while (1) {
//      d=0;
//      g=c*2;
//      if (0==g) break;
//      b=c;
//      while (1) {
//          d+=f[b]*a;
//          f[b]=d%--g;
//          d/=g--;
//          --b;
//          if (0==b) break;
//          d*=b;
//      }
//      c-=14;
//      printf("%.4d",e+d/a);
//      e=d%a;
//  }

	return 0;
}
一墨千里无色 2017-11-22
  • 打赏
  • 举报
回复
=-=.....各位都挺复杂的。。 我看到同学的有简单的。。 不过各位还是辛苦了。 我的方法真的不晓得哪里出错了。。。哎 输出就应该是PI的值,其他不对,所以我的能运行但不对啊。一定是逻辑错了吧 结束了
maxbirdyang 2017-11-21
  • 打赏
  • 举报
回复
int main() { double sum = 1.00; double PI =sum; double count =1.0; while(1) { sum = sum*((count)/(count*2+1)); if (sum <0.0000001) break; PI += sum; count++; printf("sum: %lf---PI: %lf\n",sum,2*PI); getch(); } }简单点
Program120 2017-11-20
  • 打赏
  • 举报
回复 1
int main() { int a = 1, i; double e = 1; for (i = 1; ; i++) { a *= i; e += 1.0 / a; if((1.0 / a) < 0.0000001) break; } printf("%lf", e); return 0; } //主函数给你了 别忘了给积分哦~
HomerRo 2017-11-19
  • 打赏
  • 举报
回复
我这样改后,程序就运行通过了呀。你仔细对比一下,有哪些不同。这些不同造成你的程序无法运行,也就是出错的地方
HomerRo 2017-11-19
  • 打赏
  • 举报
回复
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <stdlib.h> int jk(int x); int term(int y); int main() { int n = 2; double pi, m = 1.0, k, a, b; do { a = jk(n - 1); b = term(n); k = a / b; m = m + k; ++n; } while (k >= 1e-6); pi = 2.0*m; printf("%lf\n", pi); return 0; } int jk(int x) { int j, y = 1; for (j = 1; j < (x - 1); j++) if ((x - 1) <= 1) y = 1; else y = y*(j + 1); return y; } int term(int y) { int d = 1, i = 1; for (i = 1; i <= y; i++) d = d*(2 * i - 1); return d; } 这个代码在VS2015中运行通过了,结果是:2.854598
HomerRo 2017-11-19
  • 打赏
  • 举报
回复
问一下,你使用的IDE是什么,我使用的是VS2015. 上面的程序是你修改阶乘后的程序吗?
一墨千里无色 2017-11-19
  • 打赏
  • 举报
回复
= =。。。。谢谢楼上,不过我用了你的代码依然不行,输出2.多 我改了一下阶乘,原先的阶乘不对。 但是输出依然。。。不对啊 难道是题目=-=。。 #include<stdio.h> int jk(int x); int term(int y); int main() { int n=2; double pi, m=1.0,k,a,b; do { a = jk(n - 1); b = term(n); k = a/b; m = m + k; ++n; } while (k >= 1e-8); pi = 2.0*m; printf("%lf\n", pi); return 0; } int jk(int x) { int j,y=1; for (j = 1; j < (x - 1); j++) if ((x - 1) <= 1) y = 1; else y = y*(j + 1); return y; } int term(int y) { int d = 1,i=1; for (i = 1; i<=y; i++) d = d*(2 * i - 1); return d; }
snafumeander 2017-11-18
  • 打赏
  • 举报
回复
每次保存一个上次算的最后一项然后乘最新的多好。。。 感觉像是你函数带入的时候用了-1,循环判定有-了1这两个要去掉一个。
一墨千里无色 2017-11-18
  • 打赏
  • 举报
回复
那个。。。为啥改了这么多啊= =。。。 我的代码还有救吗。。
HomerRo 2017-11-18
  • 打赏
  • 举报
回复
做了一些修改,结果如下: #include<stdio.h> #include <stdlib.h> //函数声明最好放到主函数外面 int jk(int x); int term(int y); int main() { int n=2; double pi, m = 1.0, k,a,b; //for (n = 2; jk(n - 1) / term(n) >= 1e-6; n++) //{ // k = jk(n - 1) / term(n); // m = m + k; //} //下面代码是修改后的循环代码 do { a = jk(n - 1); b = term(n); k = a/b ; m = m + k; ++n; } while (k >= 1e-8); pi = 2 * m; printf("%f\n", pi); return 0; } int jk(int x) { int j, y = 1; for (j = 1; j <= (x - 1); j++) y = y*(j + 1); return y; } int term(int y) { int d = 1, i = 1; for (i = 1; i <= y; i++) d = d*(2 * i - 1); return d; } 结果是:3.098873

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧