根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
输入格式:
输入在一行中给出小于1的阈值。
输出格式:
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。
输入样例:
0.01
输出样例:
3.132157
#include <stdio.h>
int main()
{
double n;
scanf("%lf",&n);
double fenmu=1.0; //定义分母
double fenzi=1.0; //定义分子
double sum=1.0;
int k=1;
while((fenzi/fenmu)>=n)
{
fenzi=fenzi*k;
fenmu=fenmu*(2*k+1);
sum=sum+(fenzi/fenmu);
k++;
}
printf("%.6f",2*sum);
return 0;
}
2023年12月25日更新:
参考:7-15 计算圆周率(PTA题库)_pta计算圆周率-CSDN博客文章浏览阅读2.2k次,点赞5次,收藏12次。根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。输入格式:输入在一行中给出小于1的阈值。输出格式:在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。输入样例:0.01输出样例:3.132157错误代码:#includeint main(){ int n = 1, s = 1, k = 1.0; float x, y = 1.0, sum = 1.0;_pta计算圆周率
https://blog.csdn.net/m0_61146840/article/details/124984806
错误示范:
//错误示范: #include<stdio.h> int main() { int n = 1, s = 1, k = 1.0; float x, y = 1.0, sum = 1.0; scanf_s("%f", &x); for (n; y > x; n++) { s = s * (2 * n + 1); y = 1.0 * k / s; sum = sum + y; k = k * (n + 1); } printf("%.6f\n", sum * 2); return 0; }
正确代码:
//正确代码 #include<stdio.h> int main() { int n = 1, s = 1, k = 1.0; float x, y = 1.0, sum = 1.0; scanf("%f", &x); for (n; y > x; n++) { y = y * n / (2*n + 1); sum = sum + y; } printf("%.6f\n", sum * 2); return 0; }
分析:
一开始采用分子和分母分开运算的算法,
编译未通过,显示n的阶乘超长整数,刚开始没搞明白,以为再用一种长整型的方式进行定义即可,后来发现还是不行,是因为n可以无穷大的,根本没有能存放它的变量,所以就不能用现有的算法进行计算,改变思路,对分子分母同时运算,就不会超长整型了。
总之:
我那样写不对!!!!