本节说明 MATLAB 中根据逻辑条件选择执行路径的语句:if、elseif、else 与 switch。各分支须以 end 收尾;C 语言以花括号界定块,Python 以缩进界定块,MATLAB 则以 end 标记分支结束。漏写 end 将导致语法错误。
if ... end
score = 85;
if score >= 60
disp('及格')
end当 score >= 60 为真时,执行 if 与 end 之间的语句;为假则跳过该段。
if ... else ... end
score = 45;
if score >= 60
disp('及格')
else
disp('不及格,请继续练习')
end条件为真执行 if 分支,为假执行 else 分支,二者必居其一。
if / else 流程:条件为真走 if 分支,为假走 else 分支。
if ... elseif ... else ... end
score = 78;
if score >= 90
grade = 'A';
elseif score >= 80
grade = 'B';
elseif score >= 70
grade = 'C';
elseif score >= 60
grade = 'D';
else
grade = 'F';
end
disp(['成绩等级:', grade])elseif 为一个关键字,中间不可插入空格。条件自上而下依次检验,命中一条后不再评估后续分支。
switch ... case
当须按某个表达式的离散取值分支,而非比较大小关系时,switch 通常更清晰:
day = 3;
switch day
case 1
disp('周一')
case {2, 3, 4}
disp('工作日')
case 5
disp('周五')
otherwise
disp('周末')
endswitch后的表达式可为标量或字符串等。case可跟单个值,亦可用花括号{...}列出多个候选。- 命中某一
case后执行该分支并离开switch,无需像 C 语言那样再写break。 otherwise可选,表示各case均未命中时的默认分支。
字符串比较
判断两个字符串是否相等,应使用 strcmp(区分大小写):
color = 'red';
if strcmp(color, 'red')
disp('是红色')
end长度不同的字符数组直接使用 == 比较,往往报错或得不到预期结果;相等性判断宜优先使用 strcmp。
自查
if语句应以何种关键字结束?漏写会怎样?- 合法写法是
elseif还是else if? switch命中某一case后,是否还会继续执行后面的case?- 一个
case需匹配多个取值时,应如何书写? - 判断字符串相等能否直接使用
==?
本节说明了 if / elseif / else、switch 及 strcmp 的用法与注意点。下一节介绍循环:for、while、嵌套循环与向量化。