各类语言的控制语句之选择结构

 控制台输入输出是控制台程序最基本的操作,学习完这一段内容以后,就该进入C#语句(statement)的学习了。
其实,在涉及向对象之前,一段C#代码是很难和一段同样功能的C代码相区分的。C#的语句和C的语句几乎完成同样的功能,那就是实现选择(判断)和循环结构。这也是结构化程序设计中的最基本结构。
而对于VB来说,语法上就更没什么进步了,因为VB6的各种控制结构已经非常完善甚至有点娇惯我们的程序员了。现在只不过去掉了一些历史遗留的关键字,时的语法更清晰了。
选择结构有两种,二重选择和多重选择。
C#的二重选择是:

if  ( 条件 )

    语句块1
}

else
{
    语句块2
}

VB的二重选择是:

If  条件  Then
    语句块1
Else
    语句块2
End   If

这个比较容易懂,两种语言都是在条件为真的时候执行语句块1,否则执行语句块2。看不懂者请补习数据类型与变量那一章。
对于逐级条件过滤,两种语言都提供了一种更为简洁的语法来代替嵌套:
C#的是

if  ( 条件1 )
{
    语句块1
}

else   if  ( 条件2 )
{
    语句块2
}

.
else
{
    语句块x
}

而VB的是

If   条件1  Then
  语句块1
ElseIf   条件2  Then
  语句块2
.
.
.
ElseIf   条件n  Then
语句块n
Else
  语句块x
End   If

读者如果能自行写出这种语法所对应的嵌套形式的二重选择结构,那么就说明你对二重选限的认识已经很标准了。
当然,这种逐级过滤是一种最一般的情况,因为条件1到条件n之间并不要求有内在联系,而多重分支语句则是为了处理逐级过滤的一种特殊情况:表达式的多可能值匹配,来设计的。
C#的是

switch  ( 表达式 )
{
    
case 可能值1:
        语句块1
        [
break;]
    
case 可能值2:
        语句块2
        [
break;]
    .
    .
    .
    
case 可能值n:
        语句块n
        [
break;]
    
default:
         语句块x
        [
break;]
}

在这种语法之下,运行时会首先计算表达式的值,然后从上至下逐个核对case后面的值是否与当前计算出来的表达式的值相等,如果相等,则执行该case语句之后的对应的语句块,如果不等,则和对下一个,直到遇到第一个(注意,是第一个,也就是说,如果有两个case后面的值相等,永远是第一个case被执行到)匹配的值为止,或直到扫描完所有匹配项为止。如果没有匹配项,则执行default块。每个case块的末尾一般都需要一个break语句,表示跳出switch语句块,如果没有break,那么紧随其后的下一个case块会被执行,这个事情在C时代就是这样。
对于VB,则复杂一些:

Select   Case  表达式
    
Case  可能值1
        语句块1
    .
    .
    .
    
Case   Else
        语句块x
End   Select

VB的Select Case语句的用途和C#的switch一样,Case Else块相当于C#的default块。不过有几个区别,第一个区别就是VB的每个Case块不需要break语句,每个Case执行完会自动跳到End Select后面继续执行。第二个,也就是最重要的确别,在于VB的Case块后面的可能值是可以罗列多个的,而C#只能有1个,并且,如果你觉得罗列多个值不足以表达你的意思,比如你需要表达式的值落在某个区间,还可以用Is关键字来表示表达式的值。比如,你想表达这么一个意思:如果a的值等于1或者2或者大于10,那么就给a增加1,如果a的值是5、6或小于0,那么就给a减小1,如果以上情况都不是,则给a为0。这个意思用C#的switch写是这样(简直让人头疼):

switch  ( a )
{
  
case 1:
  
case 2:
      a
++
      
break;
  
case 5:
  
case 6
      a
--
      
break;
  
default:
    
if ( a > 10 )
      
{ a++;break;}
    
if ( a < 0 )
      
{ a--;break;}
    a 
= 0;
}

而如果是VB则是:

Select   Case  a
    
Case   1 , 2 , Is   >   10
       a
+= 1
    
Case   5 , 6 , Is   <   0
       a
-= 1
    
Case   Else
       a
= 0
End   Select

C#代码是不是让你的脑子有点乱?所以用C#来实现这样的逻辑,还是用if表达起来更清晰,虽然显得有点没技术含量。
有兴趣的同学不妨来考虑这么一个问题,case块的数量会影响执行的速度吗?比如,表达式有10个可能值和10000个可能值相比,匹配一次的平均时间会有区别么?一般人从直觉上都会觉得有。那么,请同学们自己编写程序来证明自己的想法。我的实验结果一周后公布。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值