2012-09-26 46 views
0

我正在寫一個問題的matlab代碼,我正在使用開關的情況下檢查一系列的數字。使用開關盒是分配的一項要求。如何檢查在matlab中的數字範圍

switch score  
case {90,91,92,93,94,95,96,97,98,99,100}  
    disp('Your grade is an A'); 
case {80,81,82,83,84,85,86,87,88,89} 
    disp('Your grade is an B'); 
case {70,71,72,73,74,75,76,77,78,79} 
    disp('Your grade is an C'); 
case {60,61,62,63,64,65,66,67,68,69} 
disp('Your grade is an D'); 
otherwise 
disp('Your grade is an F'); 
end 

有沒有辦法讓範圍更容易打字,如score < 60等?

如何檢查小數,如果這種原始的方式是唯一的方法?

回答

1

你想與:

case num2cell(60:69) 
你的情況

一起使用num2cell,你將有:

switch score 

case num2cell(90:100) 

disp('Your grade is an A'); 

case num2cell(80:89) 

disp('Your grade is an B'); 

case num2cell(70:79) 

disp('Your grade is an C'); 

case num2cell(60:69) 

disp('Your grade is an D'); 

otherwise 

disp('Your grade is an F'); 

end 

但考慮到你的問題,我認爲,如果-ELSEIF-ELSEIF-ELSE用數比較><更合適,因爲可能有一半標記。現在使用你的switch語句,99.5會得到'F'。

`

+0

感謝您的回覆,但不幸的是我不能使用其他 - 如果和不得不使用swtich語句,我可以做什麼的任何想法?謝謝 –

+0

然後就像我上面寫的那樣做num2cell(60:69)。 –

+0

查看我編輯的答案 –

0

我覺得寫一個if語句會使代碼更容易一點。有了這個,你不需要明確地測試每一種情況下,纔有了第一個「事件」觸發設定等級:

score = 75; 

if score >= 90 
    disp('Your grade is an A'); 
elseif score >= 80 
    disp('Your grade is an B'); 
elseif score >= 70 
    disp('Your grade is an C'); 
elseif score >= 60 
    disp('Your grade is an D'); 
else 
    disp('Your grade is an F'); 
end 

輸出:

Your grade is an C 
+0

如果我被允許使用else if語句會很好,但其中一個要求是它必須是一個開關 –

3

如果你知道你始終保持得分這樣,你可以使用

switch floor(score/10) 
case {9 10} 
case 8 
case 7 
[...] 
end 

但是,如果你認爲打分函數可能會改變,你叫switch語句之前的分數轉換爲類指標是有用的。

例如

%# calculate score index 
nextClass = [60 70 80 90]; 
scoreIdx = sum(score>=nextClass); 

%# assign output 
switch scoreIdx 
case 5 
%# A 
case 4 
%# B 
[...] 

end 

當然,你可以與上面的​​變量完全替代了切換命令。

grades = 'FDCBA'; 
fprintf('Your grade is an %s',grades(scoreIdx+1)) 
+0

感謝您的回覆,我會試一試,看看它是否工作。 –