4.3 switch语句

学习了条件语句,用多个条件语句可以实现多方向条件分支,但是发现使用过多的条件语句实现多方向分支会使条件语句嵌套过多,程序冗长,这样读起来也很不好读。这时使用开关语句同样可以达到处理多分支选择的目的,又可以使程序结构清晰。其一般形式为

978-7-111-30335-0-Chapter04-21.jpg

其语义是:计算switch后面表达式的值,并将其作为条件与case后面的各个常量表达式的值相比,如果相等时则执行case后面的语句,再执行break(间断语句)语句,跳出switch语句结构;如果case后面没有和条件相等的值时就执行default后的语句。如果当没有符合的条件时,不做任何处理,那可以不写default语句,default语句只是程序不满足所有case语句条件情况下的一个默认情况执行语句。

【例4-7】

978-7-111-30335-0-Chapter04-22.jpg

本程序是要求输入一个数字,输出其中文书写数字。但是当输入2之后,却执行了case2以及以后的所有语句,输出了“二”及以后的所有单词,这当然并非我们的本意所在。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,所以出现了继续执行所有后面case语句的情况。这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况,C语言还提供了一种break语句,专门用于跳出switch语句,break语句只有关键字break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。

【例4-8】输入月份,打印1999年该月有几天。网上转载

程序如下:

978-7-111-30335-0-Chapter04-23.jpg

978-7-111-30335-0-Chapter04-24.jpg

在使用switch语句时还应注意以下几点:

1)在case后的各常量表达式的值都应该是不一样的,否则会出现错误。

2)在case后,允许出现多条语句,可以不用{}括起来。

3)各case和default语句位置的先后顺序可以改变,而不会影响程序执行结果。

4)default子句可以省略不写。

【例4-9】输入3个整数,输出最大数和最小数。

978-7-111-30335-0-Chapter04-25.jpg

本程序中,首先比较输入的a,b的大小,并把大数装入max,小数装入min中,然后再与c比较,若max<c,则把c赋予max;如果c<min,则把c赋予min。因此max内总是最大数,而min内总是最小数。最后输出max和min的值即可。

【例4-10】计算器程序。用户输入运算数和四则运算符,输出计算结果。

978-7-111-30335-0-Chapter04-26.jpg

978-7-111-30335-0-Chapter04-27.jpg

本例可用于四则运算求值。switch语句用于判断运算符,然后输出运算值。当输入运算符不是+,-,*,/时给出错误提示。