QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2729|回复: 0
打印 上一主题 下一主题

选择结构(分支语句)

[复制链接]
字体大小: 正常 放大

413

主题

36

听众

1854

积分

升级  85.4%

  • TA的每日心情
    开心
    2019-9-18 21:55
  • 签到天数: 258 天

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2015-9-4 22:43 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    3.3.4 逻辑函数
    MATLAB中有大量的逻辑函数,在条件满足时,函数返回1。条件不满足时,返回0。这些函数和逻辑运算与关系联合在组成选择结构和循环结构。表3.4列出了一系列的逻辑函数。

      
    3.4 MATLAB逻辑函数
      
      
    函数
      
      
    用途
      
      
    ischar(a)
      
      
    a是字符数组返回1,否则返回0
      
      
    isempty(a)
      
      
    a是空数组返回1,否则返回0
      
      
    isinf(a)
      
      
    a是无穷大,则返回1,否则返回0
      
      
    isnan(a)
      
      
    a不是一个数则返1,否则返回0
      
      
    isnumeric(a)
      
      
    a是一个数值数组返回1,否则返回0
      



    测试3.1
    本测试提供了一个快速的检查方式,看你是否掌握了3.3的基本内容。如果你对本测试有疑问,你可以重读3.3,问你的老师,或和同学们一起讨论。在附录B中可以找到本测试的答案。

    变量abcd定义如下,计算后面的表达式。

    a = 20;           b = -2;

    c = 0;             d = 1;

    1. a > b                        2. b > d;

    3. a > b & c > d                   4.a == b

    5. a & b > c                         6.~~b

    变量abcd定义如下,计算后面的表达式。

    a = 2;                           b=

    c =                   d =

    7. ~(a > b);

    8. a > c & b > c;

    9. c <= d

    变量abcd定义如下,计算后面的表达式。

    a = 2;                           b= 3;

    c = 10;                         d= 0;

    10. a*b^2 > a*c

    11. d | b b > a

    12. (d | b) > a

    变量abcd定义如下,计算后面的表达式。

    a = 20;                         b= -2;

    c = 0;                           d= 'Test';

    13. isinf(a/b)

    14. isinf(a/c)

    15. a > b & ischar(d)

    16. isempty(c)


    3.4 选择结构(分支语句)
    选择结构可以使MATLAB选择性执行指定区域内的代码(称之为语句块blocks),而跳过其他区域的代码。选择结构在MATLAB中有三种具体的形式:if结构,switch结构和try/catch结构。

    3.4.1 if结构
    if结构的基本形式如下:

    if control_expr_1

      

    elseif control_expr_2

      

    else

      

    end

    其中control expression控制if结构的运算。如果control_expr_1的值非0,那么程序将会执行语句块1(block1),然后跳到end后面的第一个可执行语句继续执行。否则,程序将会检测control_expr_2的值,。如果control_expr_2的值非0,那么程序将会执行语句块2(block2),然后跳到end后面的第一个可执行语句继续执行。如果所有的控制表达式(control expression)均为0,那么程序将会执行与else相关的语句块。

    在一个if结构中,可以有任意个elseif语句,但else语句最多有一个。只要上面每一个控制表达式均为0,那么下一个控制表达式将会被检测。一旦其中的一个表达式的值非0,对应的语句块就要被执行,然后跳到end后面的第一个可执行语句继续执行。如果所有的控制表达式(controlexpression)均为0,那么程序将会执行else语句。如果没有else语句,程序将会执行end后面的语句,而不执行if结构中的部分。

    注意MATLABif结构中的关键字end与第二章中提到的返回已知下标最大值函数end完全不同。matlab通过endM文件中的上下文来区分开它的两个用途。在大多数情况下,控制表达式均可以联合关系运算符和逻辑运算符。正像我们在本章早些时侯学到的,当对应的条件为真时,关系运算和逻辑运算将会产生1,否则产生0。所以当一个运算条件为真时,运算结果为非0,则对应的语句块,就会被执行。

    例如,一元二次方程的基本形式如下:

    ax2 + bx + c = 0                          (3.1)

    其解为

                              (3.2)

    其中b2 - 4ac是我们熟知的判别式,当b2 - 4ac>0时,方程式有两个不同的实数根,当b2 - 4ac=0,有两个相同的实数根,当b2 - 4ac<0时,方程式有两个不同的复根。

    假设我们检测某一元二次根的情况,并告诉使用者这个方程有两个复根,还是两个相等的实根和两个不相等的实根。用伪代码这个结构的形式如下:

    if (b^2 - 4*a*c) < 0

       Write msg that equation hastwo complex roots.

    elseif (b^2 - 4*a*c) ==0

       Write msg that equation hastwo identical real roots.

    else

       Write msg that equation hastwo distinct real roots.

    end

    转化为MATLAB语言:

    if (b^2 - 4*a*c) < 0

       disp('This equation has twocomplex roots.');

    elseif (b^2 - 4*a*c) == 0

       disp('This equation has twoidentical real roots.');

    else

       disp('This equation has twodistinct real roots.');

    end

    回忆一下,判断为真时,关系运算符将会返回一个非0值,从而导致对应语句的执行。

    为增加程序的可读性,在if结构中的语句块中最好缩进23个空格,而实际上没有必要。


    好的编程习惯

    if结构体经常缩进23个空格,以增强程序的可读性。



    你可以在一行内写完一个完整的if结构,只需把结构的每一部分后面加上

    分号或逗号,所以下面的两个结构是等价的:

    if x < 0

       y = abs(x);

    end


    if x < 0; y = abs(x); end

    但是这种方式只适用于简单的结构。


    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国版主团队!
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-8-4 06:08 , Processed in 0.488038 second(s), 54 queries .

    回顶部