MATLAB程序流程控制-选择结构
选择结构又称为分支结构,它根据给定的条件是否成立,决定程序的运行路线,在不同的条件下,执行不同的操作。
MATLAB用于实现选择结构的语句有if语句、switch语句和try语句。
一、if语句
在MATLAB中,if语句有以下3种格式。
1.单分支if语句。
语句格式如下:
if 条件
语句组
end
其中,条件一般用关系运算或逻辑运算来表示,其结果是一个标量或矩阵。
当结果矩阵非空,且不包含零元素时,该条件成立,否则不成立。★
例如,当条件为[1,2;3,4]时,判定条件成立;当条件为[]或[1,2;0,4]时,判定条件不成立。
MATLAB中建议条件尽量使用标量,条件的结果为非零时,表示条件成立,零表示条件不成立。
当对标量进行逻辑与运算或者逻辑或运算时,其运算符可以采用&&和||。
当条件成立时,则执行语句组,执行完之后继续执行if语句后面的语句,若条件不成立,则直接执行if语句后面的语句。
2.双分支if语句
语句格式如下:
if 条件
语句组1
else
语句组2
end
当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句后面的语句。
例1 计算分段函数的值。
x=input('请输入x的值:');
if x==10
y=cos(x+1)+sqrt(x*x+1);
else
y=x*sqrt(x+sqrt(x));
end
y
也可以用单分支if语句来实现,程序如下:
x=input('请输入x的值:');
if x==10
y=cos(x+1)+sqrt(x*x+1);
end
if x~=10
y=x*sqrt(x+sqrt(x));
end
y
第一个if语句可以不用,而直接求函数值即可,改用以下程序实现。
x=input('请输入x的值:');
y=cos(x+1)+sqrt(x*x+1);
if x~=10
y=x*sqrt(x+sqrt(x));
end
y
3.多分支if语句
语句格式如下:
if 条件1
语句组1
else if 条件2
语句组2
else if 条件m
语句组m
else
语句组n
end
例2 输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输 出其对应的大写字母;若为数字字符则输出其对应数的平方,若为其他字符则原样输出。
c=input('请输入一个字符:','s');
if c>='A' && c<='Z'
disp(lower(c))
elseif c>='a' && c<='z'
disp(upper(c))
elseif c>='0' && c<='9'
disp(str2double(c)^2)
else
disp(c)
end
二、switch语句
switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式如下:
switch 表达式
case 结果表1
语句组1
case 结果表2
语句组2
case 结果表m
语句组m
otherwise
语句组n
end
switch子句后面的表达式应为一个标量或一个字符串,case子句后面的结果不仅可以为一个标量或一个字符串,还可以为一个将多个结果用大括号括起来的单元数据。
如果case子句后面的结果表为一个单元数据,则表达式的值等于该单元数据中的某个元素时,执行相应的语句组。
例3 某商场对商品实行打折销售,标准如下(商品价格用price来表示)。
price<200 没有折扣
200≤price<500 3%折扣
500≤price<1000 5%折扣
1000≤price<2500 8%折扣
2500≤price<5000 10%折扣
500Q≤price 14%折扣
输入所售商品的价格,求其实际销售价格。
price=input('请输入商品价格');
switch fix(price/100)
case {0,1} %价格小于200
rate=0;
case {2,3,4} %价格大于等于200但小于500
rate=3/100;
case num2cell(5:9) %价格大于等于500但小于1000
rate=5/100;
case num2cell(10:24) %价格大于等于1000但小于2500
rate=8/100;
case num2cell(25:49) %价格大于等于2500但小于5000
rate=10/100;
otherwise %价格大于等于5000
rate=14/100;
end
price=price*(1-rate) %输出商品实际销售价格
程序中的 num2cell 函数是将数值矩阵转化为单元矩阵,num2cell(5:9) 等价于{5,6,7,8,9}★
三、try语句
try语句是一种试探性执行语句,为开发人员提供了一种捕获错误的机制,其语句格式如下:
try
语句组1
catch
语句组2
end
try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给预定义变量lasterr,并转去执行语句组2。如果不出错,则转去执行end后面的语句。
A=input( '请输入A矩阵:');
B=input( '请输入B矩阵:');
try
C=A*B
catch
lasterr
end
请输入A矩阵:[1,2,3;4,5,6]
请输入B矩阵:[1,2;3,4;5,6]
C =
22 28
49 64
再运行一次程序,运行结果如下:
请输入A矩阵:[1,2,3;4,5,6]
请输入B矩阵:[7,8,9;10,11,12]
ans =
错误使用 *
内部矩阵维度必须一致。
Matlab学习笔记内容来源于《MATLAB程序设计与应用 第三版》刘卫国主编