0

我正在为一个问题编写一个 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等?

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

4

3 回答 3

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

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

grades = 'FDCBA';
fprintf('Your grade is an %s',grades(scoreIdx+1))
于 2012-09-26T19:40:24.523 回答
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'。

`

于 2012-09-26T19:28:39.903 回答
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
于 2012-09-26T19:38:00.473 回答