matlab switch 语句能否判断多变量?
发布网友
发布时间:2022-04-23 15:11
我来回答
共4个回答
热心网友
时间:2022-04-11 17:41
您好,比如
switch expr
case {a1, a2,...}
do_something_1;
case b
do_something_2;
case {c1,c2,...}
do_something_3;
...
end
expr表达式从上至下寻找匹配,当它与某个case后面的元胞数组中的某个元素匹配,则执行该case分支的操作,然后跳出switch-case结构。
注意,Matlab中switch后面的表达式可以是显式逻辑值,即逻辑0和1(因此含比较运算的表达式不算在内)、标量或者字符串,因而case后面如果不是这些类型的值,那么就不匹配。
与switch语句相比,if语句则灵活得多,if后面的表达式几乎可以是任意的表达式。
下面举个综合的例子来说明switch表达式的特性,比如
switch 1
case [2,1]
disp('case1')
case {3,1}
disp('case2')
case {1,2}
disp('case3')
end
复制代码
结果返回 case2
这说明,不符合条件的case(第一个case类型不对)不匹配;出现重叠的情况(第二、三个case),switch仅仅匹配最前面一个。
之所以Maltab只是匹配最前面的,就是因为它支持了case后面可以使用元胞数组的情况,这就相当于多个重复匹配的case集中在一起(这就相当于实现C/C++中不加break的情形)。
另外,如果使用if-elseif结构来实现上述功能,也是可行的,但是if-elseif本身是一个实现复杂分支程序流的结构,对于case情况非常多的时候,使用if-elseif不但代码量很大,而且可读性也没switch那么清晰(杀鸡焉用牛刀)。而使用switch-case结构,则能缩减代码量,可读性也好得多。
对于效率方面,switch-case和if-elseif结构实现同样功能,究竟孰优孰劣,这个就有待测试的检验了。个人认为if-elseif的效率更低,有2点原因:
1. switch-case语句只需要计算一次switch后面的表达式,然后去匹配各个case;而if-elseif对于每个if后面的表达式都要进行计算,然后判断。
2. 从汇编的角度来说,if...elseif编译完后是很多条比较指令和跳转指令,而switch-case语句编译完之后,则是一张地址表,使用case的值做表的索引,因此case里的值最好步进为一。
总的来说,switch-case语句牺牲了灵活性,但提高了效率并使得代码整洁。追问那就是说向这个情况 只能用if来完成了?
热心网友
时间:2022-04-11 18:59
switch(){case 常量表达式1: 语句1; . . . .case 常量表达式n: 语句n;default: 语句n+1;}说明:1 switch后面的表达式,ANSI允许它是任何类型2 当表达式式值和case后面常量表达式值相等的时候,就执行.如果没有一个相等就执行default后面的语句.3每个case后面的值必须是不等的4 每个case和default的次序不影响程序执行5如果执行完一个case 就跳到下一个case 如果case后面有break则执行后跳出switch 可以表达式,但多个判断就没见过了
热心网友
时间:2022-04-11 20:34
不能。switch A case 1 case 2 end 句式是判断A=1时如何操作, A=2时如何操作,不是判断A<或>,若要判断>,<,则要用if 句式。
热心网友
时间:2022-04-11 22:25
不能。switch 就是求表达式的值,然后找 case,一个 case 只能带一个值。