第二章 结构化程序和自定义函数

第二章 结构化程序和自定义函数

逻辑运算符

运算符 意义
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于
~= 不等于
&&
`

流程控制语句

流程控制语句 作用
if, elseif, else if语句为真,则执行子句
switch, case, otherwise 根据switch语句内容判断执行哪个子句
while 重复执行子句直到while中的条件为假
for 执行子句固定次数
try, catch 执行子句并捕获执行过程中的异常
break 跳出循环
continue 直接进入下一次循环
end 结束子句
pause 暂停程序
return 返回到调用函数处

if语句

  1. 单分支if语句

    1. 语句格式

      if 条件
          语句组
      end
      
    2. 关于条件

      • 条件是标量时,非零表示条件成立,零表示条件不成立
      • 条件是矩阵时,矩阵为非空,且不含零元素,则条件成立,反之,条件不成立
  2. 双分支if语句

    • 语句格式

      if 条件
          语句组1
      else
          语句组2
      end
      
  3. 多分支if语句

    • 语句格式

      if 条件1
          语句组1
      elseif 条件2
          语句组2
          ···
      elseif 条件m
          语句组m
      else
          语句组n
      end
      

switch语句

  1. 语句格式

    switch 表达式
        case 结果表1
            语句组1
        case 结果表2
            语句组2
            ···
        case 结果表m
            语句组m
        otherwise
            语句组n
    end
    
  2. switch表达式应该是一个其值可以列举的表达式

  3. case结果表为switch表达式的取值,当取值有多个时,用单元数据表示

    c = input('请输入一个单词:','s');
    switch c(1)
        case {'A','E','I','O','U','a','e','i','o','u'}
            disp([c,'以元音字母开头']);
        otherwise
            disp([c,'以辅音字母开头']);
    end
    %结果
    请输入一个单词:book
    book以辅音字母开头
    

for语句

  1. 格式

    for 循环变量=初值表达式:步长表达式:终值表达式
        循环体语句
    end
    for 循环变量=矩阵表达式
        循环体语句
    end
    
  2. 问题

    for k=[1,2,3,4]
    end
    for j=[1;2;3;4]
    end
    
    • 这两个循环执行的次数相同吗?
      不同!
    • for循环中的矩阵表达式是按列循环,如果是多行多列的话,会把每一列看作一个元素,所以第一个循环了4次,第二个循环了1次

while语句

  1. 格式

    while 条件
        循环体语句
    end
    
  2. while语句多用于循环次数不确定的情况

需要注意的地方

循环语句

使用循环语句应尽量预先分配内存空间

若一个变量所需要的内存空间是一个可预测的定值,我们应尽量提前为其分配内存空间.

以下面两段程序为例,演示这一点:

  • 程序一:

    tic
    for ii = 1:2000
        for jj = 1:2000
            A(ii,jj) = ii + jj;
        end
    end
    toc
    1234567
    

    程序输出Elapsed time is 4.616199 seconds.

    tic和toc这组命令用于给代码块计时

  • 程序二:

    tic
    A = zeros(2000, 2000);		% 预先为变量分配内存空间
    for ii = 1:size(A,1)
        for jj = 1:size(A,2)
            A(ii,jj) = ii + jj;
        end
    end
    toc
    12345678
    

    程序输出Elapsed time is 2.786401 seconds.

可以看到,程序一比程序二所用的时间更长.这是因为: 对于程序一,没有预先为变量A分配内存,因此每当A的形状发生改变时,都需要重新为A分配内存地址,这花费了更多的时间

省略号的使用

使用省略号...拼接多行语句

在MATLAB中,省略号...可以将多行语句拼接为一行,灵活使用该语句可以提高代码可读性

自定义函数

  1. 函数可以被存入函数名.m文件中,也可以以函数句柄的形式定义在内存中

    函数文件的基本结构

funtion 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
end
  • function是一个关键字,声明该文件中保存的是一个函数.
  • 输入变量输出变量是非必须的,函数既可以没有输入变量,也可以没有输出变量.
  • 函数名应与.m文件名相同,且不包含特殊字符(最好不要有中文).
  • 例子

    function [C,S] = circle(r)
    %circle 求半径为r的圆的周长和面积
    C = 2.*pi.*r;
    S = pi.*r.*r;
    end
    

    函数的调用

    • 格式:

      [输出实参表]=函数名(输入实参表)
      
    • 例子

      >> [C,S]=circle(1)
      C =
      6.2832
      S =
      3.1416
      
  1. 匿名函数
    • 格式

      函数句柄变量=@(匿名函数输入参数)匿名函数表达式
      函数句柄变量=@函数名
      
    • 例子

      >> f = @(x,y)x+y
      >> f(1,2)
      ans =
          3
      

函数的参数和作用域

  1. 函数参数的可调性

    nargin:输入实参的个数
    nargout:输出实参的个数
    
    • 可以通过控制输入实参的个数,经过判断输出不同的结果
  2. 全局变量和局部变量

    • 全局变量的定义格式

      global 变量名
      
      • 多个变量名通过空格隔开
posted @ 2020-09-21 10:58  打不死の小强丶  阅读(163)  评论(0编辑  收藏  举报