0

私は問題の matlab コードを書いており、switch ケースを使用して一連の数字をチェックしています。スイッチケースを使用することは、割り当ての要件です。

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 に答える