C ++中的评分系统

时间:2013-04-24 09:15:14

标签: c++ if-statement switch-statement

所以这是我的C ++问题:

编写一个程序,将字母等级翻译成数字等级。字母等级为A,B,C,D和F,可能后跟+或 - 。它们的数值是4,3,2,1和0.没有F +或F-。 A +将数值增加0.3,a - 将数值减少0.3。但是,A +的值为4.0。

输入字母等级:B
数值为2.7

这是我的代码:

int main ()
{
    char grade;
    int value;
    cout << "Enter letter grade : " ;
    cin >> grade;

    switch(grade)
    {
    case 'A' : value = 4;
        break;
    case 'B' : value =  3;
        break;
    case 'C' : value = 2;
        break;
    case 'D' : value = 1;
        break;
    case 'E' : value = 0;
        break;
    default : cout << "Wrong input " << endl;
        break;
    }

    cout << value;
    system("PAUSE");
    return 0;
}

能够打印出4为A,3为B,依此类推。但是,这个问题要求我们对+和 - 进行计算。我应该在切换后使用if else语句吗?

3 个答案:

答案 0 :(得分:2)

如果输入为A+B-,则它不再是字符。所以,使用一串字符来获取它,并检查值。

char a[3];
float m,n;
cin>>a;
if(a[1]=='+')
   m=0.3;
else if (a[1]=='-')
   m=-0.3;
else
    m=0;
switch(a[0])
{
  //Assign the value of n as 4,3,2,1 depending upon the grade.
}
cout<<n+m;

将打印成绩

答案 1 :(得分:0)

简单地添加更多案例会有所帮助。修改您的代码如下:

    int main ()
    {
    String grade;
    float value;
    cout << "Enter letter grade : " ;
    cin >> grade;

    switch(grade)
    {
    case "A" : value = 4;
        break;
    case "A+" : value = 4.3;
        break;
    case "A-" : value = 3.7;
        break;
    case "B" : value = 3;
        break;
    case "B+" : value = 3.3;
        break;
    case "B-" : value = 2.7;
        break;        
    case "C" : value = 2;
        break;
    case "C+" : value = 2.3;
        break;
    case "C-" : value = 1.7;
        break;        
    case "D" : value = 1;
        break;
    case "D+" : value = 1.3;
        break;
    case "D-" : value = 0.7;
        break;        
    case "F" : value = 0;
        break;
    default : cout << "Wrong input " << endl;
        break;
    }

    cout << value;
    system("PAUSE");
    return 0;

    }

这是你所做的直接延伸,可能还有其他百万种方法。

答案 2 :(得分:0)

我依次处理每个角色。你知道第一个应该是一个字母等级,所以你先看看那个,你可以使用像你已经获得的那样的开关语句。

uint value = 0;
char grade_letter = grade[0];

switch (grade_letter) {
    // assign value as appropriate
}

然后,如果存在第二个字符,请检查它是否为+或 - 并相应地修改从switch语句中获得的值。

if (grade.length() > 1) {
    char modifier = grade[1];
    switch (modifier) {
        case '+': value += 0.3;
        // etc.
    }
}

在此之前,您需要检查A +的特殊情况并跳过其他所有内容。

另一种方法是在先前准备的数据结构中用查找替换switch语句,类似于std::map<char, int>,即使初始化代码是从硬编码数据准备的,也会打开通往在将来的某个时刻从配置文件或数据库加载成绩信息。在这种情况下,特殊套管A +变得有点棘手。