计算兀/4=1-1/3+1/5-1/7+……,直至最后一项小于10的-6次方。
错误做法:
#include<stdio.h> #include<math.h> int main() { int i; double t,m; m=3.14159/4.0; for(i=1;;i++) { if(i%2==0) t=(double)-(1/(2*i-1));//括号里面的运算还是整数之间的,得不到double型,强制转换加错地方了 else t=(double)1/(i*2-1); while(fabs(t)>(1E-6))//主要问题在这里,你第一次t肯定很大进到这里来一直while出不去所以死循环了 { m+=t; } break; } printf("%lf\n",m);//对于double型,scanf里面写%lf,printf里面写%f比较合适 //可以把m初始化为0然后这么加完乘以4得到的应该就是pi的值了,现在这么加结果无意义 return 0; }
正确:
#include<stdio.h> #include<math.h> int main() { int i; double t,m; m=0; for(i=1;;i++) { if(i%2==0) t=-(1.0/(2*i-1)); else t=1.0/(i*2-1); if(fabs(t)>(1E-6)) { m+=t; } else break; } printf("%f\n",m*4); return 0; }
希望还有更好的方法提供……
近似运算
时间: 2024-11-07 04:25:03