C语言switch选择结构

一、switch的思想及意义:
程序设计中选择结构的第二大语句就是:switch语句。switch和if—else if一样都可以做多分支选择,但是switch语句的思想是把程序所有可能出现的值 的情况,列出一个情况表,根据所输入的值判断与情况表中的的那种情况相同,直接执行相应情况下的语句即可。可直接处理相对应的数据流,加快执行速度。
switch语句之所以被称为开关语句,因为它就类似于生活中人们乘坐电梯,每个乘客都会选择自己需要的楼层,也有多位乘客同时选择同一层,这时候,每位乘客只需要选择好自己的楼层,电梯到了之后自然会自动打开。这个生活例子非常具体的表现了switch语句的思想。
二、switch与if比较
switch语句又称开关语句,是选择结构的一种语法。
switch语句与if语句相比较,一般指的是if语句的第三大形式if—else if,也就是我分支语句的比较。
1.代码的易读性及全面性
(1)switch 语句写出的程序,可读性非常好,整体流程看起来清晰明确。
(2)if语句适应性非常强,可以处理的情况与switch比较要更加全面。比如说字符串比较就只能用if语句。
2.代码的值的判断
(1)if表达式一般为逻辑表达式或关系表达式(判断的是某个区域,这里可以是任意表达式),也可以是常量表达式,但是比较少,判断条件的结果只有”真”或”假”。
(2) switch后的表达式可以是任意表达式,主要是某些情况下的某种情况的判断(判断的是某个值),表达式的条件的结果可以根据输入或特定情况有n多种值,根据各值选择分支。
3.分支的多少
(1)if一般应用于情况比较特殊的逻辑判断,或者情况很少的选择判断。
(2) switch一般应用于条件判断简单,但是分支很多的情况中使用。
4.switch的独有优点
(1)switch相对if来说,还有if比不了的优点就是在选择分支较多时,switch…case结构会生成跳转表,根据变量的取值跳转到合适的分支用switch…case结构会提高程序的效率
5.所有的switch语句都可以被if—else if替换,但是反过来则不一定。
三、switch语句的应用
srwitch是开关的意思,所以有的书籍上也把它称为开关语句。switch语句主要用于选择结构多分支的情况下。
1.switch语句的一般格式。
switch(表达式)
{
case 常量表达式1:语句1; break;
case 常量表达式2:语句2; break;
… …
default:语句;
}
switch的执行过程是判断表达式的值与case后常量表达式的值哪个相等,执行相应的语句后跳出switch.
switch的流程图表示如下:
在这里插入图片描述
2.switch语句的注意事项
在讲注意事项之前大家先在机器敲下下面的三段代码:
(1)有无break都行,一般都有,作用是跳出switch.
(2)default是缺省值,可有可无,意思是除case 后所有情况(值)下的其它情况(值)。
(3)case与后边常量表达式之间必须有空格。
(4)各case和default可以任意互换位置,并不影响程序和逻辑的正常运行。
(5)switch 后边的表达式可以是任意表达示(这是指可以是算术表达式,也可以关系表达式及其它表达式),但是结果只能是整型或单字符型。
(6)case 后边可以是任意常量表达式(这是指可以是算术常量表达式,也可以关系常量表达式及其它常量表达式),但是结果只能是整型或单字符型。
(7)case后边的常量表达式不能出现重值。
(8)多个case可以执行同一组语句;其实就是1的重复,无break继续向下,直到碰到break.
执行以下代码,运行查看效果

(1)#include "stdio.h"
void main()
{
    int n;
    printf("\n\n\t请输入你的选择:");
    scanf("%d",&n);    
    switch(n)
    {
       case 1:printf("\t星期一\n");
       case 2:printf("\t星期二\n");
       case 3:printf("\t星期三\n");
       case 4:printf("\t星期四\n");
       case 5:printf("\t星期五\n");
       case 6:printf("\t星期六\n");
       case 7:printf("\t星期日\n");
       default:printf("\t错误\n");	
    }
} 


(2)#include "stdio.h"
void main()
{
    int n;
    printf("\n\n\t请输入你的选择1-7:");
    scanf("%d",&n);
    printf("\t你选择的是:\n\n\n");
    switch(n)
    {
       case 1:printf("\t星期一\n");break;
       case 2:printf("\t星期四\n"); break;
       case 3:printf("\t星期三\n"); break;
       case 4:printf("\t星期四\n"); break;
       case 5:printf(“\t星期五\n"); break;
       case 6:printf("\t星期六\n"); break;
       case 7:printf("\t星期日\n"); break; 	
    }
} 

以上两段代码说明注意事项1、2、3;那大家考虑以下代码输入5输出结果是什么呢?

(3)void main()
{
    int n;
    printf("\n\n\t请输入你的选择1-7:");
    scanf("%d",&n);
    printf("\t你选择的是:\n\n\n");
    switch(n)
    {
       case 1:printf("\t星期一\n");break;
       case 2:printf("\t星期四\n"); break;
       case 3:printf("\t星期三\n");
       case 4:printf("\t星期四\n"); break;
       case 5:printf(“\t星期五\n"); 
       case 6:printf("\t星期六\n"); 
       case 7:printf("\t星期日\n"); break; 	
    }
} 

结果应该是:星期五
星期六
星期日
现在大家利用已知的switch基本结构,及注意事项,大家来完成一个题。输入月份,输出每个月份所对应的天数?
参考代码如下:注意这段代码中是有错的,要求你先改正错误,再总结用到了那些注意事项:

#include "stdio.h"
void main()
{
    float month;//表示几月 
    printf(“\n\n\t请输入月份:");
    scanf("%f",&month);
    switch(month)
    {
       case 12: 
       case 1:
       case 2: printf(“冬天”);break;
       case 3:
       case 4:
       case 5: printf(“春天”);break;
       case 6:
       case 7:
       case 8:printf(“夏天”);break;
       case 9:
       case 10:
       case 11: printf(“秋天”);break;
       default:printf("\t错误\n");break;
    }
} 

以上这段代码中基本上包括了上面的八大注意事项,你都找到了吗。
3.switch语句的不足
switch语句的不足在于只能进行某个值的判断,如果是某个区域如输入一个数a>90时做什么或者输入电影名称,查看电影简介,这时就只能用if—else if了。

猜你喜欢

转载自blog.csdn.net/SqrsCbrOnly1/article/details/91363042