MATLAB提供了很多程序流程控制语句,包括数据的输入与输出、顺序结构、判断语句、分支语句、循环语句等。
MATLAB中提供的用于数据输入与输出的函数分别为input函数和disp函数。
1. 数据的输入
在MATLAB中,input函数用于实现数据的输入,该函数的调用格式为:
A=input (提示信息,选项);
其中,“提示信息”是一个字符串,用于提示用户输入什么样的数据。
A=input('A=')
如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用如下命令:
question = input ('What''s your name?', 's')
2. 数据的输出
在MATLAB中,disp函数用于实现数据的输出,该函数的调用格式为:
disp(输出项)
其中,“输出项”既可以为字符串,也可以为矩阵。
当用disp函数显示矩阵时,将不显示矩阵的名字,而且其格式更紧密,不留任何没有意义的空行。
【例2-26】求一元二次方程 ax 2 + bx + c =0的根。
a=input('a='); b=input('b='); c=input('c='); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a), (-b-sqrt(d))/(2*a)] disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);
顺序结构是最简单的程序结构,系统在编译程序时按照程序的物理位置顺序执行。这种程序的优点是容易编制,缺点是结构单一,能够实现的功能有限。例如:
r=1; h=1; s=2*r*pi*h + 2*pi*r^2; v=pi*r^2*h; disp('The surface area of the colume is:'),disp(s); disp('The volume of the colume is:'),disp(v);
运行结果如下:
The surface area of the colume is: 12.5664 The volume of the colume is: 3.1416
在MATLAB中,判断语句可以使程序中的一段代码只在满足一定条件时才执行。if与else或elseif连用,偏向于是非选择,当某个逻辑条件满足时执行if后的语句,否则执行else语句。
1. if…end结构
当程序只有一条判断语句时,可以选择if…end结构,此时程序结构为:
if 表达式 执行程序块 end
只有一条判断语句,其中的表达式为逻辑表达式,当表达式为真时,执行相应的语句,否则直接跳到下一段语句。语句中的end是必不可少的,没有它,在逻辑表达式为0时就找不到继续执行程序的入口。
【例2-27】判断输入的两个参数a和b是否都大于0,是则返回“a和b都大于0”,否则不返回,程序最后返回“否”。
a=input('a='); b=input('b='); if a > 0 & b>0 disp(' a和b都大于0'); end disp('否');
2. if…else…end结构
当程序有两个选择时,可以选择if…else…end结构,此时程序结构为:
if 表达式 执行程序块1 else 执行程序块2 end
当判断表达式为真时,执行程序块1,否则执行程序块2。
【例2-28】判断输入的两个参数a和b是否都大于0,是则返回“a和b都大于0”,如果不全大于0,则显示“a和b不全都大于0”。
a=input('a='); b=input('b='); if a > 0 & b>0 disp('a和b都大于0'); else disp('a和b不全都大于0'); end
【例2-29】计算分段函数的值。
x=input('请输入x的值:'); if x<=0 y= (x+sqrt(pi))/exp(3); else y=log(x+sqrt(1+x*x))/3; end
3. if…elseif…else…end结构
当程序有多个选择时,可以采用if…elseif…else…end结构,此时程序结构为:
if 表达式1 执行程序块1 elseif 表达式2 执行程序块2 elseif ... ... ... else 执行程序块 end
其中可以包含任意多条elseif语句。
【例2-30】判断输入的学生成绩所属的等级:60分以下为不合格,60~70分为中等,70~89分为良好,90分以上为优秀。
n=input('input the score:') if n>=0 & n<60 A='不合格' elseif n>=60 & n<70 A='中等' elseif n>=70 & n<89 A='良好' elseif n>=90 &n<100 A='优秀' else A='输入错误' end
MATLAB还提供了一种多选择语句——分支语句。分支语句的结构为:
switch 分支语句 case 条件语句 执行程序块 case {条件语句1, 条件语句2, 条件语句3,…} 执行程序块 otherwise 执行程序块 end
其中,分支语句为一个变量(数值或者字符串变量),如果该变量的值与某一条件相符,则执行相应的语句,否则执行otherwise后面的语句。在每一个条件中,既可以包含一个条件语句,也可以包含多个条件语句,当包含多个条件时,将条件以单元数组的形式表示。
【例2-31】任意底对数的实现。
A=input('底'); B=input('对数值'); switch a case exp(1) y = log(B); case 2 y = log2(B); case 10 y = log10(B); otherwise y = log(B)/log(A); end
【例2-32】某商场对顾客所购买的商品实行打折销售,标准为:小于200元,没有折扣;200~499元,折扣为5%;500~999元,折扣为8%;1000~2499元,折扣为15%;2500~4999元,折扣为20%;大于等于5000元,折扣为25%。输入所售商品的价格,求其实际销售价格。
p=input('输入商品价格'); switch fix(p/100) case {0,1} % 小于200 r=0; case {2,3,4} % 200~499 r=5/100; case num2cell(5:9) % 500~999 r=8/100; case num2cell(10:24) % 1000~2499 r=15/100; case num2cell(25:49) % 2500~4999 r=20/100; otherwise % 大于等于5000 r=25/100; end p=p*(1-r) % 输出商品实际销售价格
1. for循环语句
在MATLAB中,for语句调用的基本格式如下:
for index=初值: 增量: 终值 语句组A end
其中,A为循环体。
此语句表示反复执行 N 次语句组A。循环次数 N (需要预先指定)为: N =1+(终值-初值)÷增量。在每次执行时程序中的index值按“增量”增加。
【例2-33】用循环求解1+2+…+99+100。
>s=0; for k=1:100 s=s+k; end
【例2-34】计算 。
s=0; for k=1:100 s=s+1/2^(k+2); end
2. for语句的嵌套
for语句的嵌套也称为循环的嵌套(或称为多重循环结构),是指一个循环结构的循环体又包括一个循环结构。
【例2-35】创建一个100阶的数组,数组中的每一个元素 A ( k , n )满足 A ( k , n )=1/( k + n -1)。
for k=1:100 for n=1:100 A(k, n)=1/(k+n-1); end end
3. while循环语句
在MATLAB中,while语句用于将相同的程序块执行多次(次数不需要预先指定),当条件表达式为真时,执行程序块,直到条件表达式为假。while语句的结构为:
while 表达式 执行程序块 end
【例2-36】用循环求解最小的 m ,使其满足 。
s=0; m=0; while (s<=100) m=m+1; s=s+m; end