c++语言switch 语句怎么讲解

如题所述

我们已经了解,if……else……可以用来描述一个“二岔路口”,我们只能选择其中一条路来继续走。然而,有时候我们会遇到一些“多岔路口”的情况,用if……else……语句来描述这种多岔路口会显得非常麻烦,而且容易把思路搅浑。比如程序4.2.2就是一个用if……else……语句描述的四岔路口(四种操作符),整个程序占据了将近一页。

如果我们把这些多岔路看作电路,那么用if……else……这种“普通双向开关”来选择某一条支路就需要设计一套很复杂的选路器。所以最简便的选路方法当然是做一个像下图那样的开关。(图4.4.1)

在C++中,也有这样的开关,那就是switch语句。它能够很简捷地描述出多岔路口的情况。具体的语法格式为:

switch(表达式)
{
case 常量表达式1:
{
语句块1;
break;
}
……
case 常量表达式n:
{
语句块n;
break;
}
default:
{
语句块n+1;
}
}

在switch语句中,我们要记住四个关键词,分别是switch、case、default和break。switch是语句的特征标志(图中标作sw);case表示当switch后的表达式满足某个case后的常量时,运行该case以后的语句块。要注意,任意两个case后的常量不能相等,否则switch将不知道选择哪条路走。default表示当表达式没有匹配的case时,默认(default)地运行它之后的语句块(图4.4.1中未标出);break表示分岔路已经到头,退出switch语句。

下面,我们就来用switch语句来改写程序4.2.2。箭头表明遇到break以后的运行情况。
#include "iostream.h"
int main()
{
float a,b;
char oper;
cout <<"请输入一个表达式(eg.1+2):" <<endl;
cin >>a >>oper >>b;
switch (oper)
{
case '+':
{
cout <<a <<oper <<b <<'=' <<a+b <<endl;
break;
}
case '-':
{
cout <<a <<oper <<b <<'=' <<a-b <<endl;
break;
}
case '*':
{
cout <<a <<oper <<b <<'=' <<a*b <<endl;
break;
}
case '/':
{
if (b!=0) cout <<a <<oper <<b <<'=' <<a/b <<endl;
else cout <<"出错啦!"<<endl;
break;
}
default:
cout <<"出错啦!"<<endl;
}
return 0;
}
上述程序的运行结果和程序4.2.2的运行结果一样。我们发现使用了switch语句以后,代码的平均缩进程度有所减少,阅读代码的时候更简洁易懂。所以,使用swith语句来描述这种多分支情况是很合适的。

试试看:
1、如果去除了case对应的break,则运行出来会是什么结果?
结论:如果去除了break,则不会退出switch而运行到别的支路里去。

2、如果程序4.2.2的default没有处在switch的结尾部分,那么运行出来会是什么结果?
结论:switch语句中最后一个分支的break可以省略,其它的break均不可以。

3、case后的常量能否是一个浮点型常量或双精度型常量?


switch的一些使用技巧
返回去看一下程序4.1.2,我们不难发现这个程序也是一个多分支结构。可是switch语句只能判断表达式是否等于某个值,而不能判断它是否处于某个范围。而要我们把处于某个范围中的每个值都作为一句case以后的常量,显然也太麻烦了。那么我们还能不能使用swith语句来描述这种范围型的多分支结构呢?

通过分析,我们发现了主要起区分作用的并不是个位上的数,而是十位上的数。如果我们能把十位上的数取出来,那么最多也就只有十个分支了,不是吗?下面我们就来看一下用switch语句改编的程序4.1.2。
#include "iostream.h"
int main()
{
int mark;
cout <<"请输入成绩(0~100): ";
cin >>mark;
switch(mark/20)
{
case 5:
{
if (mark>100)//100到119的情况都是mark/20==5,所以要用if语句再次过滤
{
cout <<"ERROR!" <<endl;
break;
}
}
case 4:
{
cout <<"Good!" <<endl;
break;
}
case 3:
{
cout <<"Soso" <<endl;
break;
}
case 2://根据前面试一试的结论,如果case没有对应的break,会运行到下一个case中
case 1:
case 0:
{
if (mark>=0)//同样要用if过滤负数
{
cout <<"Please work harder!" <<endl;
break;
}
}
default://其它情况都是出错
cout <<"ERROR!" <<endl;
}
return 0;
}
这个程序要比原来的程序4.1.2冗长一些。但是这里提到这个程序的目的是要教会大家一种使用switch的方法,即“以点盖面”。

算法时间:数据的转换

