数学建模社区-数学中国

标题: switch结构 [打印本页]

作者: 森之张卫东    时间: 2015-9-5 20:18
标题: switch结构
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


作者: 一束阳光    时间: 2015-9-7 13:44
顶一下,辛辛苦苦,别沉了呀





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5