MATLAB条件判断根据条件是否成立,决定要不要执行某段代码,或者改走另一段。最简单的是只有 if 的情况:

score = 85;
if score >= 60
    disp('及格')
end

score >= 60 为真时,执行 if 到 end 之间的语句,为假就整段跳过。MATLAB 的 if 必须以 end 收尾,漏写会报语法错误。C 语言靠花括号包住分支,Python 靠缩进,这里靠的是 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 后立刻离开,不需要像 C 语言那样再写 break
  • otherwise 可选,表示前面都没命中时的兜底。

字符串比较

判断两个字符串是否相等,用 strcmp(区分大小写):

color = 'red';
if strcmp(color, 'red')
    disp('是红色')
end

长度不同的字符串直接用 ==,经常会报错或得不到预期结果,相等判断优先用 strcmp

自查清单

  • if 语句结尾是什么关键字?漏了会怎样?
  • elseifelse if 哪个写法对?
  • switch 命中一个 case 后还会继续往下执行吗?
  • switch 想匹配多个值,case 后面怎么写?
  • 判断字符串相等,能直接用 == 吗?