这个程序应该非常简单,但出于某种原因,我无法弄清楚如何重写逻辑,以便它使用' if'只有陈述(没有其他)。
基本上就像这样
if(score >= 90)
grade = 'A';
else if(score >= 80)
grade = 'B';
等
我们打算重写这个逻辑,以便它只使用' if'而不是'否则'。我尝试了几种方法,似乎没有一种方法适合我。我试过的方式我认为可行的是这个
if(score <= 100)
{
if(score < 90)
{
if(score <80)
{
if(score <70)
{
if(score <60)
{
grade = 'F';
}
grade = 'D';
}
grade = 'C';
}
grade = 'B';
}
}
if(score >= 90)
grade = 'A';
这将正确地得到A的等级,而B但是当我低于80时,它总是给我B.可以有人指出我的错误吗?或者也许更简单的方法来做到这一点?
答案 0 :(得分:1)
在你们发布之前,我实际上已经把它弄清楚了,但我很感激你的帮助!我发布这个作为答案因为我做的不同然后发布了两个答案。
if(score < 60)
grade = 'F';
if(score >= 60)
grade = 'D';
if(score >=70)
grade = 'C';
if(score >=80)
grade = 'B';
if(score >= 90)
grade = 'A';
基本上只是采用了if-else逻辑并将其翻转而没有其他的。再次感谢!
答案 1 :(得分:0)
两种可能性(嵌套而非嵌套):
grade = 'A';
if(score < 90)
{
grade = 'B';
if(score < 80)
{
grade = 'C';
//...
}
}
if(score >= 90) grade = 'A';
if(score >= 80 && score < 90) grade = 'B';
if(score >= 70 && score < 80) grade = 'C';
...
答案 2 :(得分:0)
尝试分离If语句
if(score < 90)
{grade = 'B';}
if(score <80)
{grade = 'C';}
if(score <70)
{grade = 'D';}
if(score <60)
{grade = 'F';}
if(score >= 90)
grade = 'A';
答案 3 :(得分:0)
始终从最小范围向上检查并与<
/ <=
进行比较,或者从最大范围向下检查与>
/ >=
。除了使用else if
来避免像上面大多数答案一样的多余检查。例如OP的解决方案将得分与60进行了两次比较,这是不必要的
if (score < 60)
grade = 'F';
else if (score < 70)
grade = 'D';
else if (score < 80)
grade = 'C';
else if (score < 90)
grade = 'B';
else
grade = 'A';
但是您实际上并不需要那么多if
块
const char* SCORE[] = "FDCBA";
if (score < 60)
grade = 'F'; // or = SCORE[0];
else if (score < 100);
grade = SCORE[score/10 - 5];
else if (score == 100)
grade = 'A'; // or = SCORE[4];