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

求解:计算ln(1-x)的C语言程序无法运行的问题

程序无法运行/计算错误的原因及修复方案

1. 直接导致编译失败的语法错误

  • 代码末尾的输出语句写成了print f,中间多了空格,正确写法是printf,这是编译报错的直接原因。

2. 核心计算逻辑错误(即使修复语法也得不到正确结果)

你的代码逻辑完全不符合ln(1-x)的泰勒展开公式:

ln(1-x) 的泰勒展开式(收敛域 |x| < 1):
ln(1-x) = - (x + x²/2 + x³/3 + ... + xⁿ/n + ...)

你的代码存在这些逻辑问题:

  • 变量a每次循环都被赋值为1,没有正确对应分母的项数i;
  • 累加计算的方式ln = (ln + s) / a; ln = ln * (1 - x);完全偏离公式逻辑;
  • 外层循环从i=0开始,逻辑上泰勒展开应该从i=1开始;
  • 没有处理每一项的负号,展开式每一项都是负数累加。

修复后的完整代码

#include <stdio.h>

int main()
{
    int n, i;
    float x, ln, term;

    printf("entrer la valeur de x=");
    scanf("%f", &x);
    // 泰勒展开收敛域检查,x需满足 -1 ≤ x < 1
    if (x >= 1 || x < -1) {
        printf("x doit être dans l'intervalle [-1, 1)\n");
        return 1;
    }

    printf("entrer la valeur de n=");
    scanf("%d", &n);

    ln = 0.0f;
    term = x; // 初始化第一项为x
    for (i = 1; i <= n; i++) {
        ln -= term / i; // 累加负的xⁿ/n
        term *= x; // 递推计算下一项的x幂次,避免重复循环
    }

    printf("ln(1-x)= %f\n", ln);

    return 0;
}

修复说明

  • 修正了printf的拼写错误;
  • 增加了输入x的范围检查,保证计算在泰勒展开的收敛域内;
  • 用递推方式计算x的幂次,提升计算效率;
  • 严格按照泰勒展开公式实现累加逻辑,确保结果正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:45:55