题目
从标准输入读入一个百分制考试成绩(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