[简明C语言]分支和循环P_2:分支 - switch语句

  • 前言
  • swtich语句
    • 语句项
    • break语句
    • 多个case值对应一个执行语句
    • default子句
    • 要求整型
    • 练习一:嵌套switch语句
  • 总结

前言

第二章:分支和循环

分支语句,也叫条件判断语句。
switch语句从字面上讲,可以称为开关语句,当然理解上不要以为就只有开和关,可以想象它是一个多路开关。它是一种多分支结构。

比如:

输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期七

用if…else if…else if的形式的表达太过复杂,所以要使用一种不一样的语法形式。这就是switch语句。


swtich语句

switch语句是一种流控制语句,用于多种选择判断。当表达式值等于所设置值的时候则执行后面的语句。可用break关键字跳出switch语句。

用一段伪代码来描述模块结构图:

switch(整型表达式)
{语句项;
}

语句项

语句项是什么呢?

//是一些case语句:
//如下:
case 整型常量表达式;语句;

那么给定语句项,下面这段代码会输出什么呢?

#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);switch (day)//整型表达式{case 1:printf("星期一\n");case 2:printf("星期二\n");case 3:printf("星期三\n");case 4:printf("星期四\n");case 5:printf("星期五\n");case 6:printf("星期六\n");case 7:printf("星期天\n");//没有break语句}return 0;
}

当输入值为1时,来看看运行结果:

可以发现当输入1的时候,打印出的结果却是全部的case

这是因为在case1输出后,没有什么阻止它停下时,就会一直向后输出,直到输出所有case语句。

输入值改为2呢?

可以发现当输入2的时候,打印出了从星期二开始向后的所有case

所以决定入口的,是表达式和case后的值。

如果想要达到预期的分支效果,也就是输入什么,就输出对应的选项,那么应该怎么做呢?

break语句

在switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支:

#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);switch (day){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期天\n");break;}return 0;
}

运行结果:

case决定入口,break决定出口。

每个case后加入了break语句后,当输入3时,打印的结果为星期三,达到了预期的效果。

但是,不是每一个case后面都需要break,上述例子中需要加入break只是需要符合逻辑

这样就实现了真正的分支

多个case值对应一个执行语句

如果想要输入1-5时输出工作日,输入6-7时输出休息日
代码如下:

#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;}return 0;
}

当输入4的时候,运行结果为工作日:

可以看出,case后是否加break并不是语法规定的,而是根据自身的需求来的。

注:最后一个case也要添加break
     【编程好习惯】
       这样写可以避免在以前的一个case语句后面继续编写时,忘了添加break语句的情况。

如果一个没有规定的未知字符被传递给这条switch语句,会出现什么情况呢?

对上述例子输入9,运行结果:

可以看到当输入9时,程序没有任何输出。为了获得反馈,在此加入一个default子句,以处理这种情况。

default子句

表达的值与所有的case标签的值都不匹配时,所有的语句都被跳过。

程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。

但是,如果并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

可以在语句列表中增加一条default子句

switch语句是一个条件选择语句,首先会找到满足条件的case值做为执行后面的程序入口;若所有的case都不满足,则找default入口,若未找到则退出整个switch语句;所以default只是一个备用的入口,有没有都无所谓。

为了进行错误检查或逻辑检查,还是应该在switch语句中加入default子句

#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;default:(printf("输入错误\n"));break;}return 0;
}

此时输入9,运行结果为:

此时打印出了“输入错误”,对检查到的错误给出了一个反馈。

注:default子句可以放在任何一个case标签可以出现的位置。
语句流会像执行一个case标签一样执行default子句
一般默认放在最后。

注:最好在每个switch语句中都放一条default子句!甚至可以在后边再加一个break!
     【编程好习惯】
       这样写可以给逻辑检查带来很多方便。

要求整型

1. swtich后要求输入一个整型表达式

  • 如果想放一个浮点型会怎样呢?

    会报错!
    表达式必须包含整型

2. case后要求输入一个整型常量表达式

  • 如果想放一个浮点型会怎样呢?

    也会报错!
    表达式必须为整型表达式!

  • 如果想放一个变量会怎样呢?

    还是会报错!
    表达式必须含有常量值

注:字符型是整型的一种。
字符对应的整数由ASCII码值规定。

练习一:嵌套switch语句

以下代码的运行结果是什么?

