2014-09-24 68 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