我正在为一个问题编写一个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
等那样输入?
如果这种原始方式是唯一的方法,如何检查小数?
答案 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