内容正文:
《编程语言基础——C语言》高等教育出版社(第5版)
第二章 分支结构程序设计 章节过关卷(二)(解析版)
考试时间:90分钟 满分:100分
姓名 班级 学号
一、单项选择题(本题共25小题,每题2分,共50分)
1、下列运算符中,优先级最高的是( )
A. == B. && C. ! D. ||
【答案】C
【解析】 逻辑非 ! 的优先级为2高于关系运算符(如 ==)和逻辑与/或(&&, ||)。
2、在C语言中,表示“逻辑与”的运算符是( )
A. & B. && C. || D. !
【答案】B
【解析】 && 是逻辑与;& 是按位与;|| 是逻辑或;! 是逻辑非。
3、若 int a = 5, b = 0;,则表达式 a && b 的值是( )
A. 0 B. 1 C. 5 D. 真
【答案】A
【解析】 逻辑与运算中,只要有一个操作数为0(假),结果即为0。
4、以下if语句写法正确的是( )
A. if {a > b} (...) B. if a > b { ... }
C. if (a > b) ... D. if (a > b); { ... }
【答案】C
【解析】 C语言if语句的正确格式为:if(表达式){语句序列},当语句序列只有一条时,可以省略大括号。
5、执行以下代码,输出结果是( )
int x = 10;
if (x > 5)
printf("A");
else
printf("B");
A. A B. B C. AB D. 无输出
【答案】A
【解析】 10 > 5 为真,执行if分支。
6、以下嵌套if语句中,else匹配的是( )
if (a > b)
if (c > d)
printf("1");
else
printf("2");
A. 外层if B. 内层if C. 两者都匹配 D. 编译错误
【答案】B
【解析】 C语言规定else总是与最近的未匹配的if配对。
7、switch语句中,case标签后的表达式必须是( )
A. 变量 B. 浮点常量
C. 整型或字符型常量 D. 字符串
【答案】C
【解析】 switch-case要求case后为整型或字符型常量表达式,不能是变量或浮点数。
8、以下switch代码的输出结果是( )
int k = 1;
switch(k)
{ case 1: k++; printf("A");
case 2: if(k == 2) printf("B");
case 3: printf("C"); break;
default: printf("D"); }
printf("%d", k);}
A. ABC2 B. AB2 C. AC2 D. BC2
【答案】B
【解析】 匹配case 1,由于case 1和case2没有break,会“穿透”执行后续的case 3。
9、用于处理多分支选择且效率较高的语句是( )
A. if-else嵌套 B. switch C. while D. for
【答案】B
【解析】 switch专为多分支设计,在分支较多时通常比if-else链更高效清晰。
10、阅读以下 C 语言代码片段,其最终的输出结果是( )
int a = 5, b = 10, c;
c = a > b ? a : b + 1;
printf("c = %d", c);
}
A. c = 5 B. c = 6 C. c = 10 D. c = 11
【答案】D
【解析】 算术运算符 + 的优先级 高于 三元条件运算符 ? :,先计算b+1的值,再计算三元运算表达式的值为11,然后赋值给变量c。
11、x与y的函数关系如下:
x
y=
x<0
x–1
x=0
x
x>0
x+1
下面程序段中能正确表示上面关系的是( )。
A.y = x + 1; B.y = x -1; C.if (x < = 0) D.y = x;
if (x >=0) if (x ! = 0) if (x< 0) if (x < =0)
if (x = = 0) if (x > 0) y = x–1; if (x < 0)
y = x; y = x + 1; else y = x; y = x – 1;
else y = x–1; else y = x; else y = x+1; else y= x+1;
【答案】C
【解析】 外层if (x <= 0):涵盖了x<0和x=0两种情况。
内层if (x != 0):在x≤0的前提下,如果不等于 0,那必然是x<0。执行y = x - 1。(符合第1条)。
else:在x≤0的前提下,如果等于 0,那就是x=0。执行y = x。(符合第2条)
外层else:对应x>0的情况。执行y = x + 1。(符合第3条)
12、以下程序的运行结果是( )。
main()
{ int m = 5;
if (m ++ > 5) printf("%d
", m);
else printf("%d
",m --);
}
A.4 B.5 C.6 D.7
【答案】C
【解析】 初始m=5,执行if(m++ > 5),先取m的值5进行判断,5>5为假,然后m自增为6。由于条件为假,执行else分支,printf("%d
", m--),此时m的值为6,先输出6,再自减为5。因此输出结果为6。
13、在C语言中,关系运算的结果类型是( )
A. bool B. char C. int D. float
【答案】C
【解析】 C语言没有bool类型,关系运算结果为int型(0或1)。
14、以下代码中,当x=0时输出( )
if (x) printf("Yes"); else printf("No");
A. Yes B. No C. 编译错误 D. 运行错误
【答案】B
【解析】 0视为假,执行else分支。
15、switch语句中,default子句的作用是( )
A. 必须存在 B. 处理未匹配任何case的情况
C. 只能放在最后 D. 可以省略break
【答案】B
【解析】 default是可选的,用于兜底处理所有case都不匹配的情况。
16、逻辑与运算符 && 的短路特性是指( )
A. 左操作数为真时,不计算右操作数
B. 左操作数为假时,不计算右操作数
C. 右操作数为真时,不计算左操作数
D. 左右操作数都必须计算
【答案】B
【解析】 若左操作数为假(0),整个表达式必为假,无需计算右操作数。
17、表达式 5 > 3 > 1 的值是( )
A. 1 B. 0 C. 真 D. 假
【答案】B
【解析】 从左向右结合:(5>3)得1,再计算1>1得0。
18、以下哪个不能用作switch的控制表达式( )
A. char型变量 B. int型变量 C. float型变量 D. enum常量
【答案】C
【解析】 switch不支持浮点类型。
19、若 a=5,执行 if (a = 0) ... 则( )
A. 条件为真 B. 条件为假 C. 编译错误 D. a值不变
【答案】B
【解析】 a=0是赋值表达式,值为0(假),同时a被赋值为0。
20、以下代码片段最终y的值是( )
int x = 3, y;
if (x > 2) y = 10; else y = 20;
A. 10 B. 20 C. 3 D. 未定义
【答案】A
【解析】 3>2成立,y被赋值为10。
二、多选题(本题共5小题,每题4分,共20分)
1、以下属于关系运算符的是( )
A. > B. <= C. == D. !=
【答案】ABCD
【解析】 全部为标准关系运算符。
2、已知 int a=2, b=3;,以下逻辑表达式的值为真的有( )
A. (a++ > 1) && (b++ > 2)
B. (--a == 1) || (b += 2) > 4
C. !(a-b) && (a=0)
D. (a=0) || (b=5) && (a=1)
答案:A、B、D
解析:A中a++ > 1 先取 a=2 比较,2>1 为真,a 自增为 3;由于逻辑与左边为真,继续计算右边 b++ > 2,取 b=3 比较,3>2 为真,b 自增为 4。整个表达式结果为真(1),a=3, b=4。B中--a 先将 a 减 1 得 1,比较 1 == 1 为真;由于逻辑或左边为真,右边 (b += 2) > 4 被短路(不执行),整个表达式结果为真(1),a=1, b仍为3。C中a-b得-1,!(-1)为0(假),逻辑与左边为假,右边 a=0 不执行,整个表达式结果为假(0),a、b 不变(a=2, b=3)。D中运算符优先级 && 高于 ||,表达式等价于 (a=0) || ( (b=5) && (a=1) )。先计算左边 a=0,赋值为 0,结果为 0;再计算右边 (b=5) && (a=1),先赋b=5(非0),再赋 a=1(非0),逻辑与结果为 1;最后 0 || 1 得真(1)。最终 a=1, b=5。
3、关于if语句,正确的说法是( )
A. 可以没有else部分
B. else必须紧跟在if语句块的后面(中间不能有无关语句)
C. if后可以跟复合语句(用{}括起来)
D. 条件表达式可以是任意数据类型
【答案】AC
【解析】 B表述不严谨,else应与对应的if逻辑上紧邻,但中间可隔行;D错,条件需为标量类型(数值/指针),且0为假,非0为真。
4、switch语句中,以下说法正确的是( )
A. case标签必须是常量表达式
B. default子句可以省略
C. break语句可防止“穿透”现象
D. 支持浮点数作为case标签值
【答案】ABC
【解析】 D错误,switch不支持浮点类型。
5、假设a,b,c为正,以下表达式中,逻辑上等价于 a > b && a > c 的有( )
A. (a > b)&&(a > c)
B. !(a <= b || a <= c)
C. a > (b > c ? b : c)
D. a > b || a > c
【答案】ABC
【解析】 B利用德摩根定律变换;C先求b,c最大值再比较,逻辑等价;D是“或”关系,不等价。
三、判断题(本题共10小题,每题2分,共20分)
1、在C语言中,字符型数据(char)可以直接参与关系运算和逻辑运算,其本质是将其ASCII码值作为整数处理。( )
【答案】√
【解析】 char类型在C语言中本质是小整数。例如 'a' > 'A' 是比较它们的ASCII码值(97 > 65),结果为真。这是分支结构中处理字符判断的基础。
2、表达式 if (a = b) 与 if (a == b) 的功能完全相同,都是判断a和b是否相等。( )
【答案】×
【解析】 a = b 是赋值表达式,它将b的值赋给a,并以该值作为条件(若b非0则条件为真);a == b 才是比较运算。
3、在switch语句中,多个case标签可以共用同一组执行语句,此时这些case后面都不需要写break,直到最后一组语句后才写break。( )
【答案】√
【解析】 这是switch语法的合法用法,常用于处理多个值对应同一种逻辑的情况。利用“穿透”特性实现代码复用。
4、逻辑表达式 (a > b) && (c = d) 中,如果 a > b 的结果为假(0),则变量c不会被赋值为 d。( )
【答案】√
【解析】 考察逻辑与 && 的短路特性在副作用上的应用。若左侧为假,右侧表达式根本不会执行,因此 c 的值保持不变。
5、若有定义 int x = 5;,则语句 if (x); printf("Hello"); 中,无论x的值是多少,"Hello" 都会被输出。( )
【答案】√
【解析】 if (x); 末尾的分号表示if语句的主体是一个空语句。printf 是if之后的下一条独立语句,不受if条件控制,必然执行。
6、在switch语句中,case后的常量表达式可以是包含变量的表达式。( )
【答案】×
【解析】 C语言中case标签后必须是整型常量表达式,不能包含变量。
7、表达式 'A' <= ch && ch <= 'Z' 可以正确判断字符变量 ch 是否为大写英文字母。( )
【答案】√
【解析】 这是利用ASCII码连续性的经典写法。不能写成 'A' <= ch <= 'Z',因为那样会先算左边得到0或1,再拿0或1去和'Z'比较,逻辑错误。
8、在嵌套if语句中,如果想让else与外层的if配对,必须使用花括号 {} 将内层的if语句块括起来。( )
【答案】√
【解析】 默认else匹配最近的if。若要改变匹配对象,必须通过 {} 显式界定内层if的范围,使else“跳过”内层if去匹配外层if。
9、switch语句的控制表达式和case标签都可以是负数。( )
【答案】√
【解析】 只要表达式和标签是整型(包括负整数),switch均支持。不仅限于正数或0。
10、逻辑非运算符!作用于一个非零整数时,结果为该整数的相反数。( )
【答案】×
【解析】 逻辑非 ! 的结果只有两种:若操作数为真(非0),结果为 0;若操作数为假(0),结果为 1。
四、填空题(本题共5小题,每题2分,共10分)
1、阅读以下代码,写出输出结果:
int a = 10, b = 20;
if (a > b)
if (a > 5) printf("A");
else printf("B");
else
printf("C");
【答案】C
【解析】 a > b (10>20) 为假,直接执行外层else,输出"C"。内层if不执行。
2、阅读以下代码,写出输出结果:
int n = 2;
switch (n)
{ case 1: printf("A ");
case 1 + 1: printf("B ");
case 3: printf("C "); break;
case 4: printf("D "); break;
default: printf("E "); }
【答案】BC
【解析】程序检查switch(n),即switch(2)。case 1: 不匹配。case 1 + 1: 这是一个常量表达式,计算结果为2。匹配成功!进入case 1+1:执行printf("B ");-> 输出"B "。
末尾没有break。发生穿透,程序继续向下执行下一个 case 的代码,不管下一个 case 的条件是否匹配(此时不再进行条件判断)。进入case 3:执行printf("C ");-> 输出"C "。
遇到break;,跳出 Switch。
3、阅读以下代码,写出输出结果:
int a = 5, b = 10, c = 15;
if (a > b && b > c)
printf("OK");
else if (a < b || b < c)
printf("YES");
else
printf("NO");
【答案】YES
【解析】 a>b假,&&短路,第一条件假;a<b真,||短路,第二条件真,输出"YES"。
4、阅读以下代码,写出最终 y 的值:
int x = 3, y;
switch(x) {
case 1: y = 10; break;
case 2: y = 20; break;
case 3: y = 30;
case 4: y = 40; break;
default: y = 0;
}
【答案】40
【解析】 匹配case 3,y=30;无break,穿透执行case 4,y=40;遇到break跳出。
5、阅读以下代码,写出输出结果:
int a = 0, b = 5;
if (a && (b = 10)) {
printf("%d", b);
} else {
printf("%d", b);
}
【答案】5
【解析】 a为0,&&发生短路,(b=10)不执行,b保持原值5。条件为假,执行else,输出5。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
《编程语言基础——C语言》高等教育出版社(第5版)
第二章 分支结构程序设计 章节过关卷(二)(解析版)
考试时间:90分钟 满分:100分
姓名 班级 学号
一、单项选择题(本题共25小题,每题2分,共50分)
1、下列运算符中,优先级最高的是( )
A. == B. && C. ! D. ||
2、在C语言中,表示“逻辑与”的运算符是( )
A. & B. && C. || D. !
3、若 int a = 5, b = 0;,则表达式 a && b 的值是( )
A. 0 B. 1 C. 5 D. 真
4、以下if语句写法正确的是( )
A. if {a > b} (...) B. if a > b { ... }
C. if (a > b) ... D. if (a > b); { ... }
5、执行以下代码,输出结果是( )
int x = 10;
if (x > 5)
printf("A");
else
printf("B");
A. A B. B C. AB D. 无输出
6、以下嵌套if语句中,else匹配的是( )
if (a > b)
if (c > d)
printf("1");
else
printf("2");
A. 外层if B. 内层if C. 两者都匹配 D. 编译错误
7、switch语句中,case标签后的表达式必须是( )
A. 变量 B. 浮点常量
C. 整型或字符型常量 D. 字符串
8、以下switch代码的输出结果是( )
int k = 1;
switch(k)
{ case 1: k++; printf("A");
case 2: if(k == 2) printf("B");
case 3: printf("C"); break;
default: printf("D"); }
printf("%d", k);}
A. ABC2 B. AB2 C. AC2 D. BC2
9、用于处理多分支选择且效率较高的语句是( )
A. if-else嵌套 B. switch C. while D. for
10、阅读以下 C 语言代码片段,其最终的输出结果是( )
int a = 5, b = 10, c;
c = a > b ? a : b + 1;
printf("c = %d", c);
}
A. c = 5 B. c = 6 C. c = 10 D. c = 11
11、x与y的函数关系如下:
x
y=
x<0
x–1
x=0
x
x>0
x+1
下面程序段中能正确表示上面关系的是( )。
A.y = x + 1; B.y = x -1; C.if (x < = 0) D.y = x;
if (x >=0) if (x ! = 0) if (x< 0) if (x < =0)
if (x = = 0) if (x > 0) y = x–1; if (x < 0)
y = x; y = x + 1; else y = x; y = x – 1;
else y = x–1; else y = x; else y = x+1; else y= x+1;
12、以下程序的运行结果是( )。
main()
{ int m = 5;
if (m ++ > 5) printf("%d
", m);
else printf("%d
",m --);
}
A.4 B.5 C.6 D.7
13、在C语言中,关系运算的结果类型是( )
A. bool B. char C. int D. float
【答案】C
【解析】 C语言没有bool类型,关系运算结果为int型(0或1)。
14、以下代码中,当x=0时输出( )
if (x) printf("Yes"); else printf("No");
A. Yes B. No C. 编译错误 D. 运行错误
15、switch语句中,default子句的作用是( )
A. 必须存在 B. 处理未匹配任何case的情况
C. 只能放在最后 D. 可以省略break
16、逻辑与运算符 && 的短路特性是指( )
A. 左操作数为真时,不计算右操作数
B. 左操作数为假时,不计算右操作数
C. 右操作数为真时,不计算左操作数
D. 左右操作数都必须计算
17、表达式 5 > 3 > 1 的值是( )
A. 1 B. 0 C. 真 D. 假
18、以下哪个不能用作switch的控制表达式( )
A. char型变量 B. int型变量 C. float型变量 D. enum常量
19、若 a=5,执行 if (a = 0) ... 则( )
A. 条件为真 B. 条件为假 C. 编译错误 D. a值不变
20、以下代码片段最终y的值是( )
int x = 3, y;
if (x > 2) y = 10; else y = 20;
A. 10 B. 20 C. 3 D. 未定义
二、多选题(本题共5小题,每题4分,共20分)
1、以下属于关系运算符的是( )
A. > B. <= C. == D. !=
2、已知 int a=2, b=3;,以下逻辑表达式的值为真的有( )
A. (a++ > 1) && (b++ > 2)
B. (--a == 1) || (b += 2) > 4
C. !(a-b) && (a=0)
D. (a=0) || (b=5) && (a=1)
3、关于if语句,正确的说法是( )
A. 可以没有else部分
B. else必须紧跟在if语句块的后面(中间不能有无关语句)
C. if后可以跟复合语句(用{}括起来)
D. 条件表达式可以是任意数据类型
4、switch语句中,以下说法正确的是( )
A. case标签必须是常量表达式
B. default子句可以省略
C. break语句可防止“穿透”现象
D. 支持浮点数作为case标签值
5、假设a,b,c为正,以下表达式中,逻辑上等价于 a > b && a > c 的有( )
A. (a > b)&&(a > c)
B. !(a <= b || a <= c)
C. a > (b > c ? b : c)
D. a > b || a > c
三、判断题(本题共10小题,每题2分,共20分)
1、在C语言中,字符型数据(char)可以直接参与关系运算和逻辑运算,其本质是将其ASCII码值作为整数处理。( )
2、表达式 if (a = b) 与 if (a == b) 的功能完全相同,都是判断a和b是否相等。( )
3、在switch语句中,多个case标签可以共用同一组执行语句,此时这些case后面都不需要写break,直到最后一组语句后才写break。( )
4、逻辑表达式 (a > b) && (c = d) 中,如果 a > b 的结果为假(0),则变量c不会被赋值为 d。( )
5、若有定义 int x = 5;,则语句 if (x); printf("Hello"); 中,无论x的值是多少,"Hello" 都会被输出。( )
6、在switch语句中,case后的常量表达式可以是包含变量的表达式。( )
7、表达式 'A' <= ch && ch <= 'Z' 可以正确判断字符变量 ch 是否为大写英文字母。( )
8、在嵌套if语句中,如果想让else与外层的if配对,必须使用花括号 {} 将内层的if语句块括起来。( )
9、switch语句的控制表达式和case标签都可以是负数。( )
10、逻辑非运算符!作用于一个非零整数时,结果为该整数的相反数。( )
四、填空题(本题共5小题,每题2分,共10分)
1、阅读以下代码,写出输出结果:
int a = 10, b = 20;
if (a > b)
if (a > 5) printf("A");
else printf("B");
else
printf("C");
2、阅读以下代码,写出输出结果:
int n = 2;
switch (n)
{ case 1: printf("A ");
case 1 + 1: printf("B ");
case 3: printf("C "); break;
case 4: printf("D "); break;
default: printf("E "); }
3、阅读以下代码,写出输出结果:
int a = 5, b = 10, c = 15;
if (a > b && b > c)
printf("OK");
else if (a < b || b < c)
printf("YES");
else
printf("NO");
4、阅读以下代码,写出最终 y 的值:
int x = 3, y;
switch(x) {
case 1: y = 10; break;
case 2: y = 20; break;
case 3: y = 30;
case 4: y = 40; break;
default: y = 0;
}
5、阅读以下代码,写出输出结果:
int a = 0, b = 5;
if (a && (b = 10)) {
printf("%d", b);
} else {
printf("%d", b);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$