首页数学计算数学MATLAB基础与应用 05 第五章 程序控制流语句.pptx

05 第五章 程序控制流语句.pptx

页数:36页文件大小:432.1 KB来源: MATLAB基础与应用ppt课件

本课件讲解MATLAB程序控制流的三类结构:先介绍if-else-end与switch-case-end分支控制语句,再讲解for与while循环控制语句及其嵌套与终止控制,最后说明try-catch容错结构、错误提示与M文件调试的基本方法。

第5章程序控制流语句封面,标示本章主题为MATLAB程序控制流的两大结构
第5章知识结构图,列出分支控制语句与循环控制语句两大分支及其小节构成
5.1分支控制语句概述页,说明按条件判断执行不同语句并介绍if条件语句与switch多分支语句
查看本课件的文字版(共 36 页,供检索与复制)

第1页:第5章 程序控制流语句

本页为《MATLAB基础与应用》第5章 程序控制流语句的章节封面。

第2页:本章知识结构

本章知识结构

  • 5.1 分支控制语句
  • 5.2 循环控制语句

第3页:5.1 分支控制语句概述

5.1 分支控制语句概述

分支语句
对语句中不同条件的值进行判断,进而根据不同的条件执行不同的语句。在分支语句中主要有两个语句:if条件语句和switch多分支语句。

分支控制语句根据给定的判定条件是否成立而选择执行程序子语句。

第4页:if-else-end格式一

5.1.1 if-else-end分支语句:if-else-end分支结构一般有3种使用格式。

1) 单分支形式

if 条件(表达式) 语句组(执行语句) end

功能:如果表达式的值为真,就执行语句,否则执行 end 后面的语句。

第5页:if-else-end格式二

2) 双分支形式

if 条件(表达式) 语句组1(执行语句) else 语句组2(执行语句) end

功能:如果表达式的值为真,就执行语句组1,否则执行语句组2。

第6页:if-else-end格式三

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 后面的语句。

第7页:例5-1 分段函数的M函数文件

例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

第8页:例5-1 函数值计算结果

>> result=[yx(0.2),yx(2),yx(30),yx(10*pi)] result = 0.2000 3.0000 79.0000 3.4473

然后调用M函数文件并带入所求数值计算。

第9页:例5-2 输入三边求三角形面积

在命令窗口中调用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

第10页:例5-3 字符的前导与后继

例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

第11页:例5-3 运行结果

在命令窗口中调用M函数文件:

>> test1 f e >> test1 F G

第12页:5.1.2 switch分支结构

5.1.2 switch、case与otherwise:switch分支结构语句根据变量或表达式的取值不同,分别执行不同的语句。通常用于switch分支结构语句的形式一般为:

switch 表达式 case 常量表达式1 语句组1 case 常量表达式2 语句组2 case {常量表达式n,常量表达式n+1,…} 语句组n otherwise 语句组n+1 end

第13页:例5-4 成绩等级转换函数

功能说明:switch语句后面的表达式可以为任何类型;每个 case 后面的常量表达式可以是多个,也可以是不同类型;与 if 语句不同的是,各个 case 和 otherwise 语句出现的先后顺序不会影响程序运行的结果。

例5-4:编一个转换成绩等级的函数文件,其中成绩等级转换标准为考试成绩分数在[90,100]分显示优秀;在[80,90)分显示良好;在[60,80)分显示及格;在[0,60)分显示不及格。

第14页:例5-4 成绩等级转换程序

解:建立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

第15页:例5-4 等级判断结果

调用M函数文件判断93分、45分、76分各属于哪个范围。

>> ff(93) 优秀 >> ff(45) 不及格 >> ff(76) 及格

第16页:例5-5 按num取值显示内容

例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.

第17页:5.2 循环控制语句概述

5.2 循环控制语句

循环控制结构
又称重复结构,即反复执行某一部分的操作,是程序中的另一个基本结构。实际问题中常常需要进行大量的重复处理,循环结构能够使用户只写很少的语句,而让计算机反复执行,从而完成大量类同的计算。

实现循环结构的语句主要有 for 循环语句和 while 循环语句。

第18页:5.2.1 for循环语句

5.2.1 for循环语句:一般应用于for循环结构的语句格式为:

for 循环变量 = 表达式 循环体语句 end

