You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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;
}

代码说明

  1. 百分制转换:统一不同满分科目的计分标准,确保GPA计算公平性。
  2. 精度处理:使用Math.Round将平均分保留两位小数,避免浮点数精度误差。
  3. 等级映射:严格遵循给定的伪代码区间逻辑,其中F等级固定显示0%(符合伪代码要求)。
  4. 边界处理:额外处理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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:35:34