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

使用C++结构体计算字母成绩时始终输出F的问题求助

问题分析与解决

你的程序核心问题在于最终成绩的数值范围不匹配:

  • 计算total_grade时,你把各部分成绩转换成了0~1之间的小数权重(比如满分时总和是1.0)
  • 但判断字母等级的条件用的是60、70这些百分制数值,1.0远小于60,所以无论如何都会触发第一个if条件输出F

修正方案(两种任选其一)

方案1:调整判断条件,适配小数形式的total_grade

把判断条件改成0~1的范围,同时将多个独立if改为else if优化逻辑:

cout <<"Letter grade: ";

if(the_grades.total_grade < 0.6)
{
cout << "F";
}
else if(the_grades.total_grade < 0.7)
{
cout << "D";
}
else if(the_grades.total_grade < 0.8)
{
cout << "C";
}
else if(the_grades.total_grade < 0.9)
{
cout << "B";
}
else
{
cout << "A";
}
cout << endl;

方案2:直接计算百分制的total_grade

修改成绩计算逻辑,让total_grade直接是0~100的数值,这样原判断条件可直接复用:

// 替换原成绩计算代码
double quiz_avg_percent = ((the_grades.quiz1 + the_grades.quiz2) / 20) * 100;
the_grades.total_grade = quiz_avg_percent * 0.25 + the_grades.midterm * 0.25 + the_grades.final * 0.5;

同时输出最终成绩时无需再乘以100:

cout <<"Final grade: "<< the_grades.total_grade;

修正后的完整代码(以方案1为例)

#include<iostream>

using namespace std;

struct record
{
  double quiz1;
  double quiz2;
  double midterm, midterm_one;
  double final, final_one;
  double quiz_average;
  char final_grade;
  double total_grade;
};

void input(record& the_grades);
void output(record& the_grades);

int main()
{
    record grades;
    input(grades);
    output(grades);
    cout << endl << endl;
    system("pause");
    return EXIT_SUCCESS;
}

void input(record& the_grades)
{
    cout << "Enter quiz1 grade out of 10 :\n";
    cin >> the_grades.quiz1;
    cout << endl;
    cout << "Enter quiz2 grade out of 10 :\n";
    cin >> the_grades.quiz2;
    cout << "Enter midterm Exam grade out of 100 :\n";
    cin >> the_grades.midterm;
    cout << endl;
    cout << "Enter Final Exam grade out of 100 :\n";
    cin >> the_grades.final;
    cout << endl;
}

void output(record& the_grades)
{
the_grades.quiz_average = (((the_grades.quiz1/10) + (the_grades.quiz2/10))/2) * .25;
the_grades.final_one = (the_grades.final/100) * .5;
the_grades.midterm_one = (the_grades.midterm/100) *.25;
the_grades.total_grade = the_grades.quiz_average + the_grades.final_one + the_grades.midterm_one;

cout << endl << endl;
cout <<"Quiz1: "<< the_grades.quiz1 <<"/10";
cout << endl;
cout <<"Quiz2: "<< the_grades.quiz2 <<"/10";
cout << endl;
cout <<"Midterm exam: " << the_grades.midterm<<"/100";
cout << endl;
cout <<"Final exam: " << the_grades.final<<"/100";
cout << endl;
cout <<"Final grade: "<< the_grades.total_grade*100;
cout << endl;
cout <<"Letter grade: ";

    if(the_grades.total_grade < 0.6)
    {
    cout << "F";
    }
    else if(the_grades.total_grade < 0.7)
    {
    cout << "D";
    }
    else if(the_grades.total_grade < 0.8)
    {
    cout << "C";
    }
    else if(the_grades.total_grade < 0.9)
    {
    cout << "B";
    }
    else
    {
    cout << "A";
    }
    cout << endl;
}

内容的提问来源于stack exchange,提问作者radwave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:55:10