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

C语言代码运行报错called object is not a function该如何修复?

代码修复方案

报错根因

你遇到的error: called object is not a function or function pointer报错,是因为导数计算行的1 / 2 (x , -1 / 2)写法不符合C语法:编译器会将这段代码识别为尝试把1/2这个整数运算结果当做函数来调用,自然触发报错。

其他需要修复的问题

  • 整数除法精度问题:C语言中两个整数做除法会执行截断,1/2的运算结果是0而非0.5,需要改为1.0/2.0这类浮点数写法才能得到正确的小数结果。
  • 导数逻辑错误:
    • 幂运算需要调用标准库的pow()函数,不能直接写幂次参数
    • 导数符号错误:原函数$f(x) = x + x^{1/2} + x^{1/3} -2.5$的所有项导数均为正,你写的减号属于逻辑错误
    • 导数幂次错误:根据求导公式$d(x^a)/dx = a \cdot x{a-1}$,$x{1/3}$的导数幂次应为$-2/3$而非你写的$-1/3$
  • 绝对值函数误用:abs()仅支持int类型参数,double类型的绝对值计算需要使用fabs()函数

修复后完整代码

#include <math.h>
#include <stdio.h>

int main() {
    double x0, x, eps, dx, r;

    x0 = 0.60000;
    x = x0;
    eps = 0.0001;

    do {
        r = x + pow(x, 1.0/2.0) + pow(x, 1.0/3.0) - 2.5;
        // 修正导数计算逻辑
        double derivative = 1 + (1.0/2.0) * pow(x, -1.0/2.0) + (1.0/3.0) * pow(x, -2.0/3.0);
        dx = r / derivative;
        x = x - dx;
    } while (fabs(dx) > eps);
          
    printf("近似根:%f,代入残差:%f\n", x, r);

    return 0;
}

运行说明

修复后代码可正常编译运行,得到满足0.0001精度要求的近似根约为0.8084,残差接近0,符合求解要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:06:05