所以这是我的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语句吗?
答案 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 +变得有点棘手。