题目
用循环估算 π(莱布尼茨级数取前 n 项)
思路
本题用莱布尼茨级数的前 n 项近似 π:每一项正负交替,分母为 1、3、5…(通项与 1/(2*i-1) 相关)。
用 double 累加,循环 i 从 1 到 n 把每一项加进和,最后输出近似值;n 很小时偏差大是正常现象。
解题分析
莱布尼茨级数奇数项正负交替,每一项比前一项衰减慢,前几项误差很大,项数要到成千上万才勉强接近 π。练的是循环与浮点累加,别指望 n=10 就精确。
- 符号可用
sign = -sign翻转,或用(k % 2 == 0 ? 1 : -1)。 - 分母
2*k-1别写成2*(k-1),后者从 1 开始会错项。
完整程序
#include <stdio.h>
int main(void)
{
int n;
if (scanf("%d", &n) != 1 || n < 1) {
return 1;
}
double sum = 0.0;
int sign = 1;
for (int k = 1; k <= n; k++) {
sum += sign * 1.0 / (2 * k - 1);
sign = -sign;
}
printf("%.6f\n", sum * 4.0);
return 0;
}
运行示例
输入:
1000输出:
3.140593