不使用math.h在C语言中实现求和计算圆周率,代码运行异常如何解决
莱布尼茨级数求π代码修正
核心错误说明
- 未做累加计算:原代码每次循环直接为
pi变量赋值,覆盖了上一轮的计算结果,没有按照求和公式累积每一项的值 - 系数位置错误:根据公式规则,需要先完成所有项的求和,再将总和乘以4得到π,原代码将乘4操作放在了循环内部,每一项单独乘4不符合计算逻辑
修正后可运行代码
#include <stdio.h> int main(void){ int num, k; double pi = 0; printf("请输入大于等于30000的项数:"); scanf("%d", &num); if (num < 30000){ printf("输入错误"); }else { for (k = 1; k <= num; k++){ if (k % 2 == 0){ pi += (double)(-1)/ (2*k -1); }else{ pi += (double)(1)/ (2*k -1); } } pi = pi * 4; printf("π的计算结果为:%.10f", pi); } return 0; }
补充说明
莱布尼茨级数收敛速度较慢,输入30000项时,计算结果可以精确到小数点后4位左右,如果需要更高精度可以进一步调大输入的项数,同时调整输出的格式化参数保留更多小数位。
内容的提问来源于stack exchange,提问作者jsovsa
相关产品推荐
相关产品推荐

