如何在C#项目中通过汇总6门科目总分计算GPA?
C# GPA计算实现方案
需求梳理
需要基于6门不同满分的科目成绩计算GPA:
- 科目及满分:英语(70)、数学(70)、科学(50)、历史(50)、地理(50)、体育(25)
- 计算逻辑:先将成绩转换为百分制(否则平均分最高仅52.5,无法触发伪代码中>80的等级),取6门百分制分数的平均值,再根据区间映射A-F字母等级。
实现代码
public static string CalculateGPA(int englishScore, int mathScore, int scienceScore, int historyScore, int geographyScore, int peScore) { // 将每门科目成绩转换为百分制 double englishPercent = (double)englishScore / 70 * 100; double mathPercent = (double)mathScore / 70 * 100; double sciencePercent = (double)scienceScore / 50 * 100; double historyPercent = (double)historyScore / 50 * 100; double geographyPercent = (double)geographyScore / 50 * 100; double pePercent = (double)peScore / 25 * 100; // 计算百分制平均分,保留两位小数 double vGPA = (englishPercent + mathPercent + sciencePercent + historyPercent + geographyPercent + pePercent) / 6; vGPA = Math.Round(vGPA, 2); // 按区间映射等级 string grade; if (vGPA > 80) { grade = $"A & {vGPA}%"; } else if (vGPA > 65) { grade = $"B & {vGPA}%"; } else if (vGPA > 50) { grade = $"C & {vGPA}%"; } else if (vGPA > 35) { grade = $"D & {vGPA}%"; } else if (vGPA > 20) { grade = $"E & {vGPA}%"; } else if (vGPA > 0) { grade = "F & 0%"; } else { grade = "F & 0%"; } return grade; }
代码说明
- 百分制转换:统一不同满分科目的计分标准,确保GPA计算公平性。
- 精度处理:使用
Math.Round将平均分保留两位小数,避免浮点数精度误差。 - 等级映射:严格遵循给定的伪代码区间逻辑,其中F等级固定显示
0%(符合伪代码要求)。 - 边界处理:额外处理0分的极端情况,确保输出覆盖所有可能的输入。
备选方案(不转换百分制)
若需求确实不需要转换为百分制,直接计算原始得分的平均分,可使用以下代码,但需注意此逻辑下A、B等级永远无法触发(原始平均分最高仅52.5):
public static string CalculateGPAWithoutPercent(int englishScore, int mathScore, int scienceScore, int historyScore, int geographyScore, int peScore) { double vGPA = (englishScore + mathScore + scienceScore + historyScore + geographyScore + peScore) / 6.0; vGPA = Math.Round(vGPA, 2); string grade; if (vGPA > 80) { grade = $"A & {vGPA}"; } else if (vGPA > 65) { grade = $"B & {vGPA}"; } else if (vGPA > 50) { grade = $"C & {vGPA}"; } else if (vGPA > 35) { grade = $"D & {vGPA}"; } else if (vGPA > 20) { grade = $"E & {vGPA}"; } else if (vGPA > 0) { grade = "F & 0"; } else { grade = "F & 0"; } return grade; }
内容的提问来源于stack exchange,提问作者HayesK
相关产品推荐
相关产品推荐

