题目
给定二次多项式 $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