C语言函数嵌套调用计算错误分析及修正

本文将分析一段使用函数嵌套调用方法计算的C语言代码,并解释代码中出现的错误及修正方法。

问题代码:

#include <stdio.h>

double fac(int n)
{
    double s=n; // 错误:当n=0时,s的初值为0而不是1
    if(n<=1) return 1;
    for(;--n;) s*=n;
    return s;
}

double sum(int n1, int n2)
{
    int i;
    double s=0;
    for(i=n1;i<=n2;i++) s+=1/fac(i);
    return s;
}

int main ( )
{
    double s;
    s=sum(1,3)+sum(6,9)+sum(12,15);
    printf("\ns=%f",s);
    return 0;
}

错误分析:

经过计算,发现代码中存在一个问题:在函数fac中,当n=0时,s的初值为0而不是1,导致0!被计算为1,从而影响了最终结果。

修正方法:

修改fac函数如下:

double fac(int n)
{
    double s=1; // 将s的初值改为1
    if(n<=1) return 1;
    for(;--n;) s*=n;
    return s;
}

运行结果:

重新运行程序,结果为s=1.668282,与正确结果一致。

总结:

本文通过分析C语言函数嵌套调用方法计算过程中出现的错误,强调了初始化变量时需注意细节,避免出现逻辑错误,从而影响最终结果。

C语言函数嵌套调用计算错误分析及修正

原文地址: https://www.cveoy.top/t/topic/mQei 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录