QQ登录

只需要一步,快速开始

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

switch结构

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

413

主题

36

听众

1854

积分

升级  85.4%

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

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2015-9-5 20:18 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    switch结构
    switch结构是另一种形式的选择结构。程序员可以根据一个单精度整形数,字符或逻辑表达式的值来选择执行特定的代码语句块。
    switch (switch_expr)
    case case_expr_1,
       Block1
    case case_expr_2
       Block2
    ...
    otherwise,
       Blockn
    end
    如果switch_expr的值与case_expr_1相符,那么第一个代码块将会被执行,然后程序将会跳到switch结构后的第一个语句。如果switch_expr的值与case_expr_2相符,那么第二个代码块将会被执行,然后程序将会跳到switch结构后的第一个语句。在这个结构中,用相同的方法来对待其他的情况。otherwise语句块是可选的。如果它存在的话,当switch_expr的值与其他所有的选项都不相符时,这个语句块将会被执行。如果它不存在,且witch_expr的值与其他所有的选项都不相符,那么这个结构中的任何一个语句块都不会被执行。这种情况下的结果可以看作没有选择结构,直接执行MATLAB语言。
    如果说switch_expr有很多值可以导致相同代码的执行,那么这些值可以括在同一括号内,如下所示。如果这个switch表达式和表中任何一个表达式相匹配,那么这个语句块将会被执行。
    switch (switch_expr)
    case {case_expr_1, case_expr_2, case_expr_3},
       Block1
    otherwise,
       Block n
    end
    switch_expr和每一个case_expr既可以是数值,也可以是字符值。
    注意在大多情况下只有一个语句块会被执行。当一个语句块被执行后,编译器就会跳到end语句后的第一个语句开始执行。如果switch表达和多个case表达式相对应,那么只有他们中的第一个将会被执行。
    让我们看一个简单的关于switch结构的例子。下面的语句用来判断110之间的数是奇数还是偶数。它用来说明一系列的case选项值的应用和otherwise语块的应用。
    switch (value)
    case {1, 3, 5, 7, 9},
       disp('The value is odd.');
    case {2, 4, 6, 8, 10},
       disp('The value is even.');
    otherwise,
       disp('The value is out ofrange.');
    end





    try/catch结构的应用

    try/catch结构是选择结构的一种特殊形式,用于捕捉错误。一般地,当一个MATLAB程序在运行时遇到了一个错误,这个程序就会中止执行。try/catch结构修改了这个默认行为。
    如果一个错误发生在这个结构的try语句块中,那么程序将会执行catch语句块,程序将不会中断。它将帮助程序员控制程序中的错误,而不用使程序中断。
    Try/catch结构的基本形式如下:
    try
    TryBlock
    catch
    CatchBlock
    end
    当程序运行到try/catch语句块,在try语句块中的一些语句将会被执行。如果没有错误出现,catch语句块将会被跳过。另一方面,如果错误发生在一个try语句块,那么程序将中止执行try语句块,并立即执行catch语句块。
    下面有一个包含try/catch结构程序。它能创建一个数组,并询问用户显示数组中的哪能一个元素。用户提供一个下标,那么这个程序将会显示对应的数组元素try语句块一般会在这个程序中执行,只有当try语句块执行出错,catch语句块将会发生错误。
    % Initialize array
    a = [ 1 -3 2 5];
    try
       % Try to display an element
       index = input('Entersubscript of element to display: ');
       disp(['a(' int2str(index)') = ' num2str(a(index))] );
    catch
       % If we get here an erroroccurred
       disp( ['Illegal subscript:' int2str(index)] );
    end
    这个程序的执行结果如下:
    >> try_catch
    Enter subscript of element to display: 3
    a(3) = 2
    >> try_catch
    Enter subscript of element to display: 8
    Illegal subscript: 8

    测试3.2
    本测试提供了一个快速的检查方式,看你是否掌握了3.4的基本内容。如果你对本测试有疑问,你可以重读3.4,问你的老师,或和同学们一起讨论。在附录B中可以找到本测试的答案。
    根据下面的描述编写对应的MATLAB语句。
    1.    如果x大于等于0,把x的平方根赋值于变量sqrt_x,并打印出结果。否则,打印出一条关于平方根函数参数的错误信息。并把sqrt_x归零。
    2.    变量funn/m计算得到,如果m的绝对值小于1.0e­300,打印出除数为0,否则计算并打印出fun值。
    3.    租用一个交通工具前100公里0.50美元每公里,在下面的200公里中2.30美元每分钟,越过300公里的部分一律按0.20美元每公里。已知公里数,编写对应的MATLAB语句计算出总费用和平均每公里的费用。
    检测下面的matlab语句,是对是错?正确的,输出结果如何,错误的,错在哪里?
    4. if volts > 125
       disp('WARNING: High voltageon line.');
       if volts < 105
          disp('WARNING: Lowvoltage on line.');
       else
          disp('Line voltage iswithin tolerances.');
       end
    5. color = 'yellow';
      switch( color);
      case 'red',
         disp('Stop now!');
      case 'yellow',
         disp('Prepare to stop.');
      case 'green',
         disp('Proceed throughintersection.');
      otherwise,
         disp('Illegal colorencountered.');
      end
    6. if temperature > 37
        disp('Human body temperatureexceeded.');
      elseif temperature > 100
        disp('Boiling point ofwater exceeded.');
      end

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国版主团队!

    0

    主题

    13

    听众

    473

    积分

    升级  57.67%

  • TA的每日心情
    奋斗
    2016-7-31 18:28
  • 签到天数: 72 天

    [LV.6]常住居民II

    自我介绍
    本科生

    社区QQ达人

    群组第一期sas基础实训课堂

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-5-21 09:14 , Processed in 0.397519 second(s), 60 queries .

    回顶部