Problem Q: 你比祖冲之厉害——C语言初学者百题大战之二十五
分析
通过判断奇偶来分辨加减号,本题使用do while循环结构十分清爽好用。
Description
祖冲之是世界上第一位将圆周率准确地推算到小数点后七位数值的科学家,并将这一纪录在世界上保持了一千年之久。 祖冲之按照刘徽的割圆术之法,设了一个直径为一丈的圆,在圆内切割计算。当他切割到圆的内接一百九十二边形时,得到了“徽率”的数值。但他没有满足,继续切割,作了三百八十四边形、七百六十八边形……一直切割到二万四千五百七十六边形,依次求出每个内接正多边形的边长。最后求得直径为一丈的圆,它的圆周长度在三丈一尺四寸一分五厘九毫二秒七忽到三丈一尺四寸一分五厘九毫二秒六忽之间,上面的那些长度单位我们现在已不再通用,但换句话说:如果圆的直径为1,那么圆周小于3.1415927、大 大不到千万分之一,它们的提出,大大方便了计算和实际应用。 现在你有了计算机了,你是不是可以比祖冲之更厉害?你能求出圆周率吗? 现在我们可以利用公式pai/4=1-1/3+1/5-1/7+…求pai的近似值,直到某一项的绝对值小于或等于某个数f为止,我们可以通过控制f的大小来提高pai的精确性(注意:pai应该为double型)
注意:用于求和的变量pi必须是double,若是float,则出错。某个数据f必须是float.
Input
有多组测试数据,每组测试数据一行。 该行输入一个小数f(小数点后最多6位).
Output
输出利用pai/4=1-1/3+1/5-1/7+…公式直到最后一项的绝对值小于f为止后求出的pai值(保留6位小数)
Sample Input
2
1
0.34
Sample Output
4.000000
2.666667
2.666667
#include<stdio.h>
int main()
{ int n;
double pi;
float f;
while(scanf("%f",&f)!=EOF)
{
n=0;pi=0;
do{
n++;
if(n%2==0)
pi=pi-1.0/(2*n-1);
else
pi=pi+1.0/(2*n-1);
}while(1/(2*n-1)>=f);
printf("%.6f\n",pi*4);
}
return 0;
}
分析
1、注意不同数据类型使用不同书写格式。
2、灵活使用数据上奇偶性来判断数据。