#include <stdio.h>int main()
{int n = 1;int m = 2;switch (n){case 1:m++;case 2:n++;case 3:switch (n)//switch允许嵌套使用{case 1:n++;case 2:m++;n++;break;}case 4:m++;break;default:break;}printf("m = %d, n = %d\n", m, n);return 0;
}

运行结果为:

m = 5,n = 3是怎么得到的呢?

观看注释:

#include <stdio.h>int main()
{int n = 1;int m = 2;switch (n)//n的值是1,执行case1{case 1://从case1进入m++;//m = 3//没有break!!继续执行case2case 2:n++;//n = 2//没有break!!继续执行case3case 3://进入嵌套switch语句switch (n)//n的值是2,执行case2{case 1://case1不执行n++;case 2://从case2进入m++;//m = 4n++;//n = 3break;//此处的break跳出【嵌套的switch语句】!!}//跳出【嵌套的switch语句】后,继续执行case4case 4:m++;//m = 5break;//跳出【外部的switch语句】default:break;}printf("m = %d, n = %d\n", m, n);//m = 5, n = 3return 0;
}

break跳出的只是自己所在的switch语句!

总结

本文详细介绍了分支语句中的switch语句,对分支语句有一个更细致的了解。

[简明C语言]分支和循环P_2:分支 - swtich语句相关推荐

  1. Gox语言中的循环与分支-GX14

    Gox语言中实现的循环与分支都是比较简单,也比较好理解的.唯一需要注意的是else if需要写作"elif",其他的基本与Go语言类似. 下面引自Qlang的Github页面, f ...

  2. ios入门攻略 07篇 C语言基础【循环结构之for语句,打印九九乘法表】

    for循环 语法: for(表达式1;表达式2;表达式3){ 循环体; } 语义:1.先执行表达式1,跳转到2 2.判断表达式2的结果是否为真,如果为真,跳转到3,否则跳转到5 3.执行循环体,执行完 ...

  3. python常用操作符_Python3.4学习笔记之常用操作符,条件分支和循环用法示例

    本文实例讲述了Python3.4常用操作符,条件分支和循环用法.分享给大家供大家参考,具体如下: #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1 ...

  4. Python学习笔记之常用操作符,条件分支和循环用法示例

    本文实例讲述了Python常用操作符,条件分支和循环用法.分享给大家供大家参考,具体如下: #Pyhon常用操作符 ''' 想要学习Python?Python学习交流群:973783996满足你的需求 ...

  5. 循环数组函数c语言,C语言练习题2(分支结构循环结构数组函数2009-2012二级真题)..doc...

    C语言练习题2(分支结构循环结构数组函数2009-2012二级真题). C语言练习题(二) 一 选择题 1.有以下程序 #include void main() { int a: canf(" ...

  6. 【C语言笔记初级篇】第二章:分支与循环

    目录 (1)什么是语句 (2)分支语句 A:if语句 B:switch语句 (3)循环语句 A:while B:for循环 C:do while循环 (4)goto语句 A:goto语句说明 B:go ...

  7. 包括循环和分支的C语言程序,《C语言程序设计》分支和循环的C程序设计.ppt

    <C语言程序设计>分支和循环的C程序设计.ppt 第三章 分支和循环的C程序设计 问题 一元二次方程根求解算法描述 3.1 程序的基本结构 ⒊循环结构Repetition ⒋复合语句 Co ...

  8. 快学 Go 语言 第 3 课 —— 分支与循环

    程序 = 数据结构 + 算法 上面这个等式每一个初学编程的同学都从老师那里听说过.它并不是什么严格的数据公式,它只是对一般程序的简单认知.数据结构是内存数据关系的静态表示,算法是数据结构从一个状态变化 ...

  9. 初始C语言-分支与循环语句

    一.语句 1. 什么是语句? C语句可分为以下五类: 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句 本章后面介绍的是控制语句. 2. 控制语句: 用于控制程序的执 ...

最新文章

  1. 如何居中一个浮动元素?
  2. 基于Debian9.3安装OpenVAS9.0(kali源)
  3. NUXT快速开始,选择Vuetify
  4. hls.js播放hls直播源
  5. Spring MVC的优势
  6. Mac 10.11系统下cocoaPods安装注意事项
  7. 语音编解码技术演进和应用选型
  8. 左神算法:环形单链表的约瑟夫问题(Java版)
  9. SAP CRM OData模型里的addressable为true的含义
  10. express 4.*升级后带来的影响
  11. 【正则表达式】正则表达式引发的惨案 回溯 超时 cpu 100
  12. 自定义标签的使用jsp实例_JSP自定义标签示例教程
  13. 秒变金庸风 | NLP文本风格迁移
  14. 【Unity】制作圆形进度条
  15. 路由器设置显示服务器拒绝访问,路由器设置服务器拒绝访问
  16. iOS集成EasyAR实现虚拟现实
  17. vs2017--MFC读写excel
  18. 医院招聘sass管理软件解决方案分析(2)
  19. oracle erp日志,错误,什么地方看日志
  20. 利用IPv6实现公网访问远程桌面

热门文章

  1. 金仓数据库 KingbaseES PL/SQL 过程语言参考手册(19. D PL/SQL保留字和关键字)
  2. 6502计算机联锁图纸上BA1,6502电气集中及计算机联锁系统造作使用问答
  3. sql查询本天,本周,本季度,本年,前一天,后一天,最后一天,本季度天数,本月天数
  4. mysql相关以及优化类面试总结
  5. 2019年全国马拉松报名时间指南
  6. SU(Seismic Unix)画图函数supsimage使用方法
  7. photoscan小结(1)——跑空三及导出POS
  8. 软件设计师笔记之数据流图
  9. JDBC连接ORACLE的三种URL格式
  10. 凝思后台6.0.80版本高危端口关闭方法