假设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 ..}可以解决问题,但它看起来不是合适的解决方案,对吗?
答案 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
如果包含小数点,则需要确定是否要round
,floor
或ceil
。学生喜欢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
。