MATLAB8.5教程第6章程序设计.ppt
MATLAB程序设计就是编写M 文件,利用程序结构中的顺序语句、循环语句和分支语句,以及各自的流控制机制,相互配合,达到解决各种复杂问题的方法,使其在科学研究、实践操作中的应用更加深入。本章重点本章重点关系运算与逻辑运算顺序语句循环语句分支语句第六章 程序设计6.1 运算符及其操作运算在MATLAB编程中,除了经常使用的算术运算符外,还会遇到判断结构,即根据某种条件的数值0或者1而得出不同的结论,这就需要通过某种表达式来产生这种逻辑上的判断数值0或者1,而能够达到这种要求的就是关系运算符和逻辑运算符。6.1.1 算术操作运算 MATLAB使用的算术运算符为:加()、减()、乘(*)、除(/)、左除()、幂(),以及小括号(),其运算法则在数值计算章节中的数组运算和矩阵运算中都已介绍。具体内容参见数组运算指令(表2-3)和矩阵运算指令与含义(表2-5)。在算术操作过程中,可以随时使用MATLAB平台上提供的大量运算函数,如表2-2提供了常用的基本函数。6.1.2 关系操作运算关系操作运算是用关系运算符来实现,它可用来比较两个标量,或两个同样大小的数组,或一个数组和一个标量(实际是数组中的每一个元素与标量比较),比较结果产生0(逻辑假,false)或者1(逻辑真,ture)。格式:a op b%a和b是算术表达式、变量、字符串等,op是一种关系运算符常用的比较关系运算符如表6-1所示:表 6-1 比较关系运算符及含义关系运算符含义关系运算符含义关系运算符含义=大于或等于大于=不等于 x=1:2:99;s=sum(1./x)6.2 向量化和预分配2预分配若一条代码无法向量化,可以事先将所要输出的结果进行预先分配,即预先给出存储空间,这样可以加快for循环。譬如在矩阵内存预分配时,划定一个固定的内存块,各数据可直接按行、列存放到相应的位置。若矩阵中不进行预配置内存,则随着行数、列数的变大,MATLAB就必须不断地扩充维数,这样就会大大降低程序的执行效率。6.3 顺序语句顺序语句是指依次按顺序执行程序的各条语句,它不需要任何特殊的流控制。格式:expression%执行表达式命令,显示表达式值variable=expression%将表达式赋值给变量variable 6.4 循环语句循环语句一般用于有规律的重复计算。被重复执行的语句称为循环体,控制循环语句走向的语句称为循环条件。MATLAB中有for循环和while循环两种语句。6.4.1 for循环for 语句可完成指定次重复的循环,这是广泛应用的语句。1for 语句的简单形式格式:for variable=expression statements end说明:每当循环变量variable取expression中的一个值时,就执行循环体statements一次,直到取完expression中的值。expression常用数组形成表示。2多重嵌套的for 循环6.4.2 while循环while循环是不定次重复的循环语句,即循环次数不固定。格式:while expression statements end说明:while语句可不定次数地重复执行statements。当expression为逻辑真或非零值时,就重复执行statements。因此,expression的值应该受到statements的影响,否则这种循环无法结束。通常表达式给出的是一个标量值,但也可以是数组或者矩阵,如果是后者,则要求所有的元素都必须为真。6.5 条件语句如果在程序中需要根据一定条件来执行不同的操作时,可以使用条件语句。if是MATLAB中最常用的条件执行语句,它与end语句一起构成各种格式。6.5.1 if-else-end结构1if-end结构最简单的条件语句是仅由if和end组成的语句,它可根据逻辑表达式的值选择是否执行。格式:if expression statements end说明:当表达式expression的值为逻辑真或非零值时,执行语句组statements。expression通常由关系操作符、逻辑运算符、算术运算符等构成,statements可以是多个语句。6.5.1 if-else-end结构2if-else-end结构利用else和elseif可进一步给出条件,从而构成复杂的条件语句。else表示当前面的if(也可能是elseif)表达式为零或逻辑假时,执行与之相关联的语句。elseif语句表示当前面的if或elseif为零或逻辑假时,计算本语句的表达式;当表达式为非零或逻辑真时,执行与之相关联的语句。格式:if expression statements1 else statements2 end说明:当expression为逻辑真或非零值时,执行statements1;否则执行statements2。6.5.2 switch-case 结构switch-case-otherwise分支结构主要实现根据表达式的值,在几种情况之间切换的功能。格式:switch expression(scalar or string)case value1 statements1 case value2 statements2 otherwise statementsn end6.6 试探结构try-catch语句是一种错误处理语句,提供一种捕获错误的方法。格式:try statements1 catch statements2 end 说明:通常情况下,只执行statements1,但当在执行statements1 语句发生错误时,catch控制块就可捕获它,会执行statements2,这样可以在statements2 中对错误作适当处理。可调用lasterr函数查询出错原因。try和catch控制块中的语句之间用逗号隔开。6.7 流控制命令 在许多程序设计中会碰到需要提前终止循环、跳出子程序、显示出错信息等情况,因此还需要其它的流控制语句来实现这些功能。6.7.1 continue命令 continue命令的作用是结束本次循环,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断,它用在for或while循环结构体内,并和if语句合用来强制终止循环。6.7.2 break命令 break命令的作用是终止本次循环,跳出最内层循环,即不必等到循环的结束而是根据条件退出循环,它用在for或while循环结构体内,并和if语句合用来强制终止循环。6.7 流控制命令6.7.3 return命令 return命令可使正在运行的函数正常退出,并返回调用它的函数继续运行。经常用于函数的末尾作为正常结束函数的运行,当然也可用在某条件满足时强行结束执行该函数。当程序进入死循环则按Ctrl+break键来终止程序的运行。6.7.4 error和warning命令 格式:error(message)warning(message)说明:error命令是用来指示出错信息并终止当前函数的运行,warning命令用来指示警告信息后程序仍继续运行。6.7 流控制命令6.7.5 input命令 命令input用来提示用户从键盘输入数据、字符串或表达式,并接收输入值。格式:x=input(n)%在屏幕上显示提示信息n,等待用户的输入(可以是一个数或一个代数式),并将输入值(或运算后的值)赋给变量x y=input(n,s)%返回的字符串作为文本变量而不是作为变量名或者数值说明:在提示信息字符串中,n表示换行,表示一个反斜杠。6.7 流控制命令6.7.6 keyboard命令 命令keyboard被放置在M文件中,将停止文件的执行并将控制权交给键盘。通过在提示符前显示K来表示一种特殊状态。如在某个位置加入keyboard 命令,则执行到这句话时,MATLAB 的命令窗口将显示如下代码:K如果要恢复正常的指示符(),只需在(K)之后输入return即可。6.7 流控制命令6.7.7 pause命令pause命令用于暂时中止程序的运行,等待用户按任意键继续进行。格式:pause%停止M文件的执行,按任意键继续pause(n)%中止执行程序n秒后继续,n是任意实数pause on%允许后续的pause命令中止程序的运行pause off%禁止后续的pause命令中止程序的运行6.8 综合实例三角形面积计算 【例6-14】已知三角形的三条边的长度为a、b、c,面积公式为,其中,试编写程序求三角形的面积。(1)在编辑窗口编写程序:a=input(请输入一个数a:)b=input(请输入一个数b:)c=input(请输入一个数c:)if a0|b0|c0 disp(a、b、c 必须是正数.)return end if a+bc|a+cb|b+ca disp(三角形不存在.)returnends=(a+b+c)/2;A=sqrt(s*(s-a)*(s-b)*(s-c)%三角形的面积6.8 综合实例三角形面积计算(2)在命令行窗口中执行程序,并给a、b、c赋不同值,结果如下:请输入一个数a:-4a=-4请输入一个数b:5b=5请输入一个数c:7c=7a、b、c 必须是正数.(3)给a、b、c重新赋不同值,其结果如下:请输入一个数a:6a=6请输入一个数b:7b=7请输入一个数c:15c=15三角形不存在.(4)再给a、b、c重新赋不同值,其结果如下:请输入一个数a:3a=3请输入一个数b:4b=4请输入一个数c:5c=5A=66.8 综合实例学生的成绩管理【例6-15】若给出学生的姓名、考试分数,试编写MATLAB程序,判断优秀(90分以上)、良好(8089分)、中等(7079分)、及格(6069分)和不及格(60分以下)五个等级。编写MATLAB程序如下:clear;for k=1:10a(k)=89+k;b(k)=79+k;c(k)=69+k;d(k)=59+k;endA=cell(3,6);A(1,:)=YANG,WANG,LIU,SUN,LI,ZHAO;A(2,:)=72,83,56,94,100,69;6.8 综合实例学生的成绩管理for k=1:6 switch A2,k case 100 r=优秀(满分);case a r=优秀;case b r=良好;case c r=中等;case d r=及格;otherwise r=不及格;endA(3,k)=r;endA 6.8 综合实例学生的成绩管理 运行结果如下:A=YANG WANG LIU SUN LI ZHAO 72 83 56 94 100 69 中等 良好 不及格 优秀 优秀(满分)及格