5.4.1 switch结构简介
在C语言中,关键字switch表示开关,即根据用户所指定的条件,执行不同的功能代码。在实际使用时,switch必须与case配合使用。在本小节中,将介绍switch…case的使用原型及其相应的功能。
1.switch…case使用原型
当用户在使用switch…case选择结构实现功能之前,必须熟悉该结构的使用原型。switch…case的具体使用原型如下:
switch(开关条件)//switch…case使用原型 { case 条件1://条件1 ……;//功能代码1 case 条件2://条件2 ……;//功能代码2 case 条件3://条件3 ……;//功能代码3 default://默认情况下 ……;//默认执行代码 }
在使用原型中,switch参数的“开关条件”表示所指定的判断条件,而case的参数则表示具体的判断条件值。若case中的参数值与switch中的参数值相同,则程序将执行指定的功能代码。如果在程序中,没有与switch条件参数值相同的case语句,程序将默认执行default中的功能代码段,其流程图如图5.19所示。
图5.19 switch…case开关结构流程图
注意 在实际编程时,用户可以将一些没有考虑到的条件所对应的功能代码放在default代码段中执行。这样,用户就可以尽可能地避免出现程序运行错误。
2.switch…case使用实例
在本小节中,为了能够深入地理解switch…case选择结构的使用方法,将根据该结构的使用原型编写一个实例程序对其进行详细介绍。
例如,在一个学校中,将根据学生的考试成绩对其进行评级。若考试成绩在60分以下,则为不及格。若考试成绩在60~80分,则为良好。若考试成绩在80分以上,则为优。并且将根据不同的评级,输出不同的提示语。具体代码如下:
#include <stdio.h>//包含头文件 main()//主函数开始 { int scor[6]={0};//定义并初始化整型数组 int bool=0;//定义并初始化判断条件值 for(int i=0;i<6;i++)//for循环用于输入成绩 { printf("请用户输入第%d个成绩: ",i);//输出提示语 scanf("%d",&scor[i]);//接收用户输入的数据 } for(int i1=0;i1<6;i1++)//for循环用于值判断 { if(scor[i1]<60)//若成绩小于60,则将条件值设置为1 { bool=1; } else//否则,继续判断 { if(scor[i1]>60)//若成绩大于60 { if(scor[i1]<80)//并且小于80,则将条件值设置为2 { bool=2; } } if(scor[i]>80)//若成绩大于80,则将条件值设置为3 { bool=3; } } switch(bool)//根据条件值进行判断 { case 1://若成绩小于60者 { printf("第%d个学生成绩不及格 ",i1);//输出提示语 break;//跳出循环 } case 2://若成绩大于60并小于80者 { printf("第%d个学生成绩良好 ",i1);//输出提示语 break;//跳出循环 } case 3://若成绩大于80者 { printf("第%d个学生成绩优异 ",i1);//输出提示语 break;//跳出循环 } default://默认情况下 printf("不能判断学生的分数等级");//输出提示语 break; } } }
在上面的代码中,首先利用一个for循环结构循环接收输入的学生成绩,并将其保存在整型数组scor中。然后,再通过一个for循环对整型数组scor中的值进行判断。如果其值小于60,则将条件值设置为1。如果整型数组值大于60而小于80,则将条件值设置为2。如果整型数组值大于80,则将条件值设置为3。这样,用户就可以使用switch…case选择结构根据条件值,对不同的分数段进行统计输出。
图5.20 程序运行结果
注意 在本实例中,主要是对不同分数段的学生成绩进行判断后,输出该学生成绩的相应评级情况。而关键字break的功能十分强大,用户利用该关键字可以直接跳出循环体,而执行循环结构后面的代码。
将上面的代码进行编译、运行,其运行结果如图5.20所示。
如图5.20所示,当程序运行之后,用户可以循环输入6个成绩。当输入完成后,程序会根据用户输入的学生成绩进行级别划分,并输出相应的提示语。