You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言通过级数计算π值结果错误,求代码问题排查及解决方法

代码错误点及修正方案

错误列表

  • 输入和循环逻辑完全错误:你将scanf放在了for循环内部,且for循环终止条件写死为k<=30000,同时错误判断循环变量k≥30000才给分子赋值,导致变量未初始化、循环次数不符合要求。正确逻辑是先读取用户输入的总项数n,校验n≥30000后再循环n次计算级数。
  • 符号逻辑反转:你采用的莱布尼茨π级数公式为π/4 = 1 - 1/3 + 1/5 - 1/7 + ... ,第1项(k=1)应为正数,你现在奇数k赋值-1、偶数k赋值1,和要求的符号完全相反。
  • 分母计算错误:你写的分母公式是2.0*k+1.0,导致级数从第二项(1/3)开始累加,漏掉了首项1,结果必然偏小。正确的分母公式应为2.0*k - 1.0。
  • 乘4的逻辑位置错误:你将pi=4*pi放在了循环内部,相当于每累加一项就乘以4,最终结果会是累加和乘以4的n次方,和预期完全不符。应该是所有项累加完成后,再统一乘以4。
  • 多余头文件引用:题目明确要求禁止使用math.h库相关函数,你代码中引入了该头文件需要删除。
  • 输出逻辑错误:你将printf放在循环内部,会循环输出n次结果,应该在全部计算完成后再输出一次结果即可。

修正后代码

#include<stdio.h>
int main(void){
    double numerator, denominator, pi=0.0;
    int n, k;
    printf("input a total number of terms >=30000:");
    scanf("%d",&n);
    // 校验项数合法性
    if(n < 30000){
        printf("项数需≥30000!\n");
        return 1;
    }
    for (k=1;k<=n;k++){
        // 处理符号,k为奇数时是正,偶数为负
        if(k%2==0){
            numerator = -1;   
        }else{
            numerator = 1;
        }
        denominator = 2.0*k - 1.0;
        pi += numerator/denominator;
    }
    // 全部累加完成后再乘4
    pi = 4 * pi;
    printf("value of PI is= %lf\n",pi);
    return 0;
}

内容的提问来源于stack exchange,提问作者cobaltbasalt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:06:05