4

所以这是我的 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;
}

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

4

3 回答 3

2

如果输入是A+or 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;

将打印成绩

于 2013-04-24T09:20:24.767 回答
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;

    }

这是您所做的直接扩展,可能有数百万种其他方式。

于 2013-04-24T09:31:41.270 回答
0

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

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 语句,例如 a std::map<char, int>,即使初始化代码从硬编码数据准备它,它也会打开从配置文件加载等级信息的方法或将来某个时候的数据库。不过,在这种情况下,特殊情况 A+ 会变得有点棘手。

于 2013-04-24T09:35:18.323 回答