5.4 switch语句
考点6 switch语句
真考链接
考点6 中的 switch 语句是在选择题和操作题中经常考核的知识点, switch方法在程序中实现选择结构有其独特的优点,而且容易阅读。
该知识点在选择题中的考核概率为80%。需要重点记忆和理解。
switch语句是C语言提供的多分支选择语句,用来实现多分支选择结构。它的一般形式如下:
switch(表达式)
{
case常量表达式1:语句1
case常量表达式2:语句2…
case常量表达式n:语句n
default:语句n+1
}
说明:
(1)switch是关键字,switch后面用花括号括起来的部分是switch语句体。
(2)switch后面括号内的“表达式”,可以是C语言中任意合法表达式,但表达式两侧的括号不能省略。
(3)case也是关键字,与其后面的常量表达式合称case语句标号,常量表达式的类型必须与switch后面的表达式的类型相匹配,且各case语句标号的值各不相同,不能重复。
(4)default也是关键字,起标号的作用,代表除了以上所有case标号之外的那些标号,default标号可以出现在语句体中任何标号位置上,当然,也可以没有。
(5)case语句标号后的语句1、语句2等,可以是一条语句,也可以是若干条语句。
真题精选
【例1】以下程序的运行结果是( )。
#include <stdio.h>
main()
{ int num = 4;
switch(num)
{ case 0:printf("0");break;
case 1:printf("1");break;
case 2:printf("2");break;
default:printf("-1");break;
}
}
A.-1 B.0 C.1 D.2
【答案】 A
【解析】该题目考查switch语句。因为num不满足前3个case,所以进入default分支,输出-1。
【例2】有以下程序:
#include <stdio.h>
main()
{ int x = 1,y = 0,a = 0,b = 0;
switch(y)
{ case 1:
switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;
}
printf("% d,% d",a,b);
}
程序的运行结果是( )。
A.1,0 B.2,2 C.1,1 D.2,1
【答案】 D
【解析】本题考查switch结构的内容。C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case常量表达式只是起语句标号的作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行外部的switch结构的case2分支。最后a和b的值分别为2和1。故本题答案为D。
【例3】函数fun()的功能是:统计长整数n的各位上出现数字1、2、3的次数,并用外部(全局)变量c1、c2、c3返回主函数。
例如,当n=123114350时,结果应该为:c1=3 c2=1 c3=2。
注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的标号处填入所编写的若干表达式或语句。
试题程序
#include <stdio.h>
int c1,c2,c3;
void fun(long n)
{ c1=c2=c3=0;
while(n)
{ switch(【1】)
{ case 1:c1++;【2】;
case 2:c2++;【3】;
case 3:c3++;
}
n/=10;
}
}
main()
{ long n=123114350L;
fun(n);
printf("\nThe result:\n");
printf("n=% id cl=% d c2=% d c3=% d
\n",n,c1,c2,c3);
}
【答案】(1)n%10 (2)break (3)break
【解析】本题考查switch语句,注意该语句的一般形式;如何提取数值n某一位上的数;break语句的使用。
标号(1):要统计长整数n的各位上出现数字1、2、3的次数,就需要判断各位上的数是多少。通过n除以10求余,可得到个位上的数,所以填入n%10。
标号(2)和标号(3):switch语句是多分支选择语句,在每个分支中要加入break,不然会依次执行后面的分支。
continue语句的作用是结束当前分支的运行,而break语句的作用是结束整个switch语句的运行。