当前课程知识点:C语言程序设计 >  第5章 选择结构程序设计 >  5.5 switch语句 >  switch语句

返回《C语言程序设计》慕课在线视频课程列表

switch语句在线视频

下一节:while语句

返回《C语言程序设计》慕课在线视频列表

switch语句课程教案、知识点、字幕

同学们

大家好

本节我们来学习C语言中的switch语句

if语句只有两个分支可供选择

而实际问题中常常需要用到多分支的选择

例如

学生成绩分类

85分以上为 'A'等

70~84分为'B'等

60^-69分为'C'等

当然这些问题可以用嵌套的if语句来处理

但如果分支较多

则嵌套的if语句层数较多

程序冗长而且可读性降低

C语言提供switch语句直接处理多分支选择

switch语句的一般形式如下

switch(表达式)

{ case 常量1

case 常量1: 语句1

case 常量2: 语句2

case 常量n: 语句n

default: 语句n+1

}

switch下面的花括号内是一个复合语句

它是switch语句的语句体

语句体内包含多个以关键字

case开头的语句行和最多一个以default开头的行

case后面跟一个常量

或常量表达式

它们和default都是起标号的作用

用来标志一个位置

执行switch语句时

先计算switch后面的

表达式的值

然后将它与各case标号比较

如果与某一个case标号中的常量相同

流程就转到此case标号后面的语句

如果没有与switch表达式相匹配的case常量

流程转去执行default标号后面的语句

可以没有default标号

此时如果没有与switch表达式相匹配的case常量

则不执行任何语句

流程转到switch语句的下一个语句

说明

(1) switch后面的

表达式

可以是int

char和枚举型

但不可以为浮点型

如图所示

(2) 在case子句中虽然包含了一个以上执行语句

但可以不必用花括号括起来

会自动顺序执行本case标号后面所有的语句

当然加上花括号也可以

如图所示

(3) 每个case后面

常量表达式值

必须各不相同

否则会出现相互矛盾的现象

如图所示

(4) 每个case后面必须是

常量

常量表达式

不能包含变量

如图所示

(5) case后面的

常量表达式

仅起语句标号作用

并不进行条件判断

系统一旦找到入口标号

就从此标号开始执行

不再进行标号判断

如图所示

注意

一般情况下

在执行一个case子句后

应当用break语句使流程跳出switch结构

即终止switch语句的执行

最后一个子句

可不必加break语句

因为流程已到了switch结构的结束处

如图所示

(6) 多个case标号可以共用一组执行语句

如图所示

当a的值是1 2 3时

将b的值加2

当a的值是4 5 6 时

将b的值减2

(7) case子句和default子句如果都带有break子句

那么它们之间顺序的变化不会影响switch语句的功能

8

case子句和default子句如果有的带有break子句

而有的没有带break子句

那么它们之间顺序的变化可能会影响输出的结果

(9) switch语句可以嵌套

如图所示

流程图如图所示

运行结果如图所示

例题

要求按照考试成绩的等级输出百分制分数段

A等为85分以上

B等为70~84分

C等为60-69分

D等为60分以下

成绩的等级由键盘输入

解题思路

这是一个多分支选择问题

我们可以用多条if语句或if语句的嵌套来实现

也可以用switch语句来实现

等级grade定义为字符变量

从键盘输入一个大写字母

赋给变量grade

switch得到grade的值并把它和各case中给定的值'A'

'B'

'C'

'D' 逐一相比较

如果和其中之一相同

称为匹配

则执行该case后面的语句

即printf语句

如果输入的字符与'A'

'B'

'C'

'D'都不相同

就执行default后面的语句

输出输入错误的信息

编写程序如图所示

运行结果如图所示

程序流程图如图所示

我们对程序进行修改

注意在每个case后面的语句中

最后都有一个break语句

作用是使流程转到switch语句的末尾

即右花括号处

修改后编写程序如下

运行结果如下所示

流程图如图所示

可以看到

switch语句的作用是根据表达式的值

使流程跳转到不同的语句

break语句

作用是使流程转到switch语句的末尾

即右花括号处

例题

运输公司对用户计算运输费用

路程越远

每吨每千米运费越低

标准如下

解题思路

设每吨每千米货物的基本运费为p

货物重量为w

距离为s

折扣为d

则总运费f的计算公式为

f=p*w*s* (1一d)

经过仔细分析发现折扣的变化是有规律的

如图所示

从图中可以看到

折扣的变化点都是250的倍数

250

500

1000

2000

3000

利用这一特点

c的值为s/250

c代表250的倍数

当c<1时

表示s<250

无折扣

1<=c<2时

表示250<=s<500

折扣d=2%

2<=c<4时

d=5%

4<=c<8时

d=8%

8<=c<12时

d=10%

c>=12时

d=15%

编写程序如图所示

运行结果如图所示

在本程序中

解此题的关键是找出折扣d与距离s的关系

一般情况下

这类问题都是有一定规律的

要细心观察分析

找出规律问题就变得简单了

如果的确没有什么规律

