其一般形式为:
switch(表达式)
{
case
常量表达式1:
语句1
break
case
常量表达式2:
语句2
break
……
case
常量表达式n:
语句n
break
default:
语句n+1
(break)
}
执行流程:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较(也可以是数字)
若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句
若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句n+1,然后退出switch语句,
如下程序,可以根据输入的考试成绩的等级,输出百分制分数段:
引用
switch(grade)
{
case
'A':
/*注意,这里是冒号:并不是分号*/
printf("85-100\n")
break
/*每一个case语句后都要跟一个break用来退出switch语句*/
case
'B':
/*每一个case后的常量表达式必须是不同的值以保证分支的唯一性*/
printf("70-84\n")
break
case
'C':
printf("60-69\n")
break
case
'D':
printf("<60\n")
break
default:
printf("error!\n")
}
(2)
如果在case后面包含多条执行语句时,也不需要像if语句那样加大括号,进入某个case后,会自动顺序执行本case后面的所有执行语句.如:
引用
{
case
'A':
if(grade<=100)
printf("85-100\n")
else
printf("error\n")
break
……
(3)
default总是放在最后,这时default后不需要break语句.
并且,default部分也不是必须的,当switch后面圆括号中表达式的值与所有case后面的常量表达式的值都不相等时弯型,则不执行任何一个分支直接退出switch语句.
例如,将上面例子中switch语句中的default部分去掉,则当输入的字符不是"A","B","C"或"D"时,此switch语句中的任何一条语句也不被执行.
(4)
在switch-case语句中,多个case可以共用一条执行语句,如:
引用
……
case
'A':
case
'B':
case
'c':
printf(">60\n")
break
……
在A,B,C3种情况下,均执行相同的脊裂语句,即输出">60".
(5)
最开始那个例子中,如果把每个case后的break删除掉,则当greak='A'时,程序从printf("85-100\n")开始执行,输出结果为:
引用
85-100
70-84
60-69
<60
error
这是因为case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即"只是开始执行处的入口标号".
执行完一个case后面的语句后,若没遇到break语句,就自动进入下一个case继续执行,而不在判断是否与之匹配,直到遇到break语句才停止执行,退出break语句.
引用
main()
/*完成两个数简单的四则运算*/
{
float
a,b
char
c1
printf("Please
enter
a,b
and
op:")
scanf("%f%c%f",&a,&c1,&b)
switch(c1)
{
case
'+':
printf("%f+%f=%f\n",a,b,a+b)
break
case
'-':
printf("%f-%f=%f\n",a,b,a-b)
break
case
'*':
printf("%f*%f=%f\n",a,b,a*b)
break
case
'/':
if(b!=0.0)
/*分母不能等于0*/
printf("%f/%f=%f\n",a,b,a/b)
else
printf("error!\n")
break
default:
printf("error!\n")
break
}
}
switch(k){
case k可能的取值1:
{
//各种拆历搭。。。
break//跳出switch流程,如果没有这个break。程序就会进入case 状态2顺序执行下去。
}
case k可能的取值2:
{
//各种。。。
break
}
//最多255个 k的可能的取烂衫值
default://如果都不满旅拿足各种状态,这个是默认状态。
{
//。。。
break
}
}
#include<stdio.h>int main()
{
int s=0,n
for(n=0n<3n++)//这个循环说明要执行3次,n 从0开始到2共3次循环
{
switch(s)
{
case 0:
case 1:s+=1
case 2:s+=2break
case 3:s+=3
default:s+=4
}
printf("%d,",s)
}
return 0
}
循环体里边共两条语句,一条是多分销仔支语句也就是switch,另一条是输出,当这两条都执行完认为循环体结束亏颤汪,执行n++,然后再判断条件,成立的话继续执行循环体。
循环体是这样执行的:先执行第一条语句多分支语句,然后是输出。
当n=0时,也就是第一次循环:s=0,找case 后跟0的洞李,找到执行向下全部执行,所以执行s=s+1(这时s=1),和s=s+2(这时s=3),遇到break终止下边没有执行的语句跳出多分支语句,说明switch执行完了,然后输出s为3
当n=1:switch里边是3,找case 3,执行后s=6,再向下执行s=10输出s为10
当n=2:switch里边是10,找case 10,没有的话找default,s=14,输出s为14
switch( 表达式)//这个地方不能加分号,表达式必须是字符型或整型
{ case E1 :语句组 1//case 与E1(即常量)之间用空格分隔
case E2 :语句组 2// case后的常量不能相同且常量后必须加冒号
…….
case En :语句组 n
[default: 语句组 ]
}
执行过程:
一、计算
二、找case
三、从找到的case开始,往下全部执行
四、若没找到case,则从default开始往下全部执行,
若没default则结束switch语句。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)