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
end
1) 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() 函数比较不同长度的字符串 | 可比较不同长度的字符串 |
| 可检测相等和不相等 | 仅检测相等 |
ICP备案:
公安联网备案: