当前位置:
文档之家› C语言Switch分支语句yjh
C语言Switch分支语句yjh
假 真
缺点: 缺点 if 与 else 的配对容易混淆
表达式1
真
假
表达式2
真
表达式3 语句1 语句2 语句3
语句4
2.1 Switch 多分支结构
switch(表达式 表达式) 表达式 { case 常量 常量1: 语句块1; 语句块 break; case 常量 常量2: 语句块2; 语句块 break; ……………. case 常量 常量n: 语句块n; 语句块 break; default: 语句块n+1; 语句块 }
C语言分支结构 语言分支结构-switch 语言分支结构
杨俊华
学习目标与课程安排 目标:理解掌握C语言switch分支结构。 目标:理解掌握C语言switch分支结构。 switch分支结构 课程安排 – 背景知识回顾 – switch分支结构介绍 switch分支结构介绍 – 注意事项 – 实例讲解 – 典型错误 – 总结
关键字:switch
关键字:case
关键字:break
关键字:default
2.2 执行过程
计算表达式的值,判断与case后哪个常量相等。 case后哪个常量相等 1) 计算表达式的值,判断与case后哪个常量相等。 若与常量i的值相等,则从语句块i开始执行, 2) 若与常量i的值相等,则从语句块i开始执行, 直到遇到第一条break语句结束, break语句结束 直到遇到第一条break语句结束,或执行完语句 n+1结束 结束。 块n+1结束。 若与任何一个常量的值都不相等, 3) 若与任何一个常量的值都不相等,直接执行语 句块n+1 n+1。 句块n+1。
第八、各个case和default的出现次序不影响执行结果。 第八、各个case和default的出现次序不影响执行结果。但建议遵循 case 的出现次序不影响执行结果 以下准则: 以下准则: 按字母或数字顺序排列各条case a) 按字母或数字顺序排列各条case 语句 把正常情况放在前面, b) 把正常情况放在前面,而把异常情况放在后面 c) 按执行频率排列case语句 按执行频率排列case case语句
4.典型错误 4.典型错误
千万不要遗漏必要的break! 千万不要遗漏必要的break! break 如:
switch(score){ case 5: printf(“very good ”); case 4: printf(“good ”); case 3: printf(“pass ”); case 2: printf(“fail ”); default: printf(“error”); }
Score 90 ~100 70 ~89 60~69 60~0 Score/10 10,9 7,8 6 5,4,3,2,1,0
程序
#include <stdio.h> main( ) { int score; scanf("%d" ,&score); 不同情况执行相同的操作 switch (score /10) { case 10: case 9: printf("%d: A\n", score);break; case 8: case 7: printf("%d: B\n", score);break; case 6: printf("%d: C\n", score);break; default: printf("%d: D\n", score); } }
1.1 if语句回顾 if语句回顾
(表达式 表达式) 1.if (表达式) (表达式 表达式) 2.if (表达式) else
语句 语句1 语句1 语句2 语句2
3.if(表达式1 语句1 3.if(表达式1)语句1 if(表达式 表达式2) 语句2 else if(表达式2) 语句2 if(表达式 表达式3) 语句3 else if(表达式3) 语句3 …… if(表达式 表达式m) 语句m else if(表达式m) 语句m 语句n else 语句n
当输入5 当输入5时,将输出: 将输出:
very good good pass fail error
5 注意事项
后跟整形, Switch 后跟整形, Case后面接常量, Case后面接常量, 后面接常量 Default是可选项, Default是可选项, 是可选项 常量值须互不同。 常量值须互不同。 只能判断值相等, 只能判断值相等, 遇到break才中断。 遇到break才中断。 break才中断 Break常常很必要, Break常常很必要, 常常很必要 冒号小心别漏掉。 冒号小心别漏掉。
第三、遇到break才中断,Break常常很必要。 第三、遇到break才中断,Break常常很必要。 break才中断 常常很必要 使得程序在执行完选中的分支后,可以跳出整个switch break 使得程序在执行完选中的分支后,可以跳出整个switch 语句;如果没有这个break,程序将在继续前进到下一分支, 语句;如果没有这个break,程序将在继续前进到下一分支,直到遇到 break,程序将在继续前进到下一分支 后面的break或者switch完成。 后面的break或者switch完成。 break或者swi接常量。 第二、 Case后面接常量。 之后可以是直接的常量数值,如例中的1 case 之后可以是直接的常量数值,如例中的1、2、3、4,也 可以是一个使用常量计算式, +2等 可以是一个使用常量计算式,如2+2等,但不能是变量或带有变量的 表达式, 2等 不能是实型数, 4.1, 2。 表达式,如 a * 2等。不能是实型数,如4.1,或2.0 / 2。 switch(formWay) { 2//正确 case 2-1 : //正确 ... a//错误 case a-2 : //错误 ... //错误 case 2.0 : //错误 ... } 另外, 与常量值之后,需要一个冒号,请注意不要疏忽。 另外,在case 与常量值之后,需要一个冒号,请注意不要疏忽。
3
实例讲解
写一个程序完成下列功能: 例1 写一个程序完成下列功能
一个整数score 输入 : 一个整数 输出: 输出: 当 score<60 输出 当60<=score <70 输出 当70<=score <90 输出 当90<=score 输出
D C B A
3
实例讲解
分析: 分析: score为整型数,利用两个整数相除,结果自动 score为整型数,利用两个整数相除, 为整型数 取整的特性,score和 取整的特性,score和 score /10 有如下对应关 系:
1.2 if - else if
if (表达式 表达式) 语句1 表达式 语句 else if (表达式 语句 表达式) 表达式 语句2 else if (表达式) 语句 表达式) 语句3 表达式 else …
假
多分支选择结构
流程图如左: 流程图如左: 先判断表达式1的值 先判断表达式 的值 0就执行下一个判断 为0就执行下一个判断 非0就执行下面的语句 就执行下面的语句 一直这样做下去 直到得出最后结果
总结
C语言的选择分支结构有 一元分支: 一元分支: if 二元分支 :if - else 嵌套分支: if - else if - else 嵌套分支: 开关分支: 开关分支:switch
记住这些话
后跟整形, Switch 后跟整形, Case后面接常量, Case后面接常量, 后面接常量 Default是可选项, Default是可选项, 是可选项 常量值须互不同。 常量值须互不同。 只能判断值相等, 只能判断值相等, 遇到break才中断。 遇到break才中断。 break才中断 Break常常很必要, Break常常很必要, 常常很必要 冒号小心别漏掉。 冒号小心别漏掉。
第七、只能判断值相等。 只能判断值相等。 switch并不能代替所有 if..else...语句 这一点你应该知道了, 并不能代替所有的 语句。 switch并不能代替所有的if..else...语句。这一点你应该知道了, 因为前面已说过,它在对变量做判断时, 因为前面已说过,它在对变量做判断时,只能对整型或字符型的变量 做判断。另外,switch也只能做 值是否相等”的判断。 也只能做“ 做判断。另外,switch也只能做“值是否相等”的判断。你不能在 case里写条件 里写条件: case里写条件: switch (i) { //错误 case里只能写变 错误! case (i >= 32 && i<=48) //错误! case里只能写变 量的可能值,不能写条件。 量的可能值,不能写条件。 ... } 在这种情况下, if...else来实现 来实现。 在这种情况下,你只能通过 if...else来实现。
谢谢
第四、 Default是可选项 是可选项。 第四、 Default是可选项。 default是可选中,前面我们已经说过它的用处,及如果没有default default是可选中,前面我们已经说过它的用处,及如果没有default 是可选中 ,程序在找不到匹配的case分支后,将在switch语句范围内不做什么 程序在找不到匹配的case分支后,将在switch语句范围内不做什么 case分支后 switch 事,直接完成switch。 直接完成switch。 switch
第五、常量值须互不同。 第五、常量值须互不同。 每一个case的常量值必须互不相同, 每一个case的常量值必须互不相同,否则就会出现同一个值有两种 case的常量值必须互不相同 或多种执行方案。 或多种执行方案。
第六、必要时,可在各个case中使用{}来明确产生独立的复合语句。 必要时,可在各个case中使用{}来明确产生独立的复合语句。 case中使用{}来明确产生独立的复合语句 switch (formWay) { case 1 : //错误 由于case不明确的范围, 错误。 case不明确的范围 int a=2; //错误。由于case不明确的范围,编译器无法在此 处定义一个变量。 处定义一个变量。 ... case 2 : . .. } 在这种情况下,加上{}可以解决问题 在这种情况下,加上{}可以解决问题 {}