【问题标题】:reducing the number of arguments in functions in C减少 C 函数中的参数数量
【发布时间】:2019-07-28 06:32:39
【问题描述】:

我想使用“C 中的数值配方”中定义的 qtrap 函数对函数 f 进行数值积分。

double qtrap(double (*func)(double), double a, double b);

如图所示,它是双精度类型变量的一维积分。

但是我要集成的函数多了一个参数a:

double f(double x, int a)
{
    return a + x * x;
}

现在我正在寻找一种方法来整合 f 以获得不同的 a 值。

到目前为止我的想法:

typedef double (*fctp1_t)(double);       //function pointer type for 1 arg
typedef double (*fctp2_t)(double, int);  //function pointer type for 2 args

int a = 10;
fctp1_t = f1d;
f1d = reduceArgument(f, a);

qtrap(f1d, 0, 1);

使用 reduceArgument 是这样的:

fctp1_t reduceArgument(fctp2_t f2d, int ia)
{
    return f2d(x, ia);
}    

此代码导致错误:'x' undeclared。

感谢您的任何建议。

【问题讨论】:

  • 打开编译器警告并注意警告
  • 好吧,使用 -Wall 我不会收到编译器警告。
  • 您的代码中有一个随机变量x。显然编译器不知道如何处理它,但我们也不知道。
  • x 是函数 f 的积分变量。我看到编译器无法处理 x;这就是我被卡住的原因;这就是我问这个问题的原因。我希望这个问题对于人类来说是清楚的。

标签: c parameter-passing numerical-integration


【解决方案1】:

C 不允许构建这样的函数。您有两种方法可以解决您的问题:

  • 修改 qtrap 使其能够处理参数化函数;

  • 使用全局变量隐式传递参数。

【讨论】:

    猜你喜欢
    • 2018-04-16
    • 2021-07-07
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 2011-11-04
    • 1970-01-01
    • 2022-08-15
    相关资源
    最近更新 更多