页数:36页文件大小:432.1 KB来源: MATLAB基础与应用ppt课件
本课件讲解MATLAB程序控制流的三类结构:先介绍if-else-end与switch-case-end分支控制语句,再讲解for与while循环控制语句及其嵌套与终止控制,最后说明try-catch容错结构、错误提示与M文件调试的基本方法。
本页为《MATLAB基础与应用》第5章 程序控制流语句的章节封面。
本章知识结构
5.1 分支控制语句概述
分支控制语句根据给定的判定条件是否成立而选择执行程序子语句。
5.1.1 if-else-end分支语句:if-else-end分支结构一般有3种使用格式。
1) 单分支形式
if 条件(表达式) 语句组(执行语句) end功能:如果表达式的值为真,就执行语句,否则执行 end 后面的语句。
2) 双分支形式
if 条件(表达式) 语句组1(执行语句) else 语句组2(执行语句) end功能:如果表达式的值为真,就执行语句组1,否则执行语句组2。
3) 多分支形式
if 条件1(表达式1) 语句组1(执行语句) else if 条件2(表达式2) 语句组2(执行语句) else if 条件m(表达式m) 语句组m(执行语句) else 语句组m+1(执行语句) end功能:如果表达式1的值为真,就执行语句组1,然后跳出if执行语句;否则判断表达式2,如果表达式2的值为真,就执行语句组2,然后跳出if执行语句;否则依此类推,一直进行下去。如果所有的表达式的值都为假,就执行 end 后面的语句。
例5-1:编写函数,并计算函数值。解:建立M函数文件 yx.m。
function y=yx(x) if x<1 y=x elseif x>=1 & x<=10 y=2*x-1 elseif x>10 & x<=30 y=3*x-11 else y=sin(x)+log(x) end>> result=[yx(0.2),yx(2),yx(30),yx(10*pi)] result = 0.2000 3.0000 79.0000 3.4473然后调用M函数文件并带入所求数值计算。
在命令窗口中调用M函数文件:
>> test 请输入三角形的三条边:[4 5 6] 9.9216例5-2:输入三角形的三条边,求面积。解:建立M函数文件 test.m。
A=input('请输入三角形的三条边,形式:[a b c]'); if A(1)+A(2)>A(3) & A(1)+A(3)>A(2) & A(2)+A(3)>A(1) p=(A(1)+A(2)+A(3))/2; s=sqrt(p*(p-A(1))*(p-A(2))*(p-A(3))); disp(s); else disp('不能构成一个三角形。') end例5-3:输入一个字符,若为大写字母,则输出其后继字符;若为小写字母,则输出其前导字符,若为其他字符则原样输出。解:建立M函数文件 test1.m。
c=input('', 's'); if c>='A' & c<='Z' disp(setstr(abs(c)+1)); else if c>='a' & c<='z' disp(setstr(abs(c)-1)); else disp(c); end在命令窗口中调用M函数文件:
>> test1 f e >> test1 F G5.1.2 switch、case与otherwise:switch分支结构语句根据变量或表达式的取值不同,分别执行不同的语句。通常用于switch分支结构语句的形式一般为:
switch 表达式 case 常量表达式1 语句组1 case 常量表达式2 语句组2 case {常量表达式n,常量表达式n+1,…} 语句组n otherwise 语句组n+1 end功能说明:switch语句后面的表达式可以为任何类型;每个 case 后面的常量表达式可以是多个,也可以是不同类型;与 if 语句不同的是,各个 case 和 otherwise 语句出现的先后顺序不会影响程序运行的结果。
例5-4:编一个转换成绩等级的函数文件,其中成绩等级转换标准为考试成绩分数在[90,100]分显示优秀;在[80,90)分显示良好;在[60,80)分显示及格;在[0,60)分显示不及格。
解:建立M函数文件 ff.m。
function result=ff(x) n=fix(x/10); switch n case {9,10} disp('优秀') case 8 disp('良好') case {6,7} disp('及格') otherwise disp('不及格') end调用M函数文件判断93分、45分、76分各属于哪个范围。
>> ff(93) 优秀 >> ff(45) 不及格 >> ff(76) 及格例5-5:根据变量 num 的值来决定显示的内容。
>> num=input('请输入一个数'); switch num case -1 disp('I am a teacher.'); case 0 disp('I am a student.'); case 1 disp('You are a teacher.'); otherwise disp('You are a student.'); end运行程序后提示:请输入一个数 2 You are a student.
5.2 循环控制语句
实现循环结构的语句主要有 for 循环语句和 while 循环语句。
5.2.1 for循环语句:一般应用于for循环结构的语句格式为:
for 循环变量 = 表达式 循环体语句 end说明:表达式是一个向量,可以是 m:n、m:s:n,也可以是字符串、字符串矩阵等。表达式为 m:s:n 时,其中 m 的值为循环变量的初值,s 的值为步长,n 的值为循环变量的终值。步长为1时,表达式中的步长可以省略。另外 for 循环的循环体中,可以多次嵌套 for 和其他的结构体。
例5-6:利用for循环求1~100的整数之和。解:建立命令文件 wym-ex1.m。
% 利用for循环求1~50的整数之和 sum=0; for i=1:50 sum=sum+i; end sum执行命令文件 wym-ex1.m。
>> wym-ex1 sum = 1275说明:源文件标题写「求1~100的整数之和」,而程序与结果均为1~50求和(1275),此处按程序实际内容保留。
例5-7:利用for循环找出1~100之间的所有素数。解:建立命令文件 wym-ex2.m。
% 利用for循环找出1~100之间的所有素数 disp('1~100之间的所有素数为:') for m=1:100 k=fix(sqrt(m)); % 求m的算术平方根然后取整 for i=2:k+1 if rem(m,i)==0 % 求整数m与i的余数 break; end end if i>=k+1 disp(int2str(m)) % 以字符串的形式显示素数 end end执行命令文件 wym-ex2.m。
>> wym-ex2 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 975.2.2 while循环语句:while循环结构的语句格式为:
while (条件表达式) 循环体语句 endwhile循环语句格式说明:表达式一般是由逻辑运算和关系运算以及一般的运算组成的表达式,以判断循环要继续进行还是要停止循环。只要表达式的值非零,即逻辑为「真」,程序就继续循环,只要表达式的值为零就停止循环。
例5-8:利用while循环来计算 1!+2!+…+50! 的值。解:建立命令文件 wym-ex3.m。
% 利用while循环来计算1!+2!+...+50!的值 sum=0; i=1; while i<51 prd=1; j=1; while j<=i prd=prd*j; j=j+1; end sum=sum+prd; i=i+1; end disp('1!+2!+…+50!的和为:') sum执行命令文件 wym-ex3.m。
>> wym-ex3 1!+2!+…+50!的和为: sum = 2.5613e+018例5-9:表达式 y=1+1/2+1/3+1/4+…+1/i+…,求:(1) y<3 时的最大 i 值;(2) 与(1)的 i 值对应的 y 值。
求y的表达式解:
y=0; i=1; while 1 % 循环的条件为1 f=1/i; y=y+f; if y>3 break; end i=i+1; end n=i-1 y=y-f运行结果:
n = 10 y = 2.92905.2.3 多重循环
例5-10:求[100,1000]以内的全部素数。解:
n=0; for m=100:1000 flag=1; j=m-1; i=2; while i<=j & flag if rem(m,i)==0 flag=0; end i=i+1; end if flag n=n+1; prime(n)=m; end end prime % 显示变量prime存放素数运行结果
prime = Columns 1 through 15 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 Columns 16 through 30 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 Columns 31 through 135(省略) Columns 136 through 143 947 953 967 971 977 983 991 9975.2.4 其他语句(continue与break,return,try-catch)
MATLAB里的 continue 与 break 命令语句经常与 for、while 循环合用。
>> i=1; for n=2:100 if mod(n,2)==0|mod(n,3)==0|mod(n,5)==0|mod(n,7)==0|mod(n,11)==0 continue % 若能被这些数整除,则滑过 else % 否则将n值赋给向量X X(i)=n; i=i+1; end end >> X(4) % 显示第4个结果 ans = 23例5-11:程序实现在2~100中,找出不能被2,3,5,7,11整除的数。
例5-12:try-catch语句。
>> clear a=magic(4); b=eye(3); try c=a*b % 执行该语句段出现错误,转而执行catch之后的语句段 catch c=a(1:3,1:3)*b end err = lasterror; c = 16 2 3 5 11 10 9 7 6输出结果如上。
本章小结
阅读材料:MATLAB的一点使用技巧 1.MATLAB中使用块注释:注释对程序的阅读以及再修改有很大的帮助,下面介绍MATLAB中常用的块注释方法。
1) 通过菜单命令注释内容
2) 通过 %{、%} 注释程序内容:采用MATLAB块注释方法。
% { 需要注释不执行的若干命令行 %}3) 通过程序注释方法:在注释段前面加一行 if LOGICAL(0),在注释段后面加一行 end。和前两个方法不同,这个方法实际上是通过逻辑判断语句不执行相关的语句。
2.增加与减小缩进:Ctrl+[ 减小缩进;Ctrl+] 增加缩进。
3.修改MATLAB打开时的默认路径:右击桌面上的MATLAB图标,点击属性,在起始位置栏中填入需要设置的默认路径,重新打开MATLAB即可。
4.强制结束正在运行的MATLAB程序:快捷键 Ctrl+C。如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用 Ctrl+C 来中断;执行命令后MATLAB有时可能响应会有些滞后。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}