GESP 客观题评测系统

试卷解析 · 理解每一步

2023-03-Level-2

2023-03-Level-2

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

单选题

第 1 题(单选题,2 分)

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

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

正确答案D

解析详情
答案 D存储介质特性
思路与推导
  1. 光盘用激光读取凹凸信息,不靠磁性记录数据,所以附近强磁场不会把它的内容扰乱。硬盘属于磁记录介质,题目考查的“不受强磁场干扰”应选光盘。

第 2 题(单选题,2 分)

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

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

正确答案C

解析详情
答案 C流程图程序结构
思路与推导
  1. 图中先判断“是否按下空格键”,再根据“是/否”分别执行不同操作,最后两条路径汇合结束。这种先判断条件再分两路执行的结构就是分支结构。

第 3 题(单选题,2 分)

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

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

正确答案A

解析详情
答案 AC++ 基本数据类型
思路与推导
  1. `double` 的存储大小在具体实现中通常是固定的,不是“浮动的”。`bool` 常见占 1 字节,`int` 取值范围有限,`char` 一般有 256 种取值,所以不正确的是 A。

第 4 题(单选题,2 分)

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

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

正确答案D

解析详情
答案 D标识符命名规则
思路与推导
  1. C++ 的合法标识符不能以数字开头,只能以下划线或字母开头,所以 D 错。其余三项都是变量和标识符的基本规则。

第 5 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 B关键字与普通标识符
思路与推导
  1. `return`、`else`、`case` 都是 C++ 关键字,`max` 只是常见函数名,不是语言保留字,所以选 B。

第 6 题(单选题,2 分)

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

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

正确答案A

解析详情
答案 AC++ 运算符识别
思路与推导
  1. 按原题人工确认的文本,A 选项是字面量 `\=`,它不是 C++ 的合法运算符;`/=`、`-=`、`!=` 都是合法运算符。因此“不属于运算符”的是 A。

第 7 题(单选题,2 分)

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

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

正确答案C

解析详情
答案 C自增运算与左值
思路与推导
  1. `'a'` 是字符常量,不是变量,不能对常量执行 `++`,所以 `b = 'a'++;` 不合法。其余几项都把字符变量或字符常量参与普通表达式运算,语法上成立。

第 8 题(单选题,2 分)

如果 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整型与浮点型除法
思路与推导
  1. 平均值要允许出现小数,前半部分 `a+b+c+d` 是整数,若再除以 `4` 会做整除。只有除以 `4.0` 才会转成浮点除法,得到真正的平均值,所以选 C。

第 9 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 B表达式求值与赋值
思路与推导
  1. `a + 1;` 只是计算出一个结果,但没有把结果再存回 `a`,所以 `a` 仍保持字符 `'2'`。其余三项都会把新值写回 `a`,最终变成 `'3'`。

第 10 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 B复合赋值运算
思路与推导
  1. `a -= 3` 等价于 `a = a - 3`。原来 `a = 9`,执行后变成 `6`,所以选 B。

第 11 题(单选题,2 分)

如果 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逻辑或与条件判断
思路与推导
  1. `!a` 在 `a==0` 时为真,`!b` 在 `b==0` 时为真,所以 `(!a) || (!b)` 正好表示“a 等于 0 或 b 等于 0”。B 是赋值表达式,C 实际表示“且”,D 的逻辑含义也不对。

第 12 题(单选题,2 分)

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

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

正确答案D

解析详情
答案 D字符范围判断
思路与推导
  1. 判断小写字母要同时满足 `a >= 'a'` 和 `a <= 'z'`,D 正好完整表达了这个闭区间。A、C 这种连写比较在 C++ 中会先算左边真假,再与右边比较,不能表示区间判断。

第 13 题(单选题,2 分)

在下列代码的横线处填写(),使得输出是 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代数变形与变量跟踪
思路与推导
  1. 先填 `a = b - a`,则 `a = 40`。接着 `b -= a` 得到 `b = 10`,再执行 `a += b` 得到 `a = 50`,最终输出正好是 `50 10`,所以选 C。

第 14 题(单选题,2 分)

在下列代码的横线处填写(),可以使得输出是 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. 字符 `'1'` 到 `'9'` 的编码连续,其中 `'1'、'3'、'5'、'7'、'9'` 的编码都是奇数,所以条件 `ch % 2 == 1` 会命中 5 次。A 只统计 4 个字符,C 会统计 6 个字符。

第 15 题(单选题,2 分)

执行以下 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布尔输出与循环条件
思路与推导
  1. 当循环到 `i = 17` 时,`17 % 17 == 0`,于是 `isprime` 被改成 `false`。`cout` 输出布尔值时默认显示为 `0/1`,因此这里输出的是 `0`,对应选项 C。

判断题

第 1 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误存储单位换算
思路与推导
  1. `1GB = 1024MB`,所以 `4GB = 4096MB`,两个 U 盘容量其实一样大,不存在谁更大。题干说笑笑的更大,因此错误。

第 2 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误IPv4 地址表示
思路与推导
  1. IPv4 的每一段范围是 `0` 到 `255`,不是 `1` 到 `255`。像 `0.0.0.0` 这类地址中就包含 0,所以题干错误。

第 3 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确C++ 程序入口
思路与推导
  1. 一个完整的 C++ 程序只能有一个程序入口,也就是一个 `main` 函数。若出现多个 `main`,程序无法按规则链接运行。

第 4 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误标识符命名规则
思路与推导
  1. C++ 标识符里可以出现下划线,也可以以下划线开头,所以题干后半句不对。像 `_x` 这种名字在语法上是允许的。

第 5 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误字符常量与变量名
思路与推导
  1. `'a'` 表示字符常量,值是字母 `a`,和变量 `a` 当前是否等于 1 没有关系。题干把字符常量和变量名混为一谈,所以错误。

第 6 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误if-else 嵌套
思路与推导
  1. `if` 子句和 `else` 子句里都可以继续嵌套 `if ... else`。所谓二义性问题靠“else 总是匹配最近的 if”来解决,所以题干说法错误。

第 7 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误while 与 do-while 区别
思路与推导
  1. `while` 是先判断条件、再决定是否进入循环;如果初始条件就不成立,循环体一次也不会执行。至少执行一次的是 `do ... while`。

第 8 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确关系运算符
思路与推导
  1. `>=` 是 C++ 中合法的“大于等于”运算符,而 `=>` 不是 C++ 里的运算符写法,因此题干正确。

第 9 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确大小写字母转换
思路与推导
  1. 小写字母减去 `'a'` 得到 0 到 25,再加上 `'A'` 就会落到对应的大写字母编码区间,所以该语句能把小写字母转成对应的大写字母。

第 10 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确浮点除法结果类型
思路与推导
  1. `10.0` 是 `double`,与整数 `2` 做除法时会进行浮点运算,结果是 `5.0`,类型仍为 `double`。所以题干正确。