我在用C++做一个代码来计算一个学生的CGPA。 我决定使用3个科目,并通过一个不同的功能收集每一个科目的绩点。 我已经把代码看了好几遍了,我也弄不明白为什么这个数字错得这么厉害。
#include <iostream>
using namespace std;
void grade(int mark){
int gradepoint;
if (mark >= 81) {
gradepoint = 10;
}
if (mark >= 61 && mark <= 80) {
gradepoint = 8;
}
if (mark >= 41 && mark<= 60) {
gradepoint = 6;
}
if (mark <= 40){
gradepoint = 0;
}
}
void grade1(int mark1){
int gradepoint1;
if (mark1 >= 81) {
gradepoint1 = 10;
}
if (mark1 >= 61 && mark1 <= 80) {
gradepoint1 = 8;
}
if (mark1 >= 41 && mark1 <= 60) {
gradepoint1 = 6;
}
if (mark1 <= 40){
gradepoint1 = 0;
}
}
void grade2(int mark2){
int gradepoint2;
if (mark2 >= 81) {
gradepoint2 = 10;
}
if (mark2 >= 61 && mark2 <= 80) {
gradepoint2 = 8;
}
if (mark2 >= 41 && mark2 <= 60) {
gradepoint2 = 6;
}
if (mark2 <= 40){
gradepoint2 = 0;
}
}
int main(){
int mark, mark1, mark2;
int gradepoint, gradepoint1, gradepoint2;
cout <<"Please enter your marks for English. ";
cin >> mark;
grade(mark);
cout <<"Please enter your marks for Maths. ";
cin >> mark1;
grade1(mark1);
cout <<"Please enter your marks for Science. ";
cin >> mark2;
grade2(mark2);
cout << gradepoint + gradepoint1 + gradepoint2;
return 0;
}
然而,我所得到的所有三个科目的绩点是完全错误的。 有人能告诉我我做错了什么吗?
下面是您的代码的工作版本,只需进行最少的编辑:
#include <iostream>
using namespace std;
int grade(int mark){
int gradepoint;
if (mark >= 81) {
gradepoint = 10;
}
if (mark >= 61 && mark <= 80) {
gradepoint = 8;
}
if (mark >= 41 && mark<= 60) {
gradepoint = 6;
}
if (mark <= 40){
gradepoint = 0;
}
return gradepoint;
}
int grade1(int mark1){
int gradepoint1;
if (mark1 >= 81) {
gradepoint1 = 10;
}
if (mark1 >= 61 && mark1 <= 80) {
gradepoint1 = 8;
}
if (mark1 >= 41 && mark1 <= 60) {
gradepoint1 = 6;
}
if (mark1 <= 40){
gradepoint1 = 0;
}
return gradepoint1;
}
int grade2(int mark2){
int gradepoint2;
if (mark2 >= 81) {
gradepoint2 = 10;
}
if (mark2 >= 61 && mark2 <= 80) {
gradepoint2 = 8;
}
if (mark2 >= 41 && mark2 <= 60) {
gradepoint2 = 6;
}
if (mark2 <= 40){
gradepoint2 = 0;
}
return gradepoint2;
}
int main(){
int mark, mark1, mark2;
cout <<"Please enter your marks for English. ";
cin >> mark;
cout <<"Please enter your marks for Maths. ";
cin >> mark1;
cout <<"Please enter your marks for Science. ";
cin >> mark2;
cout << grade(mark1) + grade1(mark1) + grade2(mark2);
return 0;
}
所以这是一次学习的经历,而不是复制/粘贴,下面是你做错的和/或可以做得更好的地方:
int grade()
是一个配方。 您可以向它传递任何变量,并基于该配方检索输出。 这样做的目的是不要为传递给它的每个变量创建函数的完整副本。iostream
的C。 实验类,重载等,以了解如何在C++中做得更好。 例如,您可以向名为GPaccalculator
的类添加不同的功能,例如打印成绩,存储成绩,将GPA计算移到类内等等。下面是经过大量编辑的代码的工作版本:
#include <iostream>
using namespace std;
int grade(int mark){
int gradepoint;
if (mark >= 81) {
gradepoint = 10;
}
if (mark >= 61 && mark <= 80) {
gradepoint = 8;
}
if (mark >= 41 && mark<= 60) {
gradepoint = 6;
}
if (mark <= 40){
gradepoint = 0;
}
return gradepoint;
}
int main(){
int mark, mark1, mark2;
cout <<"Please enter your marks for English. ";
cin >> mark;
cout <<"Please enter your marks for Maths. ";
cin >> mark1;
cout <<"Please enter your marks for Science. ";
cin >> mark2;
cout << grade(mark) + grade(mark1) + grade(mark2);
return 0;
}