c语言switch优点,关于C语言switch

文章讨论了C语言中switch语句在处理考试成绩等级判断时的不同实现方式,从if...else到switch的转换,以及如何利用switch的特性简化代码。作者提到大部分情况下switch配合break使用,但在此特定场景下,可以省略break实现连续等级的处理。对于效率和代码可读性的权衡,作者认为在适合的情况下,switch能提供更简洁的解决方案。
摘要由CSDN通过智能技术生成

关于C语言switch这个奇葩的东东。

很多C语言习题中都会有输入考试成绩,判断等级(90-100优,80-89良……0-59不及格)的题目。

首先,刚开始学到分支结构会用if … else if … else if …… else这样的结构,例如:

if (0 = g)

GP[n] = 0;

else if (60 = g)

GP[n] = 1;

else if (70 = g)

GP[n] = 2;

else if (80 = g)

GP[n] = 3;

else GP[n] = 4;

然后呢,又学到switch,则会变成,先除以10,利用趋零截尾的性质,然后把0-5直接合并了……例如:

ch = (int)(g / 10);

if (ch < 6)

{

ch = 5;

}

switch(ch)

{

case 5 : GP[n] = 0;break;

case 6 : GP[n] = 1;break;

case 7 : GP[n] = 2;break;

case 8 : GP[n] = 3;break;

case 9 : GP[n] = 4;break;

case 10 : GP[n] = 4;break;

}

但是呢,其实呢,这个if再把0-5合并 是可以去掉的,利用switch的特性,结果是这样子:

switch(grade/10)

{

case 0 :

case 1 :

case 2 :

case 3 :

case 4 :

case 5 : rank = 'E';

break;

case 6 : rank = 'D';

break;

case 7 : rank = 'C';

break;

case 8 : rank = 'B';

break;

case 9 :

case 10: rank = 'A';

break;

default: puts("Invalid grade");

exit (1);

}

记得在expert C programing中,作者就很BS当初C语言把switch中,每个分支都要加上break;跳出才不致于执行完所有语句。根据作者统计,97%的使用了switch判断分支的代码都是要用上break;的,也是就是说“完全的选择”,而只有剩下的少得可怜的switch会出现不带break;的情况,所以当时sun的编译器会对switch case不带上break;作waning。但是这里或许正是switch不带break;时的用途所在吧。

其实个人看来,使用switch时加上break;已是非常自然的,不加上break;反而觉得有点怪怪的。正如文中所述,前面两种想法是3月的时候做ACM OJ的模拟题时想到的,而第三种方法还是这两天逛论坛时无意才想起来……

不过,话说回来,这个例子是特例,其实在绝大多数时候,我严重地支持expert C programing的作者的。

至于第三种方法效率是否有所提高,我也不得而知。第一种我个人是比较反对的,原因是多重if else判断让人眼花。通常遇到多重分支判断都会使用switch。其实在本文中,第二第三种应该是不相上下的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值