MATLAB switch语句的用法(附带实例)
MATLAB 程序中,switch 语句执行基于变量或表达式值的语句组,关键字 case 和 otherwise 用于描述语句组,只执行第一个匹配的情形。要用 switch,必须用 end 与之搭配。
switch-case 的具体语法结构如下:
2) switch 指令之后的表达式 value 应为一个标量或一个字符串。当表达式为标量时,比较命令为表达式==检测值;而当表达式为字符串时,MATLAB 将会调用字符串函数 strcmp() 来进行比较,即 strcmp(表达式, 检测值)。
3) case 指令之后的检测值不仅可以是一个标量或一个字符串,还可以是一个元胞数组。如果检测值是一个元胞数组,那么 MATLAB 将会把表达式的值与元胞数组中的所有元素进行比较。如果元胞数组中的某个元素与表达式的值相等,那么 MATLAB 会认为此次比较的结果为真,从而执行与该次检测相对应的命令组。
【实例】switch-case 结构的简单运用示例。在编辑器窗口中编写 M 文件并命名为 ex.m。
【实例】求任意底数的对数函数值 y=lognx。打开编辑器窗口,编写如下程序:

图 1 错误对话框
注意,与多分支的 if 语句相比,switch 语句主要用于条件多且单一的情况,典型的应用情况是数学中的分段函数。此外,两者各有自己的优点和缺点,if 语句和 switch 语句的比较如下表所示。
switch-case 的具体语法结构如下:
switch value % value 为需要进行判决的标量或字符串 case test1 % 如果 value 等于 test1,则执行 command1,并结束此结构 command1 case test2 % 如果 value 等于 test2,则执行 command2,并结束此结构 command2 : case testk % 如果 value 等于 testk,则执行 commandk,并结束此结构 commandk otherwise % 如果 value 不等于前面所有的值,则执行 commands,并结束此结构 commands end1) switch-case 结构的调用格式保证了至少有一组指令组将会被执行。
2) switch 指令之后的表达式 value 应为一个标量或一个字符串。当表达式为标量时,比较命令为表达式==检测值;而当表达式为字符串时,MATLAB 将会调用字符串函数 strcmp() 来进行比较,即 strcmp(表达式, 检测值)。
3) case 指令之后的检测值不仅可以是一个标量或一个字符串,还可以是一个元胞数组。如果检测值是一个元胞数组,那么 MATLAB 将会把表达式的值与元胞数组中的所有元素进行比较。如果元胞数组中的某个元素与表达式的值相等,那么 MATLAB 会认为此次比较的结果为真,从而执行与该次检测相对应的命令组。
【实例】switch-case 结构的简单运用示例。在编辑器窗口中编写 M 文件并命名为 ex.m。
num = 3; switch num case 1 data = 'Monday' % 如果 num=1,则定义 data='Monday' case 2 data = 'Tuesday' % 如果 num=2,则定义 data='Tuesday' case 3 data = 'Wednesday' % 如果 num=3,则定义 data='Wednesday' case 4 data = 'Thursday' % 如果 num=4,则定义 data='Thursday' case 5 data = 'Friday' % 如果 num=5,则定义 data='Friday' case 6 data = 'Saturday' % 如果 num=6,则定义 data='Saturday' case 7 data = 'Sunday' % 如果 num=7,则定义 data='Sunday' otherwise data = 'None!!!' % 如果 num 不等于前面所有的值,则定义 data = 'None!!!' end运行 M 文件,输出结果如下:
data = 'Wednesday'
【实例】求任意底数的对数函数值 y=lognx。打开编辑器窗口,编写如下程序:
clear n = input('Enter the value of ''n'':''); x = input('Enter the value of ''x'':''); switch(n) case 1 errordlg('出错'); case 2 y = log2(x); case exp(1) y = log(x); case 10 y = log10(x); otherwise y = log10(x)/log10(n); end disp(y)将该脚本 M 文件命名为ex.m。调用该文件,分别输入不同的值,运行程序,输出结果如下:
>> ex Enter the value of 'n':2 Enter the value of 'x':10 3.3219 ex Enter the value of 'n':6 Enter the value of 'x':32 1.9343当 n=1 时,输入 x 值后,出现错误对话框,如下图所示:

图 1 错误对话框
注意,与多分支的 if 语句相比,switch 语句主要用于条件多且单一的情况,典型的应用情况是数学中的分段函数。此外,两者各有自己的优点和缺点,if 语句和 switch 语句的比较如下表所示。
if 语句 | switch 语句 |
---|---|
比较复杂,特别是嵌套使用的 if 语句 | 可读性强,容易理解 |
要调用 strcmp() 函数比较不同长度的字符串 | 可比较不同长度的字符串 |
可检测相等和不相等 | 仅检测相等 |