2π=1+31!+3×52!+3×5×73!+⋯+3×5×⋯×(2×i+1)i!+⋯
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int f,i;
float n,t,PI;
double eps;
scanf("%le", &eps);
t=1;
PI=0;
n=1.0;
f=1;
i=1;
for(i=1;;i++)
f*=i;
n*=2*i+1;
while (t>=eps){
PI=PI+t;
t=f/n;
}
PI=PI*2;
printf("PI=%.5f\n",PI);
}
为什么不对呢?
算法错误。对i的循环,对i没有任何约束,陷入死循环。
给出本题的程序:
#include <stdio.h>int main()
{
double i,k=1,m=1,eps,PI=0;
scanf("%le",&eps);
for(i=0;k/m>=eps;i++)
{
k*=i==0?1:i;
m*=i*2+1;
PI+=k/m;
}
printf("PI=%lf",PI*2);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2017-12-16
#include <stdio.h>
#include<math.h>
int main ()
{
double a=1,b=3,i=1,j=3;
double eps,m=1,sum=0;
scanf ("%le",&eps);
while (m>=eps)
{
m=a/b;
sum=sum+m;
i=i+1;
j=j+2;
a=a*i;
b=b*j;
}
printf ("PI = %.5lf\n",(2*sum+2));
return 0;
}
#include<math.h>
int main ()
{
double a=1,b=3,i=1,j=3;
double eps,m=1,sum=0;
scanf ("%le",&eps);
while (m>=eps)
{
m=a/b;
sum=sum+m;
i=i+1;
j=j+2;
a=a*i;
b=b*j;
}
printf ("PI = %.5lf\n",(2*sum+2));
return 0;
}