我正在看我的C教科书,里面有一个页面,提示告诉我将多项式转换为C代码。我们尚未讨论指数运算符,现在已明确指示不要使用它们,而可以使用基本运算符找到另一种方法。多项式是这样的:5x^(2)+3x-2
。
我该怎么做?
答案 0 :(得分:5)
请注意,ax^2 + bx + c
可以写为
c + x*(b + x*(a))
可以很容易地将其扩展为任意多项式。
答案 1 :(得分:3)
C中没有exponent operator
这样的东西。虽然您可以使用pow()
完成相同的事情。我怀疑您的书不想要这个。鉴于此限制,您可以简单地x^2
来执行x * x
的操作,其中x
是函数的变量。
即您可以执行以下操作:
int poly(int x) {
int y = ((5 * x * x) + (3 * x) - 2);
return y;
}
附录:
如果您想拥有一个可以轻松扩展为任意多项式的通用公式,则可以使用此公式,并输入a
,b
,c
和{ {1}}:
x
感谢chux和FredK。
答案 2 :(得分:1)
我认为您应该在第二个多项式函数中设置参数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
答案 3 :(得分:1)
C没有指数运算符。
一种真正方便的多项式建模方法是使用数组存储系数,这样数组索引对应于x
的幂。 IOW,要建模5x2 + 3x - 2
,请使用
double coef[] = {-2.0, 3.0, 5.0}; // -2.0 + 3.0x + 5.0x^2
要评估多项式,请使用循环,并考虑FredK在其答案中提到的属性-5x2 + 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];
此方法适用于任何程度的多项式。