如何在matlab中检查一系列数字

时间:2012-09-26 19:19:10

标签: matlab if-statement numbers switch-statement range

我正在为一个问题编写一个matlab代码,我正在使用一个switch case检查一系列数字。使用switch case是分配的必要条件。

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等那样输入?

如果这种原始方式是唯一的方法,如何检查小数?

3 个答案:

答案 0 :(得分: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

当然,您可以使用上面的scoreIdx变量完全替换switch命令。

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

答案 1 :(得分:1)

您想将num2cell与:

一起使用
case num2cell(60:69)

在您的情况下,您将拥有:

 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

但考虑到你的问题,我认为if-elseif-elseif-else与数字比较><更合适,因为可能有半分。现在使用你的switch语句,99.5会得到'F'。

`

答案 2 :(得分: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