说明:表达式是一个向量,可以是 m:n、m:s:n,也可以是字符串、字符串矩阵等。表达式为 m:s:n 时,其中 m 的值为循环变量的初值,s 的值为步长,n 的值为循环变量的终值。步长为1时,表达式中的步长可以省略。另外 for 循环的循环体中,可以多次嵌套 for 和其他的结构体。

第19页:例5-6 用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),此处按程序实际内容保留。

第20页:例5-7 用for循环找出素数

例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

第21页:例5-7 素数运行结果

执行命令文件 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 97

第22页:5.2.2 while循环语句

5.2.2 while循环语句:while循环结构的语句格式为:

while (条件表达式) 循环体语句 end

while循环语句格式说明:表达式一般是由逻辑运算和关系运算以及一般的运算组成的表达式,以判断循环要继续进行还是要停止循环。只要表达式的值非零,即逻辑为「真」,程序就继续循环,只要表达式的值为零就停止循环。

第23页:例5-8 用while循环求阶乘和

例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

第24页:例5-8 阶乘和运行结果

执行命令文件 wym-ex3.m。

>> wym-ex3 1!+2!+…+50!的和为: sum = 2.5613e+018

第25页:例5-9 求y<3时的最大i值

例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.9290

第26页:5.2.3 多重循环

5.2.3 多重循环

  • 如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构
  • 多重循环的嵌套层数可以是任意的,可以按照嵌套层数分别称为二重循环、三重循环等
  • 处于内部的循环称为内循环,处于外部的循环称为外循环

第27页:例5-10 求[100,1000]内的全部素数

例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存放素数

第28页:例5-10 素数运行结果

运行结果

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 997

第29页:5.2.4 其他语句

5.2.4 其他语句(continue与break,return,try-catch)

break语句
直接跳出该层循环,break语句能在for循环和while循环中退出循环,继续执行循环后面的命令
continue语句
直接进入该层循环的下一次迭代
return语句
直接退出程序或函数返回
try-catch语句
错误控制结构,使用try-catch语句捕捉错误

第30页:continue与break的区别

MATLAB里的 continue 与 break 命令语句经常与 for、while 循环合用。

  • 当循环语句中出现 break 时,它不是继续执行下一个循环,而是退出循环体,继续执行循环体之外的程序(即终止循环)
  • 当循环语句中出现 continue 时,则不再继续执行当前循环体内的程序语句,即提前结束当前循环,并继续执行下一个循环

第31页:例5-11 continue语句实例

>> 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整除的数。

第32页:例5-12 try-catch语句

例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

输出结果如上。

第33页:本章小结

本章小结

  • 首先介绍了程序算法实现的3种基本结构
  • 而后重点介绍了分支控制语句 if-else-end 分支结构以及 switch 分支结构语句
  • 同时重点介绍了 for 循环控制语句与 while 循环控制语句,并演示了多重循环的应用
  • 也介绍了循环语句中其他常用的控制循环的流程语句

第34页:阅读材料 块注释方法(一)

阅读材料:MATLAB的一点使用技巧 1.MATLAB中使用块注释:注释对程序的阅读以及再修改有很大的帮助,下面介绍MATLAB中常用的块注释方法。

1) 通过菜单命令注释内容

  • 选中要加注释的内容,然后选择工具菜单 text|comment;要把注释变为语句,选中后再用 text|uncomment
  • 或选中要加注释的内容,右击鼠标选择 comment;要把注释变为语句,右击鼠标选择 uncomment 取消注释
  • 或使用快捷键 Ctrl+R:将光标放在需要注释的行中按 Ctrl+R,将该行变为注释;取消注释的快捷键为 Ctrl+T

第35页:块注释方法(二)(三)

2) 通过 %{、%} 注释程序内容:采用MATLAB块注释方法。

% { 需要注释不执行的若干命令行 %}

3) 通过程序注释方法:在注释段前面加一行 if LOGICAL(0),在注释段后面加一行 end。和前两个方法不同,这个方法实际上是通过逻辑判断语句不执行相关的语句。

第36页:缩进、默认路径与强制中断

2.增加与减小缩进:Ctrl+[ 减小缩进;Ctrl+] 增加缩进。

3.修改MATLAB打开时的默认路径:右击桌面上的MATLAB图标,点击属性,在起始位置栏中填入需要设置的默认路径,重新打开MATLAB即可。

4.强制结束正在运行的MATLAB程序:快捷键 Ctrl+C。如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用 Ctrl+C 来中断;执行命令后MATLAB有时可能响应会有些滞后。

顶部目录