很结构化的C语言switch语句程序设计

C语言中的switch/case语句(分支语句)虽然使得程序结构简单,程序执行效率也较多条if语句(条件语句)高,但由于case 中的表达式只能是常量而大大限制了其用途。针对switch/case语句的缺点,设计了一种新的、很结构化的switch语句使用方法,能满足大部分多种条件选择的编程需求,供广大编程爱好者研究借鉴,不当之外请反馈。

下面,举2个典型的例子说明switch语句的结构化设计:

1.

在进行评定时通常会将成绩分为几个等级:

0~59分为不合格

60~74分为及格

75~89分为良好

90~100为优秀

本实例中将实现如下功能:输入一个成绩,程序会给出对应的等级。

下面所编写的程序,较好地解决了switch语句中case表达式只能为常量的问题,也算是对C语言程序设计的一种创新。

switch(sel=  (num>=90 && num<=100)? 1:  //90~100为优秀作为选择1

(num>=75&& num<  90) ? 2:  //75~89分为良好作为选择2

(num>=60&& num<  75) ? 3:  //60~74分为及格,作为选择3

(num>= 0&& num<  60) ? 4:  // 0~59分为不合格,作为选择4

//其他非法成绩,都作为选择0

)

    { case 1:

         printf("等级为优秀\n");  break;

      case 2:

         printf("等级为良好\n");  break;

      case 3:

         printf("等级为合格。\n");  break;

      case 4:

         printf("等级为不合格。\n"); break;

          default:

         printf("非法成绩!\n");

   }

从上面的程序结构上看,程序符合结构化的要求,程序功能灵活,可以适应程序多种选择的要求。

这种用法的缺点是代码稍长,但现在计算机系统的内存都足够大,这种缺点可忽略不计。运行效率未做定量测试分析,但从代码的执行顺序上看,代码运行效率不会低于其他方式。

2.

运输公司对用户计算运费。距离(s)越远,每公里运费越低。具体标准如下:

s <  250  (km)    没有折扣

250 < =s <  500     (km)              2% 折扣

500 < =s < 1000      (km)      5% 折扣

1000 < =s < 2000    (km)               8% 折扣

2000 < =s < 3000    (km)              10% 折扣

3000 < =s              (km)              15% 折扣

下面所编写的程序,较好地解决了switch语句中case表达式只能为常量的问题,也算是对C语言程序设计的一种创新。

switch( sel= (               s < 250)      ? 1:               //没有折扣

(250 < =s   && s < 500       )      ? 2 :       //2% 折扣

(500 < =s   && s< 1000)     ? 3:         // 5% 折扣

(1000 < =s  && s < 2000)    ? 4:       // 8%折扣

(2000 < =s  && s< 3000)     ? 5:       //10%折扣

(3000 < =s                      )      ? 6:               //15% 折扣

                                                          0

)

{case 1:

     discount=0;      break;

 case 2:

     discount=2/100;   break;

 case 3:

     discount=5/100;   break;

case4:

     discount=8/100;   break;

 case 5:

     discount=10/100;  break;

 case 6:

     discount=15/100;  break;

 default:

     discount=0;           break;

}

当然,上面的2个例子是为了说明switch语句的用法,并不一定适合用switch语句来实现。这种结构化的switch语句最适合的是各case分支下所执行的语句比较多且没有规律的情况。其实单就例2来说,更简单且结构化的用法也可以这样写:

discount=(  (              s < 250)     ? 0:               //没有折扣

(250 < =s   && s < 500       )      ? 2 :       //2% 折扣

(500 < =s   && s< 1000)     ? 5:         // 5% 折扣

(1000 < =s  && s < 2000)    ? 8:       // 8%折扣

(2000 < =s  && s< 3000)     ?10:       //10%折扣

(3000 < =s                      )      ?15:       //15% 折扣

                                                          -1

        )  / 100;

以上是多年来对switch语句使用过程的一种研究改进,对大家能提供一种编程结构的选择,还要根据编程要求来选择使用。

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值