第二单元 第2课 Matlab程序控制结构 1.顺序结构 2.选择结构 3.循环结构
1.顺序结构 顺序结构是指按照程序中语句的排列顺序依次执行,直到程序的最后一个语句。 例5.1 求一元二次方程 的根。 例5.1 求一元二次方程 的根。 由于Matlab能进行复数运算,所以不需要判断方程的判别式,可直接根据求根公式求根。 程序如下: 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))]); 程序输出为: a=?4 b=?78 c=?54 x1=-0.7188,x2=-18.7812
2.选择结构 选择结构是根据给定的条件成立或不成立,分别执行不同的语句。 Matlab用于实现选择结构的语句有if语句,switch语句和try语句。 (1). if语句 在Matlab中,if语句有3种格式。 (1.1)单分支if语句 语句格式: if 条件 语句组 end 例5.2 :当x是整数矩阵时,输出x的值 if fix(x)==x disp(x);
(1.2)双分支if语句 语句格式: if 条件 语句组 1 else 语句组 2 end 当条件成立时,执行语句组1,否则执行语句组2,然后再执行if语句的后续语句。
例5.3 计算分段函数: 程序如下: 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的值: '); y =cos(x+1)+sqrt(x*x+1); ifx~=10 y = x*sqrt(x+sqrt(x));
(1.3)多分支if语句 语句格式: if 条件1 语句组 1 elseif 条件2 语句组 2 … elseif 条件m 语句组 m else 语句组n end
例5.4大小写字母的置换 输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字 母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出。程序如下: c = input(‘请输入一个字符’,‘s’); if c >=‘A’ & c<=‘Z’ disp(setstr(abs(c) + abs(‘a’)-abs(‘A’))); elseif c>=‘a’ & c<=‘z’ disp(setstr(abs(c)- abs(‘a’) + abs(‘A’))); elseif c>=‘0’ & c<=‘9’ disp(abs(c)-abs(‘0’)); else disp(c); end
(2) switch语句 switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式: switch 表达式 case 表达式1 语句组1 case 表达式2 语句组2 … case 表达式m 语句组m otherwise 语句组 n end
例5.5 某商场对顾客所购买的商品实行打折销售,标准如下: price<200 没有折扣 200<=price<500 3%折扣 500<=price<1000 5%折扣 1000<=price<2500 8%折扣 2500<=price<5000 10%折扣 5000<=price 14%折扣 输入所售商品的价格,求其实际销售价格。请编程实现。
程序如下: price= input(‘请输入商品价格’); switchfix(price/100) case{0,1} %价格小于200 rate = 0; case{2,3,4} rate = 3/100; %价格大于等于200但小于500 case num2cell(5:9) %num2cell函数是将数值矩 %阵转化为单元矩阵。 rate = 5/100; %价格大于等于500但小于1000 case num2cell(10:24) rate = 8/100; %价格大于等于1000但小于 2500 case num2cell(25:49) rate = 10/100; %价格大于等于2500但小于 5000
otherwise rate = 14/100; %价格大于等于5000 end price= price*(1-rate) %输出商品实际销售价格 (3)try语句 try语句是一种试探性执行语句,其语句格式为: try 语句组1 catch 语句组2 end try语句先试探性执行语句组1,如果在执行过程中出现错误,则将 错误信息赋给保留的lasterr变量,并转去执行语句组2.
例5.6 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的 乘积,若出错则自动转去求两矩阵的点乘。 程序如下: A = [1,2,3;4,5,6]; B = [7,8,9;10,11,12]; try C = A*B; catch C = A.*B; end C lasterr %显示出错原因
3.循环结构 循环是指按照给定的条件,重复执行指定的语句,Matlab提供了两种实现循环结构的语句:for语句和while语句。 循环体语句 end 其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的 值为循环变量的终值。步长为1时,表达式2可以省略。
例5.7已知,当n=100时,求y的值。 程序如下: y = 0;n = 100; for i=1:n y = y+1/i/i; end y (2)、while语句 while语句的一般格式为: while条件 循环体语句 其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。
例5.8 从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和. sum =0; n =0; x =input(‘Enter a number(end in 0):’); while(x~=0) sum = sum+x; n = n+1; x = input(‘Entera number(end in 0):’); end if(n>0) sum mean = sum/n
(3)break语句和continur语句 它们一般与if语句配合使用。 break语句用于终止循环的执行。 当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的 下一语句。 continue语句控制跳过循环体中的某些语句。 当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句, 继续下一次循环。
例5.9 求[100,200]之间第一个能被21整除的整数。 程序如下: for n = 100:200 if rem(n,21)~=0; continue end break end n