题目

用循环估算 π(莱布尼茨级数取前 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