题目

从标准输入读入一个百分制考试成绩(0~100之间的浮点数),按照区间划分为等级:90及以上为 A,80~89为 B,70~79为 C,60~69为 D,60分以下为 F。对于超出 0~100 范围的异常输入输出错误提示。

输入格式:一行输入一个浮点数。

输出格式:输出成绩等级字母或非法提示。

数据范围与约定:浮点数值。

思路与算法

1. 边界防御在最前
在多分支判断前,先对输入合法性做边界过滤:score < 0 || score > 100 立即拦截,确保后续分支的严格区间有效性。

2. 阶梯式 if-elseif
当使用阶梯式从高到低排列时,前一个分支不满足已经暗含了上限约束,例如既然进入了 score >= 80,它必定严格小于 90,逻辑无需冗余书写 score < 90 && score >= 80。

3. 浮点判等的开闭区间
注意边界临界点包含,例如 89.9 分属于 B,90.0 分属于 A。

完整程序

% Octave / MATLAB 第42题:百分制成绩转等级
[score, count] = scanf("%f", 1);

if count < 1
    fprintf("错误:未检测到有效成绩输入。\n");
    return;
end

% 1. 合法性检查
if score < 0 || score > 100
    fprintf("错误:成绩 %.2f 超出有效范围 [0, 100]。\n", score);
    return;
end

% 2. 阶梯分支
if score >= 90
    grade = 'A';
elseif score >= 80
    grade = 'B';
elseif score >= 70
    grade = 'C';
elseif score >= 60
    grade = 'D';
else
    grade = 'F';
end

fprintf("成绩: %.2f | 等级: %c\n", score, grade);

运行示例

示例 1:

输入:

85.5

输出:

成绩: 85.50 | 等级: B

示例 2:

输入:

92.0

输出:

成绩: 92.00 | 等级: A

示例 3:

输入:

58.0

输出:

成绩: 58.00 | 等级: F