2014-10-19 29 views
2

假設當n在80到90的範圍內時,我希望它打印一些東西。連續號碼範圍的開關語句

n=input('Enter your marks: '); 
switch n 
    case n>=90 
     fprintf('Grade : A'); 
    case (n>=80) 
     fprintf('Grade : A'); 
end 

,但它不工作,無論是以下幾點:

switch n 
    case 80:90 
     fprintf('Grade : A'); 
    case 70:80 
     fprintf('Grade : A'); 
end 

我知道,puting {80,81,82,83 ..}這樣可以解決問題,但它確實看起來不是合適的解決方案,對吧?

回答

1

使用if-else語句。不要使用switch語句。開關是爲一個值(意思是如果標記等於80)。您對不同的標記值執行不同的聲明。由於標記值在一個範圍內,因此使用if-else語句。

例子:

n=input('Enter your marks: '); 
if 80 <= n a && n <= 90 
     fprintf('Grade : A'); 
end 
1

我個人總是喜歡switch-case超過if-elseif-elseif....,你只需要傳遞的case值作爲comma separated list

n = 93; 
points = 1:100; 

points = num2cell(points); 
switch n 
    case {points{90:100}} 
     fprintf('Grade : A'); 
    case {points{80:89}} 
     fprintf('Grade : B'); 
    otherwise 
     fprintf('Fail') 
end 

如果與小數有點數,你需要決定是否要roundfloorceil他們。學生喜歡ceil

n = ceil(input('Enter your marks: ')); 

如果用lakesh's suggestion去,你可以考慮使用有利於更簡單的邏輯表達式break聲明。

if n >= 90; 
    fprintf('Grade : A'); 
    break; 
elseif n >= 80; 
    fprintf('Grade : B'); 
    break; 
elseif n >= 70; 
    fprintf('Grade : C'); 
    break; 
end 
0

您也可以通過構建得分的數組做到這一點範圍:

S=[90,80,70,60,0]; 

和相應的字母等級:

G=['A','B','C','D','F']; 

然後,對於一個給定的分數,找到的第一個範圍值小於分數並使用該範圍值的索引作爲字母等級陣列的索引:

Grade=G(find(S(:)<=s,1)) 

對於輸入值s=87,輸出爲Grade = B