Switch语句的应用与练习
witch语句也是一种分支语句,常常用于多分支的情况。
在我们要输出一个数显示星期几的时候:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
那我们会觉得一直 if…else if …else if 实在是太复杂了,那这个时候我们就得有不一样的语法形式,于是我们便用到了switch 语句。
那么Switch语句的语法是怎么样的呢?
switch(整型表达式)
{
语句项;
}
而语句项又是什么呢?
是一些case语句:
具体如下所示:
case 整形常量表达式:
语句;
那么如果要实现输出几就显示星期几则要如下图代码所示:
这时有人就会发出疑问了,这个int day = 0;我们能不能把 int 改成float或者其他的呢?
答案是不行!因为case语句必须使用整形常量,是不可以用小数或者字母的。
当我们的需求有所变化:
- 输入1-5,输出的是“weekday”;
- 输入6-7,输出“weekend
在这种要求的情况下我们就可以如下所示去输入代码
这一段代码有三个重点:
1.case1到5和case6到7是没有printf(“weekeday\n”)和printf(“weekend\n”)
的(因为case在没有任何输入的情况下会自动跳过进行下一个case语句的运算)
2.用default来解决输入了1~7以外的数字的输出方案
3.在最后一个 case 语句的后面加上一条 break语句(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)
这里我们要插入一个叫做default子句的概念
如果表达的值与所有的case标签的值都不匹配,正常来讲也就是所有的语句都被跳过而已程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default
写在任何一个 case 标签可以出现的位置。
因为当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
在每一个 switch 语句中都放一条default子句也是一个编程的好习惯,甚至可以在后边再加一个break。
那么在我们了解了Switch语句的用法后我们来尝试一下Switch语句的运用:
我们首先看一下图一:
我们先来自己计算一下n和m的的结果是多少?
(不要先看下图结果!!!)
我们可以看见n = 5,m = 3;
这个时候肯定有人说了:n不是应该等于4吗?
这个时候就证明你对于这个Switch语句还不够了解了!
这一段代码我来给你们一步一步的分析运行逻辑:
首先是int n = 1和int m = 2.
这是说明n和m的初始值是1和2
然后是把n =1 和m=2代入到Switch(n)语句中进行运算
首先在n = 1的情况下会代入到第一个语句内
case 1:n++;使 n + 1 = 2
case 2:m++; n++;使 m + 1 = 2 同时使 n + 1 = 3(此时n在经过case 1后已经是 n = 2 了)
然后break退出这个循环进入到下一步
而此时因为 n = 3 ,则case 4的语句由于 n ≠ 1 所以跳过运算case 4 内的 m++
然后再用break跳转到下一步default
而default没有任何运算则直接跳过
最后由break跳到printf输出 n = 5 m = 3
这就是这段代码的所有运行逻辑了。
感谢各位读者花费时间阅读本文章,希望你们能从中学到新的知识。