如何在没有指数运算符的情况下用 C 编程转换多项式?

How do I translate a polynomial with C programming without exponent operators?

我正在查看我的 C 教科书,里面有一页提示告诉我将多项式转换为 C 代码。我们还没有讨论指数运算符,并且被特别指示此时不要使用它们并找到其他使用基本运算符的方法。多项式是这样的:5x^(2)+3x-2

我该怎么做?

C 中没有 exponent operator 这样的东西。虽然您可以使用 pow() 完成同样的事情。我怀疑你的书不想要这个。鉴于此限制,您可以像 x * x 那样简单地执行 x^2 的操作,其中 x 是您函数的变量。

即你可以这样做:

int poly(int x) {
    int y = ((5 * x * x) + (3 * x) - 2);
    return y;
}

附录:

如果您想要一个可以轻松扩展为任何多项式次数的通用公式,您可以改用此公式,输入为 abcx:

int poly(int a, int b, int c, int x) {
    int y = c + x*(b + x*(a));
    return y;
}

感谢 chux 和 FredK。

我认为你应该在第二个多项式函数中参数化 a,b,c 和 x

int poly2(int a, int b, int c, int x)
{
    int y = a*x*x+b*x+c;
    return y; 
}

在您的案例中使用此功能时,您可以调用

int result = poly2(a,b,c, x) 

具有一组特定的 a、b、c、x

注意ax^2 + bx + c可以写成

c + x*(b + x*(a))

这可以很容易地扩展到任意阶的多项式。

C 没有指数运算符。

一种非常方便的多项式建模方法是使用数组来存储系数,这样数组索引对应于 x 的幂。 IOW,建模 5x<sup>2</sup> + 3x - 2,使用

double coef[] = {-2.0, 3.0, 5.0}; // -2.0 + 3.0x + 5.0x^2

要计算多项式,请使用循环,同时考虑 FredK 在他的回答中提到的 属性 - 5x<sup>2</sup> + 3x - 2 == ((5)x + 3)x - 2:

size_t num_elements = sizeof coef / sizeof coef[0]; // yields 3 in this case
double result = 0;
for (size_t i = num_elements - 1; i > 0; i--)
  result += x * ( result + coef[i] );
result += coef[0];

此方法适用于任何次数的多项式。