-
关于C语言中的switch语句,先来说说基本知识,switch后括号中的只能是整型表达式(也可以是字符,字符是整型数据中的一种类型),而case后的各项结果只能是整型常量表达式,一般为相应的单个数据或者相应字符。
-
case后的结果一般为单个数据,可以解决一些使用情况,但当我们表示的结果是一个范围时,就会显得很麻烦。
-
比如:有一按路程长短分段计算运费的题,现有路程s,当0<s<250时运费无折扣,当250≤S<500时,运费打九折,当500≤S<3000时,运费打八折,S≥3000时,运费七五折,这种题用switch语句该怎么处理怎么思考呢?
-
(不嫌麻烦可以一个一个将情况列出)这样就急需一种新方法来解决这一情况,我经过总结,得到了以下方法体系,和大家分享,希望对大家有所帮助(・∀・)
-
方法: NO.1:缩小范围(找规律) 即找出所有边界值的公约数,选择适合的公约数x,用所有的边界值除以这个x将得到的值作为新的边界(尽量使新的边界值为个位数) 如上题可以选择公约数250,这样处理后边界值就变为0、1、2、12。这样再用case处理就会方便很多。因此我们可以将代码写成这样(记住default可以用来总结一组不规则的情况哦)
但可以看出对于500≤S<3000的情况我们这种处理似乎也不太合理这样我们还有进一步优化
-
方法: NO.2:对于有多种结果对应一种计算方法的情况(如上述case从1到11都对应一个计算方法)我们可以在switch语句之前引进一个赋值操作,来对500≤S<3000的情况一个统一的结果这样我们就可以将代码优化成这样
-
这样就可以用switch语句编写一些对范围有要求的情况,既满足要求又可以保证不出现多个case对应一种计算方法的冗长代码,不仅简洁还提高了代码的可读性。
-
总结一下:对于switch语句中对范围型有要求的题,1.我们首先要想办法缩小范围,方法是找到边界值合适的公约数,让边界值除以公约数以达到缩小范围的目的,让需要用到case的数量变少;2.如果某段范围缩小后还是不能用少量case表示,我能可以在switch语句前提前对这种情况赋予特殊的固定值,让switch语句中这种情况要用到的case数量减少(记得default可以总结一类要用到多个case的情况,要好好利用哦)。总之我们的目的就是要简化代码,让代码可读性更强更优质!
-
以上就是我今天的总结,希望可以帮到大家(・∀・),我会持续分享我在学习编程时的一些想法与思路,希望可以和和大家一起进步!