0

假设我有一个多项式函数 f(x),我想将此表达式用于表达式 g(x) 或 h(x),具体取决于用户选择。这可能吗?

例如

int main() {

   float fexpression = /* polynomial function f(x) here */;    

   /* some code where user picks g(x) or h(x) */

   if (/* gexpression == true */)
        cout << gfunction(fexpression);
   else /* h expression == true */
        cout << hfunction(fexpression);

return 0;
    }

 float gfunction(float j){

     float var = /* some function representing g(f(x)) == g(j) */;
  return var;
  }

 float hfunction(float j){
       float var = /* some function representing h(f(x)) == h(j) */;
  return var;
      }

在我看来,我可以传递一个作为表达式的变量,例如

float fexpression = ....
4

2 回答 2

3

你想要一个函数指针

使表达式成为函数。

float fexpression( float x )
{
   return (5*(pow(x,4))) + (3*(pow(x, 3))) + (10 * x) - 5
}

正如您编写的那样,此代码将传递功能本身。

   if (/* gexpression == true */)
        cout << gfunction(fexpression);
   else /* h expression == true */
        cout << hfunction(fexpression);
于 2013-02-07T03:36:58.797 回答
3

我试图在德鲁答案的评论部分解释这个细节,但它在格式中丢失了......所以不得不开始另一个答案。

@DrewDorman 的说法是正确的,您只需将表达式定义为一个函数:

float fexpression( float x )
{
   return (5*(pow(x,4))) + (3*(pow(x, 3))) + (10 * x) - 5
}

(对您而言)缺少的是以下内容(您可以通过阅读 Drew 的链接...):

定义gfunction如下(例如)

float gfunction(float (*funcp)(float)) {
    // lots of stuff to determine the value of x
    return (*funcp)(x);
}

这就是 gfunction 如何评估您的多项式。做类似的事情hfunction

调用 gfunction 时,必须引用fexpression如下:

cout << gfunction(&fexpression);

问题......德鲁的&回答也没有。

于 2013-02-07T04:18:00.603 回答