读书人

求大神解决循环有关问题

发布时间: 2012-05-15 14:35:29 作者: rapoo

求大神解决循环问题
用π/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;} 

读书人网 >C语言

热点推荐