#include <stdio.h>
#include <math.h>
main()
{
int i,j;
float pi=0,a;
for(i=1,j=1;fabs(a)>=1e-6;i++,j+2)
{
if(i%2==0)
a=-1/(float)j;
else
a=1/(float)j;
pi=pi+a;
}
printf("PI的近似值为%d",4*pi);
}
计算不出结果是为什么?
π/4 = 1-1/3+1/5-1/7……
要是这样的话,就我下面的代码
#include <stdio.h>
#include <math.h>
main()
{
int i,j=1;
float pi=0;
for(i=1;1.0/i>=1e-6;i+=2)
{
pi+=j*1.0/i;
j*=-1;
}
printf("PI的近似值为%d",4*pi);
}
看我的代码,有什么感想?
改为:
for(i=1,j=1;fabs(a)>=1e-6;i++,j+=2)追问
#include
#include
main()
{
int i,j;
float pi=0,a;
for(i=1,j=1;fabs(a)>=1e-6;i++,j=j+2)
{
if(i%2==0)
a=-1/(float)j;
else
a=1/(float)j;
pi=pi+a;
}
pi=pi*4;
printf("PI的近似值为%d",pi);
}
改成了这样但还是不对啊
我勒个去,最后那个printf输出把我害惨了,该用%f啊,你用的是%d难怪结果一直不对。
还有就是for循环那儿的处理,for是先判断条件的在运行代码,所以第一次判断条件时a没赋值。
完整代码如下:
#include
#include
void main()
{
int i,j;
float pi=0,a=1;
for(i=1,j=1;;i++,j=j+2)
{
if(i%2==0)
a=-1/(float)j;
else
a=1/(float)j;
if(fabs(a)<1e-6) break;
pi=pi+a;
}
pi=pi*4;
printf("PI的近似值为%10.8f\n",pi);
}