用途:用于变量的多分支选择问题
语法: switch-case-end
switch 变量
case 常量1
语句序列1;
case 常量2
语句序列2;
........
case 常量n
语句序列n;
otherwise
语句序列;
end
如:把下面的if语句改为switch语句
day=3
switch day
case 1
fprintf('今天是星期一 \n' );
case 2
fprintf('今天是星期二 \n' );
case 3
fprintf('今天是星期三 \n' );
case 4
fprintf('今天是星期四 \n' );
case 5
fprintf('今天是星期五 \n' );
case 6
fprintf('今天是星期六 \n' );
case 7
fprintf('今天是星期日 \n' );
otherwise
fprintf('输入数据有误! \n' );
end
注意:
1.otherwise 语句可选。otherwise 后面不需要任何常量。
2.找到匹配的case后,执行完就自动退出,不必像c语言一样,必须用break结束.
3.case后的常量,可以是一个数值、一个字符,也可以是多个数值或者字符(此时需要把这 些常量用{ }括起来,形成一个cell数组)。
例子
创建脚本文件并在其中键入以下代码 -
%实例1:
month=6;
switch month %switch后面的month为变量
case {3,4,5} %case 后面的为常量,然后用switch后面的变量来依次比较后面的常量
season='spring'
case {6,7,8}
season='summer'
case {9,10,11}
season='autumn'
case {12,1,2}
season='winter'
otherwise
fprintf('输入数据有误! \n' );
end
思考,如何把上面的代码改成 if elseif ...end 多分枝语句?
%用if elseif ...end 方式实现上面代码功能
clear
month=10;
if month==3|month==4|month==5
season='spring'
elseif month==6|month==7|month==8
season='summer'
elseif sum(month==[9 10 11])==1 %注意这个写法
season='autumn'
elseif month==12|month==1|month==2
season='winter'
else
fprintf('输入数据有误! \n' );
end
与其他的程序设计语言的switch-case语句不同的是,在MATLAB语言中,
当其中一个case语句后的条件为真时,switch-case语句不对其后的case语句
进行判断,也就是说在MATLAB语言中,即使有多条case判断语句为真,
也只执行所遇到的第一条为真的语句.
这样就不必像C语言那样,在每条case语句后加上break语句以防止继续执行
后面为真的case条件语句。
%实例2:
clc
a=input('请输入一个数或一个字符或一个字符串:');
switch a
case {1,2}
disp('输入的为1或2')
case {2,3,4}
disp('输入的为2或3或4')
otherwise
disp('输入的不是1 2 3 4')
end
%实例3:
clear
a=input('请输入学号,或者姓名的拼音首字母(需用单引号引住): ');
switch a
case {'mht',01} %case后面的各个常量用{ }括起来,形成一个cell数组
fprintf('马化腾,信息学院,移动专业18级,潮汕人,电话13877778888 \n');
case {'my',02}
fprintf('马云,信息学院,移动专业18级,浙江人,电话17799998888 \n');
case {'john',03}
fprintf('john,信息学院,移动专业18级,西雅图人,电话18955556666 \n');
otherwise
disp('信息学院没有这个人')
end