C中的整数分数到字母等级?

时间:2014-09-24 19:30:47

标签: c

这个程序应该非常简单,但出于某种原因,我无法弄清楚如何重写逻辑,以便它使用' 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.可以有人指出我的错误吗?或者也许更简单的方法来做到这一点?

4 个答案:

答案 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];