本节说明 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 分支,为假走 else 分支。

if ... elseif ... else ... end

MATLAB if-elseif 成绩分级示例运行
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('周末')
end
  • switch 后的表达式可为标量或字符串等。
  • 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、嵌套循环与向量化。