使用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
相关产品推荐
相关产品推荐

