内容正文:
编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第20卷为专业核心模块训练卷,按《C语言》中"C语言卷7——switch语句实现多分支选择"范围和要求编写。具体内容为:理解switch语句实现多分支选择。
江苏省对口招生职业技能考试
C语言 试卷
(C语言卷7——switch语句实现多分支选择)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. switch语句中,用于进行多分支选择的关键字是( )
A.if关键字 B.case关键字 C.switch关键字 D.break关键字
2. 在switch语句中,每个case后面跟的是什么类型的常量( )
A.浮点常量(如3.14) B.字符常量或整数常量 C.字符串常量 D.任意类型的常量
3. switch语句中,用于终止某个case执行并跳出switch的语句是( )
A.stop B.exit C.break D.end
4. switch语句中,当所有case都不匹配时执行的子句是( )
A.error子句 B.else子句 C.default子句 D.other子句
5. 以下关于 C/C++ 中 switch 语句的说法,正确的是( )
A. switch 后面的表达式可以是 float 类型,编译时会自动转换为 int 比较
B. 如果所有 case 都不匹配且没有 default,程序会跳过整个 switch 结构继续执行
C. 每个 case 标签后必须使用 break,否则程序会报编译错误
D. 多个 case 标签不能共享同一段执行代码
6. 若case后没有break语句,程序会( )
A.产生编译错误 B.产生运行错误
C.继续执行下一个case(贯穿现象) D.立即终止switch
7. switch语句的括号中,表达式的值类型必须是( )
A.浮点型 B.字符型或整型 C.字符串型 D.任意类型
8. 下列关于default子句,正确的是( )
A.default必须放在所有case的最后 B.default可以省略不写
C.default可以出现在任何位置且最多只能有一个 D.一个switch可以有多个default
9. 下列switch语句格式正确的是( )
A.switch x B.switch(x) C.switch x; D.switch{x}
10. 在switch中,case后常量的值( )
A.可以相同 B.必须互不相同 C.可以重复出现 D.没有特殊限制
11. 想要根据成绩等级'A'、'B'、'C'输出不同信息,最适合的控制结构是( )
A.if语句 B.if...else语句 C.switch语句 D.while循环语句
12. switch语句结束后,程序从( )继续执行
A.switch开始处 B.switch结构后的第一条语句 C.程序终止 D.不确定位置
13. 下列关于switch的贯穿现象,正确的是( )
A.贯穿现象是程序错误 B.贯穿现象是有意为之的设计
C.贯穿现象指没有break时继续执行后续case D.贯穿现象只出现在default中
14. switch语句可以嵌套使用吗( )
A.不可以嵌套 B.可以嵌套,内层外层switch互不影响
C.只能嵌套一层 D.只能嵌套两层
15. 字符类型可以作为switch的表达式是因为( )
A.字符类型就是整数类型(存储ASCII码) B.C语言特殊规定允许
C.字符类型会自动转换 D.字符类型不能用在switch中
16. 下列能正确跳出switch语句的是( )
A.stop关键字 B.break关键字 C.exit关键字 D.end关键字
17. 下列关于case子句,正确的是( )
A.case后面必须是变量 B.case后面必须是常量表达式 C.case后面可以是任意表达式 D.case后面不需要具体值
18. break语句在switch中的作用是( )
A.终止整个程序 B.跳出当前switch结构 C.终止当前循环 D.跳过本次循环迭代
19. 若switch表达式的值与所有case都不匹配,且没有default子句,则( )
A.程序崩溃 B.程序报编译错误
C.不执行任何case,直接跳出switch D.执行第一个case
20. 下列关于switch和if...else的比较,正确的是( )
A.switch可以方便地处理范围判断 B.if...else可以方便地处理范围判断
C.switch比if...else效率一定更高 D.switch可以替代所有的if...else
二、判断题(共10题,每题1分,共10分)
21. switch语句的表达式可以是浮点类型( )
22. 每个case后面的常量值必须互不相同( )
23. default子句必须放在所有case子句的最后( )
24. 若case后没有break语句,程序会继续执行下一个case( )
25. switch语句中必须有default子句( )
26. break语句在switch中的作用是跳出switch结构( )
27. 字符类型可以作为switch的表达式( )
28. switch语句可以嵌套( )
29. case子句后面必须是常量表达式( )
30. switch语句只能进行等值判断,不能进行范围判断( )
三、填空题(共10空,每空2分,共20分)
31. switch语句使用关键字____开始多分支选择结构。
32. 在switch语句中,每个分支以关键字____开始。
33. 用于终止case执行并跳出switch的关键字是____。
34. 当所有case都不匹配时执行的子句以关键字____开始。
35. 若case后没有break,会产生____现象(贯穿)。
36. switch表达式的值必须是____类型或可以转换为该类型。
37. 各case后的常量值必须互不相同,否则会产生____错误。
38. default子句在switch中可以省略,但不是好的____习惯。
39. switch语句结束后,程序从switch结构____的第一条语句继续执行。
40. 在switch中,字符类型可以用是因为字符在内存中存储的是____值。
四、程序综合题(共3题,每题10分,共30分)
41. 程序阅读题:阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int n=2;
switch(n)
{
case 1: printf("One ");
case 2: printf("Two ");
case 3: printf("Three "); break;
default: printf("Other ");
}
printf("End
");
return 0;
}
42. 程序填空题:阅读下列程序,请将①~④表示的内容填写完整。
(1) #include <stdio.h>
(2) int main()
(3) {
(4) int day=3;
(5) switch(day)
(6) {
(7) case 1: printf("Mon"); break;
(8) case 2: printf("Tue"); break;
(9) case 3: printf("Wed"); break;
(10) case 4: printf("Thu"); break;
(11) default: printf("Other");
(12) }
(13) return 0;
(14) }
上述程序中,switch后面的表达式类型是①____,第9行执行后输出②____,
break语句的作用是③____,若去掉所有break,day=2时输出④____。
43.文件perfect.txt中存放一个正整数(位数≥5)。用削峰法删除3个数字,判断新数是否为完全数(等于其真因子之和),若是则输出。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define DEL 3
int is_perfect(int n);
int find_perfect(char strn[],int deln);
int main()
{
char strn[50];
int result;
FILE *fp=fopen("perfect.txt","r");
fscanf(fp,"%s",strn);
fclose(fp);
result=find_perfect(strn,DEL);
if(result>0)printf("完全数:%d
",result);
else printf("不存在");
return 0;
}
int is_perfect(int n)
{
int i,sum=0;
for(i=1;i<n;i++)
if(①)sum+=i;
return sum==n;
}
int find_perfect(char strn[],int deln)
{
int lenth=strlen(strn);
int i,k,dn,num;
for(dn=1;dn<=deln;dn++)
{
i=0;
while(strn[i]>=strn[i+1]&&i<lenth-dn)
i++;
for(k=i;k<lenth-dn;k++)
②;
}
num=0;
for(k=0;k<lenth-deln;k++)
num=num*10+strn[k]-'0';
if(③)return num;
return -1;
}
学科网(北京)股份有限公司
$
编写说明:江苏省对口招生计算机类《考纲百套卷》,依据《江苏省计算机类专业综合理论考试大纲》编写。本专辑涵盖5门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第20卷为专业核心模块训练卷,按《C语言》中"C语言卷7——switch语句实现多分支选择"范围和要求编写。具体内容为:理解switch语句实现多分支选择。
江苏省对口招生职业技能考试
C语言 试卷
(C语言卷7——switch语句实现多分支选择)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. switch语句中,用于进行多分支选择的关键字是( )
A.if关键字 B.case关键字 C.switch关键字 D.break关键字
【答案】C
【解析】switch关键字用于开始一个多分支选择结构。
2. 在switch语句中,每个case后面跟的是什么类型的常量( )
A.浮点常量(如3.14) B.字符常量或整数常量 C.字符串常量 D.任意类型的常量
【答案】B
【解析】case后面必须是整型或字符型常量表达式。
3. switch语句中,用于终止某个case执行并跳出switch的语句是( )
A.stop B.exit C.break D.end
【答案】C
【解析】break语句用于终止当前case的执行,跳出switch结构。
4. switch语句中,当所有case都不匹配时执行的子句是( )
A.error子句 B.else子句 C.default子句 D.other子句
【答案】C
【解析】default子句处理所有case都不匹配的情况。
5. 以下关于 C/C++ 中 switch 语句的说法,正确的是( )
A. switch 后面的表达式可以是 float 类型,编译时会自动转换为 int 比较
B. 如果所有 case 都不匹配且没有 default,程序会跳过整个 switch 结构继续执行
C. 每个 case 标签后必须使用 break,否则程序会报编译错误
D. 多个 case 标签不能共享同一段执行代码
【答案】A
【解析】A 错:switch 表达式必须是整数类型(int、char、enum 等)或能隐式转换为整数的类型,浮点型编译直接报错,不会自动转换;B 对:如果所有 case 不匹配且没有 default,则直接跳过 switch 块,这是标准行为;C 错:break 是可选的。没有 break 会发生“穿透”(fall-through),继续执行下一个 case 的代码,直到遇到 break 或 switch 结束;D 错:多个 case 可以共享代码
6. 若case后没有break语句,程序会( )
A.产生编译错误 B.产生运行错误
C.继续执行下一个case(贯穿现象) D.立即终止switch
【答案】C
【解析】没有break会产生贯穿(fall through)现象,继续执行下一个case。
7. switch语句的括号中,表达式的值类型必须是( )
A.浮点型 B.字符型或整型 C.字符串型 D.任意类型
【答案】B
【解析】switch表达式必须是整型或可以转换为整型的类型(如char、enum)。
8. 阅读以下代码,当输入 n = 2 时,程序的输出结果是( )
int n;
scanf("%d", &n);
switch (n) {
case 1:
printf("One ");
case 2:
printf("Two ");
default:
printf("Default ");
case 3:
printf("Three ");
}
A. Two
B. Two Default
C. Two Default Three
D. Two Three
【答案】C
【解析】这是经典的 switch 穿透陷阱题,考查对执行流程的理解:
1. n = 2,匹配到 case 2。
2. 执行 printf("Two "),此处没有 break,所以不会跳出,而是继续向下穿透。
3. 执行 default 的 printf("Default ")(注意 default 位置虽在 case 3 前,但仍会执行)。
4. 继续穿透到 case 3,执行 printf("Three ")。
5. 遇到 switch 右花括号,结束。
因此完整输出是 Two Default Three(注意末尾无空格不影响答案)。
9. 下列switch语句格式正确的是( )
A.switch x B.switch(x) C.switch x; D.switch{x}
【答案】B
【解析】switch语句格式为switch(表达式)。
10. 在switch中,case后常量的值( )
A.可以相同 B.必须互不相同 C.可以重复出现 D.没有特殊限制
【答案】B
【解析】各case后的常量值必须互不相同,否则会导致编译错误。
11. 想要根据成绩等级'A'、'B'、'C'输出不同信息,最适合的控制结构是( )
A.if语句 B.if...else语句 C.switch语句 D.while循环语句
【答案】C
【解析】根据单个表达式的多个离散值进行选择,switch语句最合适。
12. switch语句结束后,程序从( )继续执行
A.switch开始处 B.switch结构后的第一条语句 C.程序终止 D.不确定位置
【答案】B
【解析】switch结构结束后,程序从switch后的第一条语句继续执行。
13. 下列关于switch的贯穿现象,正确的是( )
A.贯穿现象是程序错误 B.贯穿现象是有意为之的设计
C.贯穿现象指没有break时继续执行后续case D.贯穿现象只出现在default中
【答案】C
【解析】贯穿(fall through)指一个case执行完后没有break,继续执行下一个case。
14. switch语句可以嵌套使用吗( )
A.不可以嵌套 B.可以嵌套,内层外层switch互不影响
C.只能嵌套一层 D.只能嵌套两层
【答案】B
【解析】switch语句可以嵌套,内层和外层switch互不干扰。
15. 字符类型可以作为switch的表达式是因为( )
A.字符类型就是整数类型(存储ASCII码) B.C语言特殊规定允许
C.字符类型会自动转换 D.字符类型不能用在switch中
【答案】A
【解析】字符在内存中存储的是ASCII码值(整数),所以可以用在switch中。
16. 下列能正确跳出switch语句的是( )
A.stop关键字 B.break关键字 C.exit关键字 D.end关键字
【答案】B
【解析】break关键字用于跳出switch结构。
17. 下列关于case子句,正确的是( )
A.case后面必须是变量 B.case后面必须是常量表达式 C.case后面可以是任意表达式 D.case后面不需要具体值
【答案】B
【解析】case后面必须是编译时可求值的整型或字符型常量表达式。
18. break语句在switch中的作用是( )
A.终止整个程序 B.跳出当前switch结构 C.终止当前循环 D.跳过本次循环迭代
【答案】B
【解析】在switch中,break用于跳出整个switch结构。
19. 若switch表达式的值与所有case都不匹配,且没有default子句,则( )
A.程序崩溃 B.程序报编译错误
C.不执行任何case,直接跳出switch D.执行第一个case
【答案】C
【解析】没有匹配的case且没有default时,不执行任何操作,直接跳出switch。
20. 下列关于switch和if...else的比较,正确的是( )
A.switch可以方便地处理范围判断 B.if...else可以方便地处理范围判断
C.switch比if...else效率一定更高 D.switch可以替代所有的if...else
【答案】B
【解析】if...else可以方便地处理范围判断,switch更适合离散值的等值判断。
二、判断题(共10题,每题1分,共10分)
21. switch语句的表达式可以是浮点类型( )
【答案】×
【解析】switch表达式必须是整型或可以转换为整型的类型,不能是浮点类型。
22. 每个case后面的常量值必须互不相同( )
【答案】√
【解析】case常量值重复会导致编译错误。
23. default子句必须放在所有case子句的最后( )
【答案】×
【解析】default可以放在switch中的任何位置。
24. 若case后没有break语句,程序会继续执行下一个case( )
【答案】√
【解析】这就是switch的贯穿(fall through)现象。
25. switch语句中必须有default子句( )
【答案】×
【解析】default子句是可选的,可以省略。
26. break语句在switch中的作用是跳出switch结构( )
【答案】√
【解析】break使程序跳出当前switch结构。
27. 字符类型可以作为switch的表达式( )
【答案】√
【解析】字符存储的是ASCII码值(整数),可以用在switch中。
28. switch语句可以嵌套( )
【答案】√
【解析】switch语句可以嵌套使用,内层和外层互不影响。
29. case子句后面必须是常量表达式( )
【答案】√
【解析】case后面必须是编译时可求值的常量表达式。
30. switch语句只能进行等值判断,不能进行范围判断( )
【答案】√
【解析】switch只能进行等值判断,范围判断需要用if...else。
三、填空题(共10空,每空2分,共20分)
31. switch语句使用关键字____开始多分支选择结构。
【答案】switch
【解析】switch关键字用于开始多分支选择结构。
32. 在switch语句中,每个分支以关键字____开始。
【答案】case
【解析】case关键字标识一个分支。
33. 用于终止case执行并跳出switch的关键字是____。
【答案】break
【解析】break用于跳出switch结构。
34. 当所有case都不匹配时执行的子句以关键字____开始。
【答案】default
【解析】default处理所有case都不匹配的情况。
35. 若case后没有break,会产生____现象(贯穿)。
【答案】贯穿(fall through)
【解析】没有break会继续执行后续case,称为贯穿现象。
36. switch表达式的值必须是____类型或可以转换为该类型。
【答案】整型
【解析】switch表达式必须是整型(包括char、enum等可转换为整型的类型)。
37. 各case后的常量值必须互不相同,否则会产生____错误。
【答案】编译
【解析】case常量值重复会导致编译错误。
38. default子句在switch中可以省略,但不是好的____习惯。
【答案】编程
【解析】省略default可能不是好的编程习惯,无法处理意外情况。
39. switch语句结束后,程序从switch结构____的第一条语句继续执行。
【答案】后面
【解析】switch结束后继续执行后续语句。
40. 在switch中,字符类型可以用是因为字符在内存中存储的是____值。
【答案】ASCII码(整数)
【解析】字符存储的是ASCII码整数值。
四、程序综合题(共3题,每题10分,共30分)
41. 程序阅读题:阅读下列程序,写出运行结果。
#include <stdio.h>
int main()
{
int n=2;
switch(n)
{
case 1: printf("One ");
case 2: printf("Two ");
case 3: printf("Three "); break;
default: printf("Other ");
}
printf("End
");
return 0;
}
【答案】Two Three End
【解析】
1.变量 n=2,switch 匹配 case 2,执行输出Two ;
2.case 2 没有 break 语句,程序继续穿透执行 case 3,输出Three ;
3.case 3 带有 break,跳出 switch 结构,最后执行输出End
;
4.最终拼接输出结果:Two Three End。
42. 程序填空题:阅读下列程序,请将①~④表示的内容填写完整。
(1) #include <stdio.h>
(2) int main()
(3) {
(4) int day=3;
(5) switch(day)
(6) {
(7) case 1: printf("Mon"); break;
(8) case 2: printf("Tue"); break;
(9) case 3: printf("Wed"); break;
(10) case 4: printf("Thu"); break;
(11) default: printf("Other");
(12) }
(13) return 0;
(14) }
上述程序中,switch后面的表达式类型是①____,第9行执行后输出②____,
break语句的作用是③____,若去掉所有break,day=2时输出④____。
【答案】① int(整型)
② Wed
③ 跳出、终止当前 switch 分支,防止 case 穿透
④ TueWedThuOther
【解析】
1. day = 2 首先匹配 case 2,输出 Tue;
2. 无 break,发生case 穿透,程序不会跳出,顺序继续执行 case3、case4、default;
3. 依次执行输出:Wed → Thu → Other;
4. 最终完整输出:TueWedThuOther
43. 文件perfect.txt中存放一个正整数(位数≥5)。用削峰法删除3个数字,判断新数是否为完全数(等于其真因子之和),若是则输出。请完善程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define DEL 3
int is_perfect(int n);
int find_perfect(char strn[],int deln);
int main()
{
char strn[50];
int result;
FILE *fp=fopen("perfect.txt","r");
fscanf(fp,"%s",strn);
fclose(fp);
result=find_perfect(strn,DEL);
if(result>0)printf("完全数:%d
",result);
else printf("不存在");
return 0;
}
int is_perfect(int n)
{
int i,sum=0;
for(i=1;i<n;i++)
if(①)sum+=i;
return sum==n;
}
int find_perfect(char strn[],int deln)
{
int lenth=strlen(strn);
int i,k,dn,num;
for(dn=1;dn<=deln;dn++)
{
i=0;
while(strn[i]>=strn[i+1]&&i<lenth-dn)
i++;
for(k=i;k<lenth-dn;k++)
②;
}
num=0;
for(k=0;k<lenth-deln;k++)
num=num*10+strn[k]-'0';
if(③)return num;
return -1;
}
【答案】① n% i==0 ② strn [k]=strn [k+1] ③ is_perfect (num)
【解析】
① 判断 i 是否能整除 n,满足则 i 是 n 的真因子,累加到 sum;
② 将后一位字符向前覆盖,实现删除指定位置数字的削峰效果;
③ 调用 is_perfect 函数判断数字是否为完全数,满足则返回该数。
学科网(北京)股份有限公司
$