在程序设计中,我们经常会遇到这样的问题:我们希望处理的数据和电脑能够处理的数据可能有所不符。不符合的情况一般有两种,一种是范围不符合,另一种是类型不符合。对于范围不符合,我们一般考虑的是使用代数式对数据进行处理。比如C++中的随机函数能够产生一个0~32768之间的一个整数,如果我们希望得到一个0~10之间的随机数,那么就用它对10取余数,那么结果一定就在这个范围内。对于类型不符合,我们只好尽量用已有的数据类型来描述这种难以表达的类型。就如同电脑中用0和1表示真和假一样。

注意:

break åªèƒ½è·³å‡ºä¸€å±‚ switch æˆ–者循环,如果是 if else break æ˜¯ä¸ç®¡çš„。它只管 switch æˆ–者循环。

温馨提示:内容为网友见解,仅供参考
无其他回答

c++语言switch 语句怎么讲解
具体的语法格式为:switch(表达式){case 常量表达式1:{语句块1;break;}……case 常量表达式n:{语句块n;break;}default:{语句块n+1;}}在switch语句中,我们要记住四个关键词,分别是switch、case、default和break。switch是语句的特征标志(图中标作sw);case表示当switch后的表达式满足某个ca...

c++中的switch语句怎么用
1、完成变量的赋值,其中有x=1,y=1,m=1,n=1。2、执行第一个switch(m),因为m=1,所以进入case 1分支。在这个分支里,执行第二个switch(n),因为n=1,所以进入case 1分支,运行x=x*2=1*2=2。由于case 1没有break语句,因此继续执行case 2,y=y*2=1*2=2。3、由于第一个case 1...

switch语句
1. 基本结构: switch语句的核心是一个表达式,它根据表达式的值来选择执行相应的代码块。每个可能的值对应一个case标签,当表达式的值与某个case标签匹配时,程序将执行该case下的代码块。2. case标签: 每个case后面跟一个或多个要执行的语句。这些语句可以根据特定条件进行执行。例如,在Java中,你可...

C++中的switch是什么意思
和c中的是一样是选择性的语句,例如 int a=3;swith(a){ case1:printf("a=1");break;case2:printf("a=2");break;case3:printf("a=3");break;} 则执行case3的情况

c++中switch的用法
switch 是一个开关语句,和case配套使用, 和if else 判断语句差不多, switch 语句是用于多分支语句进行条件判断,比如:i++;switch (i){ case 1 : P1 = 0xFE; \/\/i =1; 执行P1 = 0XFE;breK; \/\/执行完成后跳出 case 2 : P1 = 0xFD; \/\/i =2; 执行P1...

c++的switch语句怎么使用?
switch (x\/1000){ case 0:cout << x << endl;break;case 1:cout << x * 0.9 << endl;break;} 说明:switch语句的执行 1,对switch中的控制表达式进行求值。这里是对x\/1000求值,如果0<=x<1000,求值结果为0,如果1000<=x<2000,结果为1 2,根据控制表达式的求值结果,跳转到相应的...

C++怎么用switch语句判断输入的字符
把输入的字符转换成ASCII,通过ASCII进行判断,也可以参考下面的代码:switch(ch){ case 'a':printf("%d",ch);break;case 'z':break;default:printf("没有匹配成功。");} \/*类似上面的表达式,ch 与 'a' 比较,相等就输出,不等就一个一个判断全都不相等,则执行 default 后面的语句。\/ ...

C++程序设计里switch语句怎么用呢,switch后面括号的内容是什么意思?比 ...
swith就是先计算括号里表达式的值,然后逐个与后面的case标签比较,如果找到匹配的,就从那个case标签开始向下执行,直到switch语句结束或者遇到break以及其他跳转语句。具体到这个程序,就是计算a%3的值,如果是0,就执行case 0后面的语句,如果是1,执行case 1后面的语句m++;

求一个switch语句的例子
在C++程序中,switch语句可以帮助我们根据不同的输入值执行相应的代码块。在这个例子中,程序首先要求用户输入月份(1到12)。然后,switch结构会根据输入的整数值(n)执行相应的case块。例如,如果输入的是1,程序会输出"1月有31天",并使用break跳出switch。对于2月,输出"2月有28天",同样用break...

switch语句
首先,`switch`语句是编程中的一种控制结构,它允许根据一个表达式的值来选择不同的代码块执行。这种结构在多种编程语言中都有出现,如C、C++、Java、JavaScript等,用于替代多个`if-else`语句,使代码更加简洁易读。其次,`switch`语句的工作原理是,先计算`switch`括号中的表达式,然后将这个值与每个`...

相似回答