-
1 文字讲解
-
2 同步学习辅导
-
3 视频讲解
-
4 过关测试
在实际应用中,程序经常面临多重选择,使用嵌套的 if 语句虽然可以实现多重选择情况,但是嵌套层次过多会使程序变得十分复杂,难以读懂,而且很容易产生错误。当嵌套层次大于3时,使用 switch 语句更为方便。
switch 语句是用于多个分支选择的语句。
一、switch语句一般形式
(一)使用格式
switch(表达式)
{
case 常量表达式1∶
语句部分 1; [ break; ]
case 常量表达式2∶
语句部分 2; [ break; ]
… … …
case 常量表达式n:
语句部分 n; [ break; ]
[ default:
语句部分 n+1; ]
}
说明:以上格式中,[ ]内的语句为可选的。
二、switch流程图和执行过程
(一)switch流程图:

(二)switch语句执行过程
首先计算switch括号中的表达式的值
从上至下将表达式的值依次与各个case后面的常量表达式的值进行比较,一旦匹配成功,则马上执行此case后面的语句,执行过程中遇break语句,就跳出switch语句。
若表达式的值与所有case后面的常量表达式均不匹配,则执行default(如果有)后面的语句n+1,然后退出switch语句。
例3-5 根据考试成绩的等级(A、B、C、D),分别输出“优秀”,“良好”,“及格“和“不及格”等评语。
1、源程序如下:
#include <stdio.h>
#include <conio.h>
main( )
{
char grade;
printf("请输入成绩等级(A、B、C、D):");
grade= getchar( );
switch( grade )
{
case 'A':
printf("优秀\n"); break;
case 'B':
printf("良好 \n"); break;
case 'C':
printf("及格 \n"); break;
default:
printf("不及格 \n");
}
getch( );
}
2、程序测试过程如下:
第一组数据:优秀类,A

第二组数据:良好类,B

第三组数据:及格类,C

第四组数据:不及格类,A

经过以上四组数据测试,程序输出达到期望结果,从而验证程序正确。
3、程序执行过程分析:

switch后面括号中的表达式一般是整型表达式或字符型表达式。case 标号是整型数(包括字符型)或整型常量表达式。注意:不能用变量作为 case 标号,每一个case 常量表达式的值必须互不相同,在case标号后面的语句部分如果有多条请句,则可以不必加花括号,它会自动依次执行本 case 标号后面的请句,直到出 break 语句为止。
三、switch语句注意事项
1、case后面的常量表达式称为标号,标号后的语句就是一个流程分支,可以是单条语句,也可以是多条语句,不必加‘{ }’。
例:case ‘A':printf("优秀");
case 'B':printf("优秀");break;
2、switch后面的表达式是一个整型(或字符)表达式,case后面也必须是一个整型(或字符)常量表达式。
3、switch语句由若干case语句和可以缺省default语句组成。
三、break与default应用
(一)break语句含义
1.当执行了switch语句中的break语句后,它使程序流程跳出switch语句,转而执行switch语句后的语句。
2.如果switch中没有break语句,那么程序流程从匹配标号开始到switch语句块末的所有标号的语句均要执行。
有部分break语句的源程序如下:
例3-6
#include <stdio.h>
#include <conio.h>
main( )
{
char grade;
printf("请输入成绩等级(A、B、C、D):");
grade= getchar( );
switch( grade )
{
case 'A':
printf("优秀\n");
case 'B':
printf("良好 \n");
case 'C':
printf("及格 \n"); break;
default:
printf("不及格 \n");
}
getch( );
}
运行结果如下图所示。


由此可见,grade 的值为'A', 'B', 'C'时,都执行一组语句。
如果去掉所有的 break语句,源程序如下:
#include <stdio.h>
#include <conio.h>
main( )
{
char grade;
printf("请输入成绩等级(A、B、C、D):");
grade= getchar( );
switch( grade )
{
case 'A':
printf("优秀\n");
case 'B':
printf("良好 \n");
case 'C':
printf("及格 \n");
default:
printf("不及格 \n");
}
getch( );
}
输入优秀类代表数据"A",程序输出结果如下:

程序输出达不到期望结果,从而验证程序不正确。
(二)default含义
从上到下查找与表达式值匹配的标号,如果找到匹配的标号,则执行标号后面的语句;如果没有找到就执行default后面的语句;否则执行
1、没有default分支情况
#include"stdio.h"
main()
{ char q;
scanf(“%c”,&q);。
switch(q)
{ case ‘A’: printf(“优秀╲t”);
case‘B’:printf(“良好╲t”);
case‘C’:printf(“及格╲t”);
case‘D’:printf(“不及格╲t”);
}
}
输入:F 没输出
2、有default分支情况
#include"stdio.h"
main()
{ char q;
scanf(“%c”,&q);。
switch(q)
{ case ‘A’: printf(“优秀╲t”);
case‘B’:printf(“良好╲t”);
case‘C’:printf(“及格╲t”);
case‘D’:printf(“不及格╲t”);
default :printf(“输入有误,请重新输入”)
}
}
输入:F 输出 :输入有误,请重新输入
程序中的 break语句所起的作用很重要,当程序执行beak语句后,它就使程序流程跳出 switch 结构,转而执行 switch 结构后面的第1条语句,如果程序中相匹配的分支部分没有 break 语句,将会继续执行下一个 case 请句后面的程序段,一直到出现 break语句或 switch结束为止。
四、巩固搞高
举一反三:
如果A表示苹果,B表示菠萝,C表示橘子,D表示香蕉。要求从键盘输入代表水果的字母,输出你想吃的水果,一次只能选择一种水果,输入有误时要输出提示信息,按上述要求编写程序。
源程序如下:
#include “stdio.h”
main( )
{ char p;
scanf("%c", &p);
switch(p)
{ case 'A':printf(“我想吃苹果”);break;
case 'B':printf(“我想吃菠萝”);break;
case 'C':printf(“我想吃橘子”);break;
case 'D':printf(“我想吃香蕉”);break;
default:printf(“输入错误,请输入A到D之间的字母”);
}
}
例:游戏菜单
#include <stdio.h>
main()
{
char ch;
printf(" 欢迎您进入游戏中心\n");
printf(" ================================\n");
printf(" 1、开始\n");
printf(" 2、设置\n");
printf(" 3、充值\n");
printf(" 4、帮助\n");
printf(" 5、退出\n");
printf(" 请按键选择:");
scanf("%c",&ch);
if(ch=='1')
printf("游戏开始,您准备好了吗?");
else if(ch=='2')
printf("正在进行游戏设置,请耐心等待。");
else if(ch=='3')
printf("正在进行充值,请耐心等待。");
else if(ch=='4')
printf("正在查看帮助,请耐心等待。");
else if(ch=='5')
printf("游戏结束,下次再来。");
else
printf("按键错误 ,请重新选择。");
}
#include <stdio.h>
main()
{
char ch;
printf(" 欢迎您进入264班游戏中心\n");
printf(" =================================\n");
printf(" 1、开始\n");
printf(" 2、设置\n");
printf(" 3、充值\n");
printf(" 4、帮助\n");
printf(" 5、退出\n");
printf(" 请按键选择:");
scanf("%c",&ch);
switch(ch)
{
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;
default:
printf("按键错误 ,请重新选择。\n"); break;
}
}

