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

C语言编写定积分计算程序运行结果恒为0的问题排查

C语言多项式定积分程序输出恒为0的问题修复

问题相关原始代码

#include<stdio.h>
int F(int);
int g(int,int);
int n;
float f[100];
int main(){
    printf("적분 구간 ");
    int a,b;
    scanf("%d",&a);
    scanf("%d",&b);
    printf("\n차수 ");
    scanf("%d",&n);
    for(int i=n;i>=0;i--){
        printf("\n%d차항 계수 ",i);
        scanf("%f",&f[i]);
    }
    for(int i=n;i>=0;i--){
        f[i+1]=f[i]/(i+1);
    } 
    float s=F(b)-F(a);
    printf("%d",s);
}

int F(int x){
    float ret=0;
    for(n=n+1;n>=1;n--) ret+=g(n,x);
    return ret;
    }
    
int g(int k,int l){
    float y=1;
    for(int t=1;t<=k;t++) y=y*l;
    y=f[k]*y;
    return y;
}

核心错误定位

  • 函数返回值类型错误:F()和g()的声明、定义返回值均写为int,但实际计算返回的是浮点型结果,整数返回规则会直接截断小数部分,数值精度完全丢失。
  • 全局变量被意外污染:F()函数的循环直接修改全局变量n,第一次调用F(b)时会把n从n+1一路减到0,后续调用F(a)时循环边界完全错误,计算逻辑直接失效。
  • 格式化输出类型不匹配:最终结果s是float类型,printf却使用%d整数格式符输出,属于C语言未定义行为,绝大多数场景下会直接输出0。

修正方向

  1. 将F()、g()的返回值类型改为float,匹配实际返回的浮点计算结果。
  2. F()函数内使用局部变量存储循环边界,禁止直接修改全局的多项式次数字段,避免二次调用时变量值异常。
  3. 输出浮点结果时将printf的格式符从%d改为%f,需要控制小数精度时可使用%.2f这类格式限定符。
  4. main函数补充返回值,符合C语言标准规范。

修正后可运行代码参考

#include<stdio.h>
float F(int x, int max_degree);
float g(int k, int l);
int n;
float f[100]; // f[i]存储原函数i次项的系数
int main(){
    printf("적분 구간 ");
    int a,b;
    scanf("%d",&a);
    scanf("%d",&b);
    printf("\n차수 ");
    scanf("%d",&n);
    for(int i=n;i>=0;i--){
        printf("\n%d차항 계수 ",i);
        scanf("%f",&f[i]);
    }
    // 计算原函数系数,原函数最高次为n+1
    for(int i=n;i>=0;i--){
        f[i+1]=f[i]/(i+1);
    } 
    // 定积分计算中原函数常数项会抵消,无需额外赋值
    float s=F(b, n+1)-F(a, n+1);
    printf("%f",s);
    return 0;
}

float F(int x, int max_degree){
    float ret=0;
    // 用局部变量做循环计数,不修改全局n值
    for(int k = max_degree; k >=1; k--){
        ret += g(k, x);
    }
    return ret;
}
    
float g(int k, int l){
    float y=1;
    for(int t=1;t<=k;t++){
        y = y*l;
    }
    y = f[k]*y;
    return y;
}

内容的提问来源于stack exchange,提问作者호롤롤롷롷

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:09:28