GESP 客观题评测系统

2024-03-Level-2

2024-03-Level-2

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

单选题(每题 2 分)

1 题(单选题

下列流程图的输出结果是?()

Image
A.
优秀
B.
良好
C.
不及格
D.
没有输出

正确答案B

解析详情

【答案】B 【考点】流程图阅读与分支逻辑 【解析】根据流程图,输入分数 85。判断 85 >= 90 为假;进入下一个分支判断 85 >= 80 为真,执行输出“良好”的操作。 【易错点】未能正确追踪流程图的分支路径。

2 题(单选题

以下选项中不符合 C++变量命名规则的是?()

A.
student
B.
2_from
C.
to
D.
Text

正确答案B

解析详情

【答案】B 【考点】C++ 变量命名规则 【解析】C++ 标识符必须以字母或下划线开头,不能以数字开头。选项 B 中的 2_from 以数字 2 开头,违反了命名规则。 【易错点】记错标识符允许使用的字符组合或开头限制。

3 题(单选题

以下选项中,不能用于表示分支结构的C++保留字是?()

A.
switch
B.
return
C.
else
D.
if

正确答案B

解析详情

【答案】B 【考点】C++ 关键字与程序结构 【解析】if、else 和 switch 都是用于实现分支结构的关键字。return 用于从函数中返回结果,不属于分支结构关键字。 【易错点】混淆程序流程控制关键字的功能。

4 题(单选题

下列说法错误的是?()

A.
while 循环满足循环条件时不断地运行,直到指定的条件不满足为止
B.
if 语句通常用于执行条件判断
C.
在C++中可以使用 foreach 循环
D.
break 和 continue 语句都可以用在 for 循环和 while 循环中

正确答案C

解析详情

【答案】C 【考点】C++ 循环结构与关键字 【解析】标准 C++(直到 C++20)中没有名为 foreach 的关键字。虽然 C++11 引入了基于范围的 for 循环(range-based for),但其关键字仍为 for。 【易错点】将其他编程语言(如 Java 或 C#)的关键字带入 C++。

5 题(单选题

下列4个表达式中,答案不是整数8的是?()

A.
abs(-8)
B.
min(max(8, 9), 10)
C.
int(8.88)
D.
sqrt(64)

正确答案B

解析详情

【答案】B 【考点】标准库函数与算术表达式 【解析】A. abs(-8) = 8;B. max(8, 9) = 9,min(9, 10) = 9,结果为 9;C. int(8.88) 强制转换结果为 8;D. sqrt(64) 结果为 8.0(类型为 double,但数值是 8)。故 B 的结果不是 8。 【易错点】对 min/max 嵌套计算时的结果跟踪出现偏差。

6 题(单选题

下面C++代码执行后的输出是?()

int n, a, m, i;
n = 3, a = 5;
m = (a - 1) * 2;
for (i = 0; i < n - 1; i++)
    m = (m - 1) * 2;
cout << m;
A.
8
B.
14
C.
26
D.
50

正确答案C

解析详情

【答案】C 【考点】循环结构与复合赋值 【解析】初始 m = (5-1)*2 = 8,循环执行 n-1=2 次。第 1 次:m = (8-1)*2 = 14;第 2 次:m = (14-1)*2 = 26。最终输出 26。 【易错点】计算循环次数或中间迭代值时出现错误。

7 题(单选题

下面 C++ 代码执行后的输出是? ()

int n,i,result;
n = 81;
i = 1, result = 1;
while (i * i <= n){
    if (n % (i * i) == 0)
        result = i * i;
    i += 1;
}
cout << result;
A.
16
B.
36
C.
49
D.
81

正确答案D

解析详情

【答案】D 【考点】while 循环与因数判断 【解析】代码寻找不大于 n 且能整除 n 的最大的完全平方数。当 i=1, 3, 9 时,i*i 分别为 1, 9, 81,均能整除 81。循环结束时 result 更新为 81。 【易错点】忽略了 while 循环中最后一次满足条件的 result 更新。

8 题(单选题

下面C++代码执行后的输出是?()

int s,t,ans;
s = 2, t = 10;
ans = 0;
while (s != t){
    if (t % 2 == 0 && t / 2 >= s)
        t /= 2;
    else
        t -= 1;
    ans += 1;
}
cout << ans;
A.
2
B.
3
C.
4
D.
5

正确答案B

解析详情

【答案】B 【考点】贪心算法逻辑模拟 【解析】初始 s=2, t=10。第 1 步:t 是偶数且 10/2 >= 2,执行 t /= 2,t 变为 5,ans=1;第 2 步:t=5 不满足条件,执行 t -= 1,t 变为 4,ans=2;第 3 步:t=4 满足条件,执行 t /= 2,t 变为 2,ans=3。此时 s == t,循环结束。 【易错点】模拟过程中未能严格遵守 if-else 的条件判断。

9 题(单选题

下面C++代码执行后的输出是?()

int n, masks, days, cur;
n = 17, masks = 10, days = 0;
cur = 2;
while (masks != n){
    if (cur == 0 || cur == 1)
        masks += 7;
    masks -= 1;
    days += 1;
    cur = (cur + 1) % 7;
}
cout << days;
A.
5
B.
6
C.
7
D.
8

正确答案C

解析详情

【答案】C 【考点】循环模拟与周期性逻辑 【解析】masks 从 10 开始,目标是 17。cur 变化周期为 0-6。第 1-5 天(cur 为 2,3,4,5,6):masks 每天减 1,降至 5。第 6,7 天(cur 为 0,1):每天加 7 再减 1,即加 6。第 6 天 masks = 5+6 = 11;第 7 天 masks = 11+6 = 17。满足条件退出,days 为 7。 【易错点】对一周内哪些天会增加 masks 判断错误。

10 题(单选题

以下C++代码判断一个正整数N的各个数位是否都是偶数。如果都是,则输出“是”,否则输出“否”。例如N=2024时输出“是”。则横线处应填入( )。

int N, Flag;
cin >> N;
Flag = true;
while (N != 0){
    if (N % 2 != 0){
        Flag = false;
        // _____
    }
    else
        N /= 10;
}
if(Flag == true)
    cout << "是";
else
    cout << "否";
A.
break
B.
continue
C.
N = N / 10
D.
N = N % 10

正确答案A

解析详情

【答案】A 【考点】循环优化与 break 语句 【解析】只要发现一个数位不是偶数,就可以确定“并非所有数位都是偶数”,此时应立即修改 Flag 并跳出循环以节省时间。横线处应填 break。 【易错点】误填 continue 导致无效的后续循环,或填入错误的 N 更新语句。

11 题(单选题

有句俗话叫“三天打渔,两天晒网”。如果小杨前三天打渔,后两天晒网,一直重复这个过程,以下程序代码用于判断,第n天小杨是在打鱼还是晒网,横线处应填写?()

int n,i;
cin >> n;
i = n % 5;
if (_____) // 在此处填写代码
    cout << "晒网";
else
    cout << "打鱼";
A.
i == 0
B.
i == 4
C.
i == 0 && i == 4
D.
i == 0 || i == 4

正确答案D

解析详情

【答案】D 【考点】周期性逻辑判断 【解析】5 天一个周期,前 3 天(n%5 为 1, 2, 3)打鱼,后 2 天(n%5 为 4, 0)晒网。因此当 i == 4 或 i == 0 时输出“晒网”。 【易错点】逻辑运算符 && 与 || 的误用,或者余数为 0 的情况处理错误。

12 题(单选题

一个数的所有数字倒序排列后这个数的大小保持不变,这个数就是回文数,比如 101 与 6886 都是回文数,而 100 不是回文数。以下程序代码用于判断一个数是否为回文数,横线处应填写?()

int n,a,k;
cin >> n;
a = 0;
k = n;
while (n > 0){
    a = ___; // 在此处填写代码
    n /= 10;
}
if (a == k)
    cout << "是回文数";
else
    cout << "不是回文数";
A.
10 * a + n % 10
B.
a + n % 10
C.
10 * a + n / 10
D.
a + n / 10

正确答案A

解析详情

【答案】A 【考点】数值倒置算法 【解析】将一个数倒置的标准算法是:不断取出原数 n 的个位(n%10),并将其累加到新数 a 的末尾(a = a * 10 + n % 10)。 【易错点】公式写错,例如误将取余记为除法。

13 题(单选题

给定两个整数 n 与 k,打印出一个栅栏图形,这个栅栏应该分成 n 段,段与段之间的间隔为 +,段内的填充为 k 个 -。形如 n = 5,k = 6 时,图形如下:

+-----+-----+-----+-----+-----+

以下程序代码用于绘制该图形,横线处应填写?()

int n, k, i, j;
n = 5, k = 6;
for (i = 0; i < n; i++) {
    // 在此处填写代码
    for (j = 1; j < k; j++)
        cout << '-';
}
cout << '+';
A.
cout << '+' << endl;
B.
cout << '+' << ' ' << endl;
C.
cout << '+';
D.
cout << '+' << '';

正确答案C

解析详情

【答案】C 【考点】嵌套循环与图形输出 【解析】图形由 n 段组成,每段开头是一个 +,后面跟 k 个 -(注意代码中 j 从 1 到 k-1 只有 k-1 个,但最后外层补了一个 +)。要实现连续输出不换行,应使用 cout << '+'。 【易错点】在不需要换行的地方添加了 endl。

14 题(单选题

小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是。()

A.
小程序
B.
计时器
C.
操作系统
D.
神话人物

正确答案C

解析详情

【答案】C 【考点】计算机基础常识 【解析】鸿蒙(HarmonyOS)是华为开发的操作系统。此题考查基本科技常识。 【易错点】对常见科技名词定义混淆。

15 题(单选题

中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是()。

A.
制造自动驾驶汽车
B.
创立培训学校
C.
发明汉字激光照排系统
D.
成立方正公司

正确答案C

解析详情

【答案】C 【考点】计算机历史贡献 【解析】王选先生的重大贡献是发明了汉字激光照排系统。此题为常识题。 【易错点】记忆模糊导致选错贡献。

判断题(每题 2 分)

1 题(判断题

如果有以下C++代码:

double s;
int t;
s = 18.5;
t = int(s) + 10;

那么 cout << t 的结果为 28.5。

正确答案错误

解析详情

【答案】错误 【考点】类型转换与变量赋值 【解析】t 是 int 类型变量,在执行 t = int(s) + 10 后,t 的值只能是整数。int(18.5) 为 18,18 + 10 = 28。输出结果为 28,而非 28.5。 【易错点】忽略变量 t 声明的 int 类型限制。

2 题(判断题

Xyz,xYz,xyZ 是三个不同的变量。

正确答案正确

解析详情

【答案】正确 【考点】C++ 标识符大小写敏感性 【解析】C++ 是一种大小写敏感(case-sensitive)的语言,因此 Xyz、xYz、xyZ 会被视为三个完全独立的标识符。 【易错点】混淆大小写敏感与不敏感的语言特性。

3 题(判断题

cout << (8 < 9 < 10) 的输出结果为 true。

正确答案错误

解析详情

【答案】错误 【考点】关系运算符优先级与结合性 【解析】表达式 (8 < 9 < 10) 的计算顺序是 (8 < 9) < 10。8 < 9 为真(1),接着计算 1 < 10 为真(1)。虽然逻辑上结果为真,但在默认情况下 cout 输出布尔值 true 为 1,而非字符串 "true"。 【易错点】混淆数学上的连不等式与编程语言中的运算顺序,以及输出格式。

4 题(判断题

for (i = 0; i < 100; i += 2); 语句中变量i的取值范围是0到99。

正确答案错误

解析详情

【答案】错误 【考点】for 循环执行过程分析 【解析】循环 i 从 0 开始,每次加 2,依次取 0, 2, 4, ..., 98。当 i 达到 100 时不满足条件退出。i 的取值序列中并不包含 99。 【易错点】将步长为 2 的循环误认为遍历了范围内所有整数。

5 题(判断题

C++中 cout << float(2022) 与 cout << float('2022') 运行后的输出结果均为2022。

正确答案错误

解析详情

【答案】错误 【考点】字符字面量与多字节常量 【解析】float(2022) 结果为 2022.0。'2022' 是多字符常量,其值由编译器决定,通常不等于整数 2022。单引号只能用于单个字符。 【易错点】分不清单引号(字符)和双引号(字符串)的区别。

6 题(判断题

已知 A 的ASCII码值为65,表达式 int('C') + abs(-5.8) 的值为72.8。

正确答案正确

解析详情

【答案】正确 【考点】字符编码与数学计算 【解析】A 是 65,则 C 是 67。int('C') = 67。abs(-5.8) = 5.8。67 + 5.8 = 72.8。计算无误。 【易错点】记错字母 ASCII 码 or abs 函数的功能。

7 题(判断题

bool() 函数用于将给定参数或表达式转换为布尔类型。语句 bool(-1) 返回的是 false 值。()

正确答案错误

解析详情

【答案】错误 【考点】布尔类型转换规则 【解析】在 C++ 中,数值转换为 bool 时,非 0 值转换为 true,只有 0 转换为 false。-1 是非 0 值,因此 bool(-1) 为 true。 【易错点】误认为只有正数才是 true。

8 题(判断题

如果变量 a 的值使得C++表达式 sqrt(a) == abs(a),则 a 的值为0。()

正确答案错误

解析详情

【答案】错误 【考点】数学函数定义域与方程求解 【解析】方程 sqrt(a) == abs(a) 的解。当 a=0 时,0==0;当 a=1 时,1==1。因此 a 的值不一定只能是 0。此外,a 为负数时 sqrt 无意义。 【易错点】漏掉方程的一个显著解(如 1)。

9 题(判断题

小杨今年春节回奶奶家了,奶奶家的数字电视要设置ip地址并接入到WIFI盒子才能收看节目,那这个WIFI盒子具有路由器的功能。()

正确答案正确

解析详情

【答案】正确 【考点】计算机基础(网络设备) 【解析】具有设置 IP 和接入 WiFi 能力的“WiFi 盒子”通常集成了路由器的网络地址转换(NAT)和数据包转发功能。 【易错点】对网络设备功能理解不深。

10 题(判断题

任何一个 for 循环都可以转化为等价的 while 循环()。

正确答案正确

解析详情

【答案】正确 【考点】循环结构等价转换 【解析】for 循环和 while 循环在逻辑表达上是完备且等价的,可以互相重写。 【易错点】主观认为某种循环结构更高级或不可替代。