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
相关产品推荐
相关产品推荐

