GESP 客观题评测系统

2023-03-Level-2

2023-03-Level-2

试卷解析总览,可直接查看每题答案与解析。

单选题(每题 2 分)

1 题(单选题

以下存储器中的数据不会受到附近强磁场干扰的是()。

A.
硬盘
B.
U盘
C.
内存
D.
光盘

正确答案D

解析详情

【答案】D

【考点】存储介质特性

【解析】 光盘用激光读取凹凸信息,不靠磁性记录数据,所以附近强磁场不会把它的内容扰乱。硬盘属于磁记录介质,题目考查的“不受强磁场干扰”应选光盘。

【易错点】 不要把“能存数据”都当成同一种存储原理,磁存储和光存储差别很大。

2 题(单选题

下列流程图,属于计算机的哪种程序结构?()。

题 2 流程图
A.
顺序结构
B.
循环结构
C.
分支结构
D.
数据结构

正确答案C

解析详情

【答案】C

【考点】流程图程序结构

【解析】 图中先判断“是否按下空格键”,再根据“是/否”分别执行不同操作,最后两条路径汇合结束。这种先判断条件再分两路执行的结构就是分支结构。

【易错点】 看到流程图里有多条箭头,不一定就是循环,关键要看是否回到前面重复执行。

3 题(单选题

下列关于 C++ 语言的叙述,不正确的是()。

A.
double 类型的变量占用内存的大小是浮动的
B.
bool 类型的变量占用 1 字节内存
C.
int 类型变量的取值范围不是无限的
D.
char 类型的变量有 256 种取值

正确答案A

解析详情

【答案】A

【考点】C++ 基本数据类型

【解析】 `double` 的存储大小在具体实现中通常是固定的,不是“浮动的”。`bool` 常见占 1 字节,`int` 取值范围有限,`char` 一般有 256 种取值,所以不正确的是 A。

【易错点】 不要把“浮点数”误解成“占用内存大小浮动”,浮点数浮动的是表示范围和精度。

4 题(单选题

下列关于 C++ 语言的叙述,不正确的是()。

A.
变量定义后,可以使用赋值语句改变它的值
B.
变量定义时,必须指定类型
C.
变量名必须为合法标识符
D.
合法标识符可以以数字开始

正确答案D

解析详情

【答案】D

【考点】标识符命名规则

【解析】 C++ 的合法标识符不能以数字开头,只能以下划线或字母开头,所以 D 错。其余三项都是变量和标识符的基本规则。

【易错点】 “可以包含数字”和“可以以数字开头”不是一回事。

5 题(单选题

以下哪个不是 C++ 语言的关键字?

A.
return
B.
max
C.
else
D.
case

正确答案B

解析详情

【答案】B

【考点】关键字与普通标识符

【解析】 `return`、`else`、`case` 都是 C++ 关键字,`max` 只是常见函数名,不是语言保留字,所以选 B。

【易错点】 常见库函数或算法名字用得很多,但并不等于关键字。

6 题(单选题

以下哪个不是 C++ 语言的运算符?

A.
\=
B.
/=
C.
-=
D.
!=

正确答案A

解析详情

【答案】A

【考点】C++ 运算符识别

【解析】 按原题人工确认的文本,A 选项是字面量 `\=`,它不是 C++ 的合法运算符;`/=`、`-=`、`!=` 都是合法运算符。因此“不属于运算符”的是 A。

【易错点】 这题要按题面字面判断,不能把 `\=` 自动当成转义后的 `=`。

7 题(单选题

如果 a 和 b 都是 char 类型的变量,下列哪个语句不符合 C++ 语法?

A.
b = a + 1;
B.
b = a + '1';
C.
b = 'a'++;
D.
b = a++;

正确答案C

解析详情

【答案】C

【考点】自增运算与左值

【解析】 `'a'` 是字符常量,不是变量,不能对常量执行 `++`,所以 `b = 'a'++;` 不合法。其余几项都把字符变量或字符常量参与普通表达式运算,语法上成立。

【易错点】 `++` 只能作用在可修改的变量上,不能作用在字面常量上。

8 题(单选题

如果 a、b、c 和 d 都是 int 类型的变量,则下列哪个表达式能够正确计算它们的平均值?

A.
(a+b+c+d)/4(a + b + c + d) / 4
B.
(a+b+c+d)%4(a + b + c + d) \% 4
C.
(a+b+c+d)/4.0(a + b + c + d) / 4.0
D.
(a+b+c+d)%4.0(a + b + c + d) \% 4.0

正确答案C

解析详情

【答案】C

【考点】整型与浮点型除法

【解析】 平均值要允许出现小数,前半部分 `a+b+c+d` 是整数,若再除以 `4` 会做整除。只有除以 `4.0` 才会转成浮点除法,得到真正的平均值,所以选 C。

【易错点】 很多人只看公式形式对不对,忽略了 `/ 4` 和 `/ 4.0` 的结果类型不同。

9 题(单选题

如果 a 为 char 类型的变量,且 a 的值为 '2',则下列哪条语句执行后,a 的值不会变为 '3'?

A.
a = a + 1;
B.
a + 1;
C.
a = 1 + a;
D.
++a;

正确答案B

解析详情

【答案】B

【考点】表达式求值与赋值

【解析】 `a + 1;` 只是计算出一个结果,但没有把结果再存回 `a`,所以 `a` 仍保持字符 `'2'`。其余三项都会把新值写回 `a`,最终变成 `'3'`。

【易错点】 表达式有结果,不代表变量本身已经被修改。

10 题(单选题

如果 a 为 int 类型的变量,且 a 的值为 9,则执行 a -= 3; 之后,a 的值会是()。

A.
3
B.
6
C.
9
D.
12

正确答案B

解析详情

【答案】B

【考点】复合赋值运算

【解析】 `a -= 3` 等价于 `a = a - 3`。原来 `a = 9`,执行后变成 `6`,所以选 B。

【易错点】 不要把 `-=` 看成单独赋值成 3,它表示“先减去,再赋回”。

11 题(单选题

如果 a 和 b 均为 int 类型的变量,下列表达式能正确判断“a 等于 0 或 b 等于 0”的是()

A.
(!a) || (!b)
B.
(a = b = 0)
C.
(a == 0) & (b == 0)
D.
(a == 0) - (b == 0) == 0

正确答案A

解析详情

【答案】A

【考点】逻辑或与条件判断

【解析】 `!a` 在 `a==0` 时为真,`!b` 在 `b==0` 时为真,所以 `(!a) || (!b)` 正好表示“a 等于 0 或 b 等于 0”。B 是赋值表达式,C 实际表示“且”,D 的逻辑含义也不对。

【易错点】 按位与 `&` 和逻辑与 `&&`、逻辑或 `||` 容易混淆,题意是“或”时要特别注意。

12 题(单选题

如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a 是小写字母”?

A.
a <= a <= z
B.
a - 'a' <= 'z' - 'a'
C.
'a' <= a <= 'z'
D.
a >= 'a' && a <= 'z'

正确答案D

解析详情

【答案】D

【考点】字符范围判断

【解析】 判断小写字母要同时满足 `a >= 'a'` 和 `a <= 'z'`,D 正好完整表达了这个闭区间。A、C 这种连写比较在 C++ 中会先算左边真假,再与右边比较,不能表示区间判断。

【易错点】 数学里常写 `'a' <= a <= 'z'`,但在 C++ 里必须拆成两个比较再用 `&&` 连接。

13 题(单选题

在下列代码的横线处填写(),使得输出是50 1050\ 10

#include <iostream>
using namespace std;

int main() {
    int a = 10, b = 50;
    ; // 在此处填入代码
    b -= a;
    a += b;
    cout << a << " " << b << endl;
    return 0;
}
A.
a -= b
B.
a += b
C.
a = b - a
D.
a = b

正确答案C

解析详情

【答案】C

【考点】代数变形与变量跟踪

【解析】 先填 `a = b - a`,则 `a = 40`。接着 `b -= a` 得到 `b = 10`,再执行 `a += b` 得到 `a = 50`,最终输出正好是 `50 10`,所以选 C。

【易错点】 这题不能只看第一步,要把后面两次赋值连着算完。

14 题(单选题

在下列代码的横线处填写(),可以使得输出是 5。

#include <iostream>
using namespace std;

int main() {
    int cnt = 0;
    for (char ch = '1'; ch <= '9'; ch++)
        if (____) // 在此处填入代码
            cnt++;
    cout << cnt << endl;
    return 0;
}
A.
ch < '5'
B.
ch >= 5
C.
ch >= '4'
D.
ch % 2 == 1

正确答案D

解析详情

【答案】D

【考点】字符编码与循环计数

【解析】 字符 `'1'` 到 `'9'` 的编码连续,其中 `'1'、'3'、'5'、'7'、'9'` 的编码都是奇数,所以条件 `ch % 2 == 1` 会命中 5 次。A 只统计 4 个字符,C 会统计 6 个字符。

【易错点】 这里循环变量是字符,不是整数 1 到 9,但字符编码仍可参与取模。

15 题(单选题

执行以下 C++ 语言程序后,输出结果是()。

#include <iostream>
using namespace std;

int main() {
    int n = 17;
    bool isprime = true;
    for (int i = 2; i <= n; i++)
        if (n % i == 0)
            isprime = false;
    cout << isprime << endl;
    return 0;
}
A.
false
B.
true
C.
0
D.
1

正确答案C

解析详情

【答案】C

【考点】布尔输出与循环条件

【解析】 当循环到 `i = 17` 时,`17 % 17 == 0`,于是 `isprime` 被改成 `false`。`cout` 输出布尔值时默认显示为 `0/1`,因此这里输出的是 `0`,对应选项 C。

【易错点】 不要只凭“17 是素数”就选 true,程序本身把 `i` 枚举到了 `n`,逻辑已经写错了。

判断题(每题 2 分)

1 题(判断题

明明和笑笑在“小庙会”上分别抽到一个 4GB 和 4096MB 的 U 盘,容量大的盘是笑笑的()。

正确答案错误

解析详情

【答案】错误

【考点】存储单位换算

【解析】 `1GB = 1024MB`,所以 `4GB = 4096MB`,两个 U 盘容量其实一样大,不存在谁更大。题干说笑笑的更大,因此错误。

【易错点】 看到单位不同就容易误判大小,先统一成同一单位再比较。

2 题(判断题

IPv4 的地址通常用“点分十进制”的表示形式,形如(a.b.c.d),其中 a、b、c、d 都是12551 \sim 255之间的十进制整数()。

正确答案错误

解析详情

【答案】错误

【考点】IPv4 地址表示

【解析】 IPv4 的每一段范围是 `0` 到 `255`,不是 `1` 到 `255`。像 `0.0.0.0` 这类地址中就包含 0,所以题干错误。

【易错点】 不要把“通常写成十进制”误记成“每段都从 1 开始”。

3 题(判断题

在 C++ 语言中,一个程序不能有多个 main 函数。

正确答案正确

解析详情

【答案】正确

【考点】C++ 程序入口

【解析】 一个完整的 C++ 程序只能有一个程序入口,也就是一个 `main` 函数。若出现多个 `main`,程序无法按规则链接运行。

【易错点】 可以有很多普通函数,但程序入口函数 `main` 只能有一个。

4 题(判断题

在 C++ 语言中,标识符中可以有下划线 `___`,但不能以下划线 `___` 开头。

正确答案错误

解析详情

【答案】错误

【考点】标识符命名规则

【解析】 C++ 标识符里可以出现下划线,也可以以下划线开头,所以题干后半句不对。像 `_x` 这种名字在语法上是允许的。

【易错点】 “建议少用前导下划线”和“语法上不允许”不是同一个概念。

5 题(判断题

如果 a 是 int 类型的变量,而且值为 1,则表达式 'a' 的值为 '1'。

正确答案错误

解析详情

【答案】错误

【考点】字符常量与变量名

【解析】 `'a'` 表示字符常量,值是字母 `a`,和变量 `a` 当前是否等于 1 没有关系。题干把字符常量和变量名混为一谈,所以错误。

【易错点】 加单引号后就是字符字面量,不再表示变量本身。

6 题(判断题

在 `if ... else` 语句中,`else` 子句可以嵌套 `if ... else` 语句,但 `if` 子句不可以,因为会造成二义性。

正确答案错误

解析详情

【答案】错误

【考点】if-else 嵌套

【解析】 `if` 子句和 `else` 子句里都可以继续嵌套 `if ... else`。所谓二义性问题靠“else 总是匹配最近的 if”来解决,所以题干说法错误。

【易错点】 不要把“存在悬挂 else 规则”误解成“if 子句里不能再嵌套 if”。

7 题(判断题

`while` 语句的循环体至少会执行一次。

正确答案错误

解析详情

【答案】错误

【考点】while 与 do-while 区别

【解析】 `while` 是先判断条件、再决定是否进入循环;如果初始条件就不成立,循环体一次也不会执行。至少执行一次的是 `do ... while`。

【易错点】 `while` 和 `do ... while` 的最大区别就是判断发生在循环前还是循环后。

8 题(判断题

C++ 语言中 `>=` 是运算符,但 `=>` 不是。

正确答案正确

解析详情

【答案】正确

【考点】关系运算符

【解析】 `>=` 是 C++ 中合法的“大于等于”运算符,而 `=>` 不是 C++ 里的运算符写法,因此题干正确。

【易错点】 符号顺序不能颠倒,运算符是固定写法。

9 题(判断题

如果 a 为 char 类型的变量,且取值为小写字母,则执行语句 `a = a - 'a' + 'A';` 后,a 的值会变为与原值对应的大写字母。

正确答案正确

解析详情

【答案】正确

【考点】大小写字母转换

【解析】 小写字母减去 `'a'` 得到 0 到 25,再加上 `'A'` 就会落到对应的大写字母编码区间,所以该语句能把小写字母转成对应的大写字母。

【易错点】 这个写法只适用于英文字母字符,不能随意推广到其他字符。

10 题(判断题

表达式(10.0/2)(10.0 / 2)的计算结果为 5.0,且结果类型为 double。

正确答案正确

解析详情

【答案】正确

【考点】浮点除法结果类型

【解析】 `10.0` 是 `double`,与整数 `2` 做除法时会进行浮点运算,结果是 `5.0`,类型仍为 `double`。所以题干正确。

【易错点】 只要表达式里有浮点数参与,结果往往就不是整型除法。