切换序列号范围的语句

时间:2014-10-19 05:23:35

标签: matlab switch-statement

假设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

我知道,像这样放置{80,81,82,83 ..}可以解决问题,但它看起来不是合适的解决方案,对吗?

3 个答案:

答案 0 :(得分:1)

使用if-else语句。不要使用switch语句。 Switch是一个值(意味着如果标记等于80)。您为不同的标记值执行不同的语句。由于标记值在一个范围内,因此请使用if-else语句。

示例:

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

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

答案 2 :(得分:0)

您也可以通过构建一个得分范围数组来实现这一目标:

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

和相应的字母等级:

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

然后,对于给定的分数,找到小于分数的第一个范围值,并使用该范围值的索引作为字母等级数组的索引:

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

对于输入值s=87,输出为Grade = B