C++基于if选择结构的百分制成绩转绩点功能实现问题
C++成绩转绩点代码调整方案
原代码核心问题
- 成绩类型定义为
int,无法匹配带小数的阈值判断,会出现精度丢失 - 错误输入判断条件逻辑错误,
grade > 100 && grade < 0永远无法成立,应改为逻辑或 - 错误分支仅和最后一个
if绑定,输入超出范围时无法正常触发提示 - 缺少原始成绩输出逻辑
- 连续使用独立
if会造成不必要的性能开销
调整后完整代码
#include <iostream> using namespace std; int main(){ // 改用double存储成绩,适配带小数的阈值判断 double grade; cout << "Enter a grade input : "; cin >> grade; // 先做合法性校验 if (grade < 0 || grade > 100) { cout << "Wrong Data" << endl; } else { // 合法则先输出原始成绩 cout << "Your input grade is: " << grade << endl; // 改用if-else if阶梯结构,避免无效判断 if (grade >= 94 && grade <= 100){ cout << "Your output grade is: 1.00" << endl; } else if (grade >= 88.50 && grade <= 93.39){ cout << "Your output grade is: 1.25" << endl; } else if (grade >= 83 && grade <= 88.49){ cout << "Your output grade is: 1.50" << endl; } else if (grade >= 77.5 && grade <= 82.99){ cout << "Your output grade is: 1.75" << endl; } else if (grade >= 72 && grade <= 77.49){ cout << "Your output grade is: 2.00" << endl; } else if (grade >= 65.5 && grade <= 71.99){ cout << "Your output grade is: 2.25" << endl; } else if (grade >= 61 && grade <= 65.49){ cout << "Your output grade is: 2.50" << endl; } else if (grade >= 55.5 && grade <= 60.99){ cout << "Your output grade is: 2.75" << endl; } else if (grade >= 50 && grade <= 55.49){ cout << "Your output grade is: 3.00" << endl; } } return 0; }
关键改动说明
- 数据类型改为
double,支持用户输入带小数的成绩,避免阈值判断误差 - 优先做输入范围校验,不合法直接输出
Wrong Data,符合需求要求 - 新增原始成绩输出逻辑,满足先展示用户输入、再展示对应绩点的要求
- 将独立
if改为else if链式结构,匹配完对应区间后直接跳出判断,运行效率更高 - 修正了错误输入的判断逻辑,将逻辑与
&&改为逻辑或||,保证异常输入能正确触发提示
内容的提问来源于stack exchange,提问作者Jah
相关产品推荐
相关产品推荐

