PTA的
5-1 近似求PI (10 分)本题要求编写程序,根据下式求Π的近似值,直到最后一项小于给定精度EPS
#include<stdio.h>
int main()
{
double eps,x=0,y,z;
double i=1,a,b,c=1,d=1,e;
scanf("%le", &eps);
for(i=1;i<=9999;i++)
{
c=1;
d=1;
e=2*i+1;
for(a=1;a<=i;a++)
{
c*=1.0*a;
}
for(b=1;b<=e;b+=2)
{
d*=1.0*b;
}
y=1.0*c/d;
x+=y;
if(y<eps)
break;
}
z=2.0*(x+1);
printf("PI = %.5lf",z);
return 0;
}
错误:
a.c: In function ‘main’: a.c:6:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result] scanf("%le", &eps); ^~~~~~~~~~~~~~~~~~
编译器:C (gcc 6.5.0)
有一种答案是这样的:
#include <stdio.h>
double is(int);
double rr(int);
int main()
{
double eps;
double s=0;double d;
scanf("%le",&eps);
for(int i=0;i<=999999;i++)
{
d=1.0*is(i)/rr(2*i+1);
s=s+d;
if(d<eps)
break;
}
printf("PI = %.5lf",2.0*s);
return 0;
}
double is(int m)
{
double s=1.0;
for(int i=1;i<=m;i++)
{
s=1.0*s*i;
}
return s;
}
double rr(int m)
{
double s=1;
for(int i=1;i<=m;i=i+2)
{
s=s*i;
}
return s;
}
两个区别在哪?
你这个不算错误,是因为pta的编译器版本比较新所以会报warning