题目

给定二次多项式 $f(x) = a x^2 + b x + c$,从标准输入读入参数 a, b, c 与自变量 x,计算该多项式在点 x 处的函数值。

输入格式:一行输入 4 个浮点数,分别为 a, b, c, x。

输出格式:输出多项式在 x 点的取值,保留 4 位小数。

数据范围与约定:系数与自变量均为实数。

思路与算法

1. 运算符优先级
算术优先级顺序为:括号 () > 乘方 ^ > 乘除 * / > 加减 + -。表达式 a * x^2 + b * x + c 中,x^2 先计算,再与 a 相乘。

2. 秦九韶算法(Horner 规则)
计算机求多项式值的高效稳定写法为嵌套形式:$f(x) = (a x + b) x + c$。此形式将乘法次数降到最低且减少大数截断误差。

3. 验证对比
本题可手写算术表达式,并与 Horner 嵌套形式对照,验证结果一致性。

完整程序

% Octave / MATLAB 第7题:二次多项式求值
[params, count] = scanf("%f", 4);

if count < 4
    fprintf("错误:请输入 a, b, c, x 共 4 个数值。\n");
    return;
end

a = params(1);
b = params(2);
c = params(3);
x = params(4);

% 常规展开式
val_standard = a * (x^2) + b * x + c;

% Horner 嵌套算法 (稳定性更高)
val_horner = (a * x + b) * x + c;

fprintf("多项式: (%.2f)x^2 + (%.2f)x + (%.2f)\n", a, b, c);
fprintf("自变量 x: %.4f\n", x);
fprintf("函数值 f(x): %.4f\n", val_standard);

运行示例

输入:

2 3 -5 2

输出:

多项式: (2.00)x^2 + (3.00)x + (-5.00)
自变量 x: 2.0000
函数值 f(x): 9.0000