就不能以这种方式使用switch语句处理

可以用嵌套的if语句

if … else if … else形式

处理

c和s是整型变量

因此c=s/250的结果为整数

当s>=3000时

令c=12

而不使c随s增大

这是为了在switch语句中便于处理

用一个case就可以处理所有s>=3000的情况

本节的内容就讲到这里

同学们再见

C语言程序设计课程列表:

第1章 C语言程序设计预备知识

-计算思维与计算机

--计算思维与计算机

--计算思维与计算机

--计算思维和计算机

第2章 C语言程序设计基础

-2.1 程序设计语言的发展及其特点和应用

--程序设计语言的发展及其特点和应用

--程序设计语言的特点及发展

- 2.2 C语言程序的基本结构及编制C语言程序的基本步骤

-- C语言程序的基本结构及编制C语言程序的基本步骤

--C语言程序的结构和编制步骤

第3章 基本数据类型、运算符与表达式

-3.1 C语言的数据类型

--C语言的数据类型

--C语言的数据类型

-3.2 常量

--常量

--常量

-3.3 什么是变量

--什么是变量

--什么是变量

-3.4 如何进行算术运算

--如何进行算术运算

--如何进行算术运算

-3.5 赋值运算符和逗号运算符

--赋值运算符和逗号运算符

--赋值运算符和逗号运算符

-3.6 数据类型转换

--数据类型转换

--数据类型转换

第4章 基本输入输出和顺序程序设计

-4.1 格式化输出printf

--格式化输出printf

--格式化输出

-4.2 格式化输入scanf及字符数据的非格式化输入输出

--格式化输入scanf及字符数据的非格式化输入输出

--格式化输入

第5章 选择结构程序设计

-5.1 关系运算符和关系表达式

--关系运算符和关系表达式

--关系运算符和关系表达式

-5.2 逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

-5.3 条件运算符和条件表达式

--条件运算符和条件表达式

--条件运算符和条件表达式

-5.4 if语句

--if语句

--if语句

-5.5 switch语句

--switch语句

--switch语句

第6章 循环结构程序设计

-6.1 while语句

--while语句

--while语句

--do-while语句

-6.2 for语句

--for语句

--for语句

-6.3 循环的嵌套

--循环的嵌套

--循环的嵌套

-6.4 break语句和continue语句

--break语句和continue语句

--break和continue语句

第7章 数组

-7.1 一维数组的定义和引用

--一维数组的定义和引用

--一维数组的定义和引用

-7.2 一维数组的赋值

--一维数组的赋值

--一维数组的赋值

-7.3 二维数组的定义和引用

--二维数组的定义和引用

--二维数组的定义和引用

-7.4 二维数组的赋值

--二维数组的赋值

--二维数组的赋值

-7.5 字符串的本质

--字符串的本质

--字符串的本质

-7.6 字符串操作的常用函数

--字符串操作的常用函数

--字符串常用函数

-7.7 字符串数组

--字符串数组

--字符串数组

第8章 函数

-8.1 函数概述

--函数概述

--函数概述

-8.2 有参函数

--有参函数

--有参函数

-8.3 函数参数的传递方式

--函数参数的传递形式

--函数参数的传递方式

-8.4 变量的作用域和生存期

--变量的作用域和生存期

--变量的作用域和生存期

-8.5 变量的存储类型

--变量的存储类型

--变量的存储类型

-8.6 函数的嵌套和递归调用

--函数的嵌套和递归调用

--函数的嵌套和递归调用

-8.7 函数的作用域与封装

--函数的作用域与封装

--函数的作用域与封装

第9章 指针

-9.1 指针变量的概念(上)

--指针变量的概念(上)

--指针变量的概念(上)

-9.2 指针变量的概念(下)

--指针变量的概念(下)

--指针变量的概念(下)

-9.3 指向一维数组的指针变量

--指向一维数组的指针变量

--指向一维数组的指针变量

-9.4 指向二维数组的指针变量(上)

--指向二维数组的指针变量

--指向二维数组的指针变量(上)

-9.5 指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

-9.6 动态内存分配

--动态内存分配

--动态内存分配

第10章 预处理命令

-10.1 编译预处理

--编译预处理

第11章 复杂数据类型

-11.1 用户自己建立数据类型

--用户自己建立数据类型

--用户自己建立数据类型

-11.2 定义结构体类型变量

--定义结构体类型变量

--定义结构体类型变量

-11.3 结构体变量的引用与初始化

--结构体变量的引用与初始化

-11.4 结构体数组

--结构体数组

--结构体数组

-11.5 指向结构体类型数据的指针

--指向结构体类型数据的指针

--指向结构体类型数据的指针

第12章 文件

-12.1 文件的基本概念和文件指针

--文件的基本概念和文件指针

--文件的基本概念和文件指针

-12,2 文件的打开和关闭

--文件的打开和关闭

--文件的打开和关闭

-12.3 文本文件读写

--文本文件读写

--文本文件读写

-12.4 二进制文件读写

--二进制文件读写

--二进制文件读写

switch语句笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。