求大神解决循环问题
用π/4≈1-1/3+1/5-1/7+……公式求π的近似值,直到发现某一项的绝对值小于10的负六次方为止,题目是这样的,请大神帮我看看我的程序为什么得到的结果是0.0000000000?
程序如下:
#include <stdio.h>
#include <math.h>
int main()
{
int i,j;
double sum,sum1,sum2;
for(i=1;;i=i+4)
{sum1=sum1+1/i;
if(fabs(1/i)<=1e-6)break;
}
for(j=3;;j=j+4)
{
sum2=sum2+1/j;
if(fabs(1/j<=1e-6))break;
}
sum=4*(sum1-sum2);
printf("%10.5lf",sum);
return 0;
}
[解决办法]
if(fabs(1/i)<=1e-6)break;
if(fabs(1/j<=1e-6))break;
这两句有问题的。1/j这两个都是整数,结果是个整数,好像是0.肯定就比1e-6小了。估计不循环就退出了。你把他们改成这样的吧。
fabs((double)1.00/j)试试。
[解决办法]
- C/C++ code
#include <stdio.h>#include <math.h>int main(){int i;double sum = 0;bool flag = true; for(i=1;;i=i+2) { if(fabs(1.0/i)<=1e-6) break; if(flag) { sum=sum+1.0/i; flag = false; } else { sum = sum - 1.0/i; flag = true; } } sum=4*sum;printf("%10.5lf",sum);return 0;}
[解决办法]
替你给过来了,代码见下。有几处错误。
1. 局部变量不会自动初始化为0,需要加上sum1=0;sum2=0;
2. "1/j",1是整数,j也是整数,在这种情况下,做整数运算。其值为0,应该给为1.0/j,这样编译器就认为是浮点运算,就把整数转化为浮点。
3.同样的,fabs的参数也要写成fabs(1.0/j),这样编译器知道自变量是浮点型,才能调到正确的函数。
- C/C++ code
#include <stdio.h>#include <math.h>int main(){ int i,j; double sum,sum1,sum2; sum1=0; sum2=0; for(i=1;;i=i+4) { sum1=sum1+1.0/i; if(fabs(1.00/i)<=1e-6) break; } for(j=3;;j=j+4) { sum2=sum2+1.0/j; if( fabs(1.0/j)<=1e-6) break; } sum=4*(sum1-sum2); printf("%10.5lf",sum); return 0;}