C语言之路 第四章 case控制结构

第四章 case控制结构

检测一个人是否具备某种职业才能,就是看他能否热爱其中包含的枯燥劳动。----洛根.皮尔索斯.史密斯 

在现实生活中,常常会遇到这样的情况:要求在一系列的可选方案中做出选择,而不是在两个方案中做出选择。例如,选择去哪个学校上学,或者选择入住哪个旅馆,或者更加难于决断的事情,选择与哪个女孩结婚(在不同的情况下往往总是做出错误的选择)。严谨的C语言程序也是一样,常常要求在更复杂的情况下做出选择,而不仅仅是在两种情况下做出选择。C语言提供了专门的控制语句来有效地处理这样的分支情况。

4.1 switch

允许在一系列的选项中做出选择的控制语句就是switch,更准确的说应该是switch-case-default控制语句。举个例子:

#include <stdio.h>

int main(void)

{

      int i=2;

      switch (i){

        case 1:

         printf("\nI am in case 1");

         break;

        case 2:

         printf("\nI am in case 2");

         break;

        case 3:

         printf("\nI am in case 3");

         break;

        default:

         printf("\nI am in default");

        }

     system("pause");

     }

      

4.2 提示和陷阱

●可以对case语句进行任意的排列,不一定非要按照升序的形式,如1,2,3这样的顺序来排列case语句及default语句。

    ●在case和switch中也可以使用字符值。

    ●从理论上讲,switch可以嵌套在另外一个switch中,这种情况称为switch语句的嵌套。但实际上很少这样做。

    ●关键字switch的后面紧跟着一个整型表达式,这个表达式可以使任何一个C语言表达式,并且该表达式的值应为整型值。因此,西main的switch语句是合法的:   switch(i+j*k)

           switch (23+45%4*k)

           switch (a<4&&b>7)

    ●关键字case应为整型常量或字符型常量。在case中使用的表达式也可以是常量表达式,因此,case3+7是正确的,而case a+b是错误的。

4.3 switch的不足之处与巨大的优势

    ●浮点类型的表达式不能用来作为switch的条件判断。

    ●case的表达式中不允许出现变量。

    ●多个case不能使用相同的表达式,因此下面的switch是非法的:

     switch (a){

     case 3:

          ...

     case 1+2:

          ...

      }

上面说了switch三个明显的缺点,那为什么还要使用switch语句呢?

因为速度!

switch结构执行起来会比多重的if-else结构要快一些。

但是,你要注意的是,如果if-else语句中的条件很简单,而且数量又少,则if-else语句比起机械查表的switch语句执行起来要快。因此,有两个case的switch会比相应的if-else要慢。作为程序员应该根据情况来决定是使用switch还是if-else语句。

4.4 goto语句

   “应该避免使用goto关键字!Goto会使C语言程序员的生活变得很痛苦。很少有正当的理由要使用goto语句,使用goto会使程序变得不可靠,可读性差,调试困难。然而也有一些程序员认为goto是很有吸引力的。

对于一些较难的程序设计,使用goto似乎可以让程序的控制很容易的到达想要到达的地方。但是,对同样的问题,通过使用if,for,while和switch可以使陈旭更加规范。这些结构更合乎逻辑,也更容易理解。

    goto的最大问题是:当使用goto时不能确定怎样才能到达代码中特定的位置。goto使控制流程变得模糊,因此要尽量避免使用goto。没有它完全可以把事情做好。通过良好的编程技能,goto总是可以避免的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值