2014-09-24 38 views
-2

这个程序应该非常简单,但由于某种原因,我无法弄清楚如何重写逻辑,以便仅使用'if'语句(别的)。C整数得分与字母等级?

基本上就是这个样子

if(score >= 90) 
grade = 'A'; 
else if(score >= 80) 
grade = 'B'; 

我们是为了返工这个逻辑,使其仅使用“如果”,而不是“其他”。我尝试了几种方法,但他们中的任何一个都不适合我。我尝试的方式,我想会的工作是这样的

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.任何人都可以指出我的错误?或者也许更简单的方法来做到这一点?

+1

请用所有的警告和调试信息(例如'gcc -Wall -g')进行编译,然后**使用调试器**(例如'gdb'),例如一步一步地运行你的程序。这是一个必不可少的技能。 – 2014-09-24 19:32:20

+0

没有错误,如果输入的值低于80,它不会给出正确的结果。 – bibzuda7 2014-09-24 19:32:56

+6

但是没有给出预期的结果*是一个错误(并且大多数错误都是类似的)! – 2014-09-24 19:34:29

回答

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'; 
... 
1

尝试分离的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'; 
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逻辑,并翻转它倒过来没有其他的。再次感谢!

+0

请注意,首先如果不是真的需要,等级='F'就足够了。我不知道这是否是一种常见的规则,但是我个人倾向于在“纯”的情况下留下“其他”分支。例如,想象一下“双重分数”和NAN值。 – user3125367 2014-09-25 17:38:46