本篇文章将带着大家快速掌握switch语句的使用方法,虽然switch语句是最基础的选择结构之一,但我觉得在使用的时候任由许多细节需要注意,希望文章内容将对大家有所帮助
文章目录
1.整型常量表达式具体该如何理解,可以将其划分成几个模块来理解
2.case中的 (整型常量1) 可以是表达式么,为什么有些代码中的这一部分也可以写成 ‘A’ 的字符形式,这该如何理解
3.为什么我所见到过有些使用switch结构的代码和这种基本框架差异很大,有些部分是缺失的,是不是说switch框架中的某些部分是可以省略的,如果省略,将带来哪些变化
4.和if...else结构之间有什么联系,相较之下能够给我们带来哪些好处
前言
今天第二次重温C语言中的switch选择分支结构,总体来讲收获满满。希望我分享内容将对大家有所帮助
第一次学这个结构的时候,当时感觉有点迷糊,有很多细节使用方面没有深究,认为if...else之类的语句比switch好用多了。但当我重温这个结构的时候发现其实并不是这样,在有些时候使用switch相较于if...else结构效果更好,比如可以是的我们的代码更加简洁明了,减少条件的重用性,不至于代码显得笼长等好处
一、switch语句的基本框架
基本框架如下:
//switch基本结构
switch(整型常量表达式)
{
case (整型常量1): 语句一; break;
case (整型常量2): 语句二; break;
...
case (整型常量n): 语句n; break;
default : 语句n+1; break;
}
case:用于匹配switch中的值
break:终止条件
default:当switch中的常量表达式的值与所有的case条件都不匹配时,则默认执行该条语句。(与else的作用相似,可以根据需求进行省略)
为了使大家能够由浅入深逐步了解switch选择分支结构,我们将通过剖析问题提的方式来逐渐深入
提出问题
问题一:整型常量表达式具体该如何理解,可以将其划分成几个模块来理解
问题二:case中的 (整型常量1) 可以是表达式么,为什么有些代码中的这一部分也可以写成 ‘A’ 的字符形式,这该如何理解
问题三:为什么我所见到过有些使用switch结构的代码和这种基本框架差异很大,有些部分是缺失的,是不是说switch框架中的某些部分是可以省略的,如果省略,将带来哪些变化
问题四:和if...else结构之间有什么联系,相较之下能够给我们带来哪些好处
二、问题分析
1.整型常量表达式具体该如何理解,可以将其划分成几个模块来理解
首先整型常量表达式可以拆分为三个模块:整型、常量和表达式。下面我们逐一来理解
整型:这里的数据类型指的是最终整合表达式所得出的结果要求一定是整型的数值
常量:顾名思义,常量是某一个确定的值,当然常量也分为很多种,常见有数值型常量和字符型常量两种(在这里由于整型的限制,因此指的是前者)。一定不能是变量,因为变量的值是不确定的,如果是变量的话,将无法与case进行匹配
表达式:该处的表达式其实也是可以使用某一具体的常量值来代替,但如果这样做,那么整个选择结构将失去了“选择”的意义,所以此处一般都是以表达式形式(具体根据题目中的要求)对传进来的值进行一定的运算变换得到某一判断值
2.case中的 (整型常量1) 可以是表达式么,为什么有些代码中的这一部分也可以写成 ‘A’ 的字符形式,这该如何理解
case中的整型常量的作用是与switch中的内容进行匹配,如果二者内容相同,则进入该条case语句当中
(1)可以是表达式
前面说到case中整型常量的作用是与switch中的内容进行匹配,也可以理解成这部分内容的形式与switch中整型常量表达式的内容是等价的
但必须注意不论是否是表达式,除了应满足上述switch条件外,不同的case所对应的常量内容一定是不能相同的
(2)在C语言中,字符和数值是可以通过ASCII码值相互转换的
所以有些代码中出现“case 字符: ”这种表达形式,原则上并不冲突,字符将通过ASCII转化为数值型
3.为什么我所见到过有些使用switch结构的代码和这种基本框架差异很大,有些部分是缺失的,是不是说switch框架中的某些部分是可以省略的,如果省略,将带来哪些变化
为了更好地理解这部分的内容,我们将通过一道例题进行分析
题目内容:在不同条件下输出对应的字母。
大家可以在看代码的时候可以将对应的流程图画在草稿纸上,然后在对比一下文章中流程图的结果是否与自己所分析的相同。如果相一致,那么大家对switch结构基本完全掌握了;如果不一致,大家可以通过拷贝代码,不断的改变条件,在自己的电脑上不断的调试。如果有不理解的地方,也可以参考文章中的分析内容
例题代码如下:
#include<stdio.h>
int main()
{
int sw;
printf("整数:");
scanf("%d", &sw);
switch (sw) //在这里指的是从键盘输入的一个常量(整型)
{
case 1: puts("A"); puts("b"); break;
case 2: puts("C"); //省略了break终止语句
case 5: puts("D"); break;
case 6: //省略执行语句
case 7: puts("E"); break;
default: puts("F"); break;
}
return 0;
}
上面所写的代码中,就是一个比较“残缺”switch选择结构,那么它对于不同的输入值,运行流程是怎样的呢?整个代码的流程图如下所示:
break语句指的是终止的意思,在上述程序中一旦遇见break语句时,将会直接跳出整个选择结构。若某一个case语句中省略了break,当执行完了这条case中的内容后,此时程序则会按顺序执行下面的case中的语句(下面case中的整型匹配值将不会发挥作用)
下面我们来测试一下各种情况下的输出结果:
4.和if...else结构之间有什么联系,相较之下能够给我们带来哪些好处
下面我们将3中的例题用if...else语句实现进行对比
代码如下:
#include<stdio.h>
int main()
{
int sw;
print("整数:");
scanf("%d", &sw);
if (sw == 1)
{
puts("A");
puts("B");
}
else if (sw == 2)
{
puts("C");
puts("D");
}
else if (sw == 5) puts("D");
else if (sw == 6 || sw == 7) puts("E");
else puts("F");
return 0;
}
对于if语句来说,实现分支操作的比较对象并不仅仅限于单一的表达式。需要仔细阅读每条if中的条件内容,从这个方面来看switch语句的格式更加清晰,表达效果更好。通过单一表达式的时候,使用switch语句的效果通常要比使用if语句的更好
总结
本篇文章的主要目的是为了是大家对选择分支结构中的switch语句友谊更加清晰的了解以及灵活运用,总体来说该语法并不是很难,但是如果不注意细节的处理的话还是非常容易出错的。学会如何灵活使用switch的删减条件将会给我们在编程中带来很大的帮助,如果大家还是感觉不太熟悉的话,可以试着将遇到的一些if选择结构的程序自己进行转化一下,加深自己的理解
最后,希望这篇文章将会给你带来一定的帮助!