题目

编写一个 Octave / MATLAB 程序,从标准输入读入两个数 a 和 b,依次输出它们的和、差、积与商;当除数 b 为 0 时,不得执行除法运算,并输出明确的安全提示。

输入格式:一行输入两个数字 a 和 b,以空格或换行分隔。

输出格式:分行输出加、减、乘的结果;商单独一行输出。若除数为 0,则商的部分输出除零警告说明。

数据范围与约定:a, b 为双精度浮点数,支持正负数与小数。

思路与算法

1. 输入捕获机制
在 Octave 脚本中,从标准输入捕获批处理数据可调用 scanf("%f %f", 2) 一次性读取两个浮点数值。相较交互式 input(),在自动化评测与批处理流中 scanf 表现更稳定,且返回值携带实际读取到的元素个数。

2. 浮点除零防御
不同于 C 语言整数除零会直接触发硬件异常崩溃,Octave 浮点除零默认静默返回 Inf 或 NaN。虽然进程不会崩溃,但会污染后续计算流水线。必须显式通过 abs(b) < 1e-12 或 b ~= 0 进行防御判定。

3. 格式化输出对齐
使用 fprintf 指定浮点占位符 %.4f,确保输出小数位数受控且自动换行,避免 disp 因默认显示策略产生不必要的浮动缩进。

完整程序

% Octave / MATLAB 第1题:两数求和、差、积、商
% 从标准输入读入两数并执行基本运算,处理除零异常

% 1. 读取输入数据(期望读入 2 个数值)
[vals, count] = scanf("%f %f", 2);

if count < 2
    fprintf("错误:未能成功读取两个数值,请检查输入格式。\n");
    return;
end

a = vals(1);
b = vals(2);

% 2. 执行加、减、乘运算
sum_val  = a + b;
diff_val = a - b;
prod_val = a * b;

fprintf("和: %.4f\n", sum_val);
fprintf("差: %.4f\n", diff_val);
fprintf("积: %.4f\n", prod_val);

% 3. 除法安全判断:考虑浮点精度容差
if abs(b) > 1e-12
    div_val = a / b;
    fprintf("商: %.4f\n", div_val);
else
    fprintf("商: 除数为 0,无法计算商\n");
end

运行示例

示例 1:

输入:

15.5 2.5

输出:

和: 18.0000
差: 13.0000
积: 38.7500
商: 6.2000

示例 2:

输入:

9.0 0

输出:

和: 9.0000
差: 9.0000
积: 0.0000
商: 除数为 0,无法计算商