GESP 客观题评测系统

试卷解析 · 理解每一步

2024-03-Level-2

2024-03-Level-2

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

单选题

第 1 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 B流程图阅读与分支逻辑
思路与推导
  1. 根据流程图,输入分数 85。判断 85 >= 90 为假;进入下一个分支判断 85 >= 80 为真,执行输出“良好”的操作。

第 2 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 BC++ 变量命名规则
思路与推导
  1. C++ 标识符必须以字母或下划线开头,不能以数字开头。选项 B 中的 2_from 以数字 2 开头,违反了命名规则。

第 3 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 BC++ 关键字与程序结构
思路与推导
  1. if、else 和 switch 都是用于实现分支结构的关键字。return 用于从函数中返回结果,不属于分支结构关键字。

第 4 题(单选题,2 分)

下列说法错误的是?()

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

正确答案C

解析详情
答案 CC++ 循环结构与关键字
思路与推导
  1. 标准 C++(直到 C++20)中没有名为 foreach 的关键字。虽然 C++11 引入了基于范围的 for 循环(range-based for),但其关键字仍为 for。

第 5 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 B标准库函数与算术表达式
思路与推导
  1. 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。

第 6 题(单选题,2 分)

下面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循环结构与复合赋值
思路与推导
  1. 初始 m = (5-1)*2 = 8,循环执行 n-1=2 次。第 1 次:m = (8-1)*2 = 14;第 2 次:m = (14-1)*2 = 26。最终输出 26。

第 7 题(单选题,2 分)

下面 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

解析详情
答案 Dwhile 循环与因数判断
思路与推导
  1. 代码寻找不大于 n 且能整除 n 的最大的完全平方数。当 i=1, 3, 9 时,i*i 分别为 1, 9, 81,均能整除 81。循环结束时 result 更新为 81。

第 8 题(单选题,2 分)

下面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贪心算法逻辑模拟
思路与推导
  1. 初始 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,循环结束。

第 9 题(单选题,2 分)

下面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循环模拟与周期性逻辑
思路与推导
  1. 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。

第 10 题(单选题,2 分)

以下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 语句
思路与推导
  1. 只要发现一个数位不是偶数,就可以确定“并非所有数位都是偶数”,此时应立即修改 Flag 并跳出循环以节省时间。横线处应填 break。

第 11 题(单选题,2 分)

有句俗话叫“三天打渔,两天晒网”。如果小杨前三天打渔,后两天晒网,一直重复这个过程,以下程序代码用于判断,第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周期性逻辑判断
思路与推导
  1. 5 天一个周期,前 3 天(n%5 为 1, 2, 3)打鱼,后 2 天(n%5 为 4, 0)晒网。因此当 i == 4 或 i == 0 时输出“晒网”。

第 12 题(单选题,2 分)

一个数的所有数字倒序排列后这个数的大小保持不变,这个数就是回文数,比如 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数值倒置算法
思路与推导
  1. 将一个数倒置的标准算法是:不断取出原数 n 的个位(n%10),并将其累加到新数 a 的末尾(a = a * 10 + n % 10)。

第 13 题(单选题,2 分)

给定两个整数 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嵌套循环与图形输出
思路与推导
  1. 图形由 n 段组成,每段开头是一个 +,后面跟 k 个 -(注意代码中 j 从 1 到 k-1 只有 k-1 个,但最后外层补了一个 +)。要实现连续输出不换行,应使用 cout << '+'。

第 14 题(单选题,2 分)

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

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

正确答案C

解析详情
答案 C计算机基础常识
思路与推导
  1. 鸿蒙(HarmonyOS)是华为开发的操作系统。此题考查基本科技常识。

第 15 题(单选题,2 分)

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

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

正确答案C

解析详情
答案 C计算机历史贡献
思路与推导
  1. 王选先生的重大贡献是发明了汉字激光照排系统。此题为常识题。

判断题

第 1 题(判断题,2 分)

如果有以下C++代码:

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

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

正确答案错误

解析详情
答案 错误类型转换与变量赋值
思路与推导
  1. t 是 int 类型变量,在执行 t = int(s) + 10 后,t 的值只能是整数。int(18.5) 为 18,18 + 10 = 28。输出结果为 28,而非 28.5。

第 2 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确C++ 标识符大小写敏感性
思路与推导
  1. C++ 是一种大小写敏感(case-sensitive)的语言,因此 Xyz、xYz、xyZ 会被视为三个完全独立的标识符。

第 3 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误关系运算符优先级与结合性
思路与推导
  1. 表达式 (8 < 9 < 10) 的计算顺序是 (8 < 9) < 10。8 < 9 为真(1),接着计算 1 < 10 为真(1)。虽然逻辑上结果为真,但在默认情况下 cout 输出布尔值 true 为 1,而非字符串 "true"。

第 4 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误for 循环执行过程分析
思路与推导
  1. 循环 i 从 0 开始,每次加 2,依次取 0, 2, 4, ..., 98。当 i 达到 100 时不满足条件退出。i 的取值序列中并不包含 99。

第 5 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误字符字面量与多字节常量
思路与推导
  1. float(2022) 结果为 2022.0。'2022' 是多字符常量,其值由编译器决定,通常不等于整数 2022。单引号只能用于单个字符。

第 6 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确字符编码与数学计算
思路与推导
  1. A 是 65,则 C 是 67。int('C') = 67。abs(-5.8) = 5.8。67 + 5.8 = 72.8。计算无误。

第 7 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误布尔类型转换规则
思路与推导
  1. 在 C++ 中,数值转换为 bool 时,非 0 值转换为 true,只有 0 转换为 false。-1 是非 0 值,因此 bool(-1) 为 true。

第 8 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误数学函数定义域与方程求解
思路与推导
  1. 方程 sqrt(a) == abs(a) 的解。当 a=0 时,0==0;当 a=1 时,1==1。因此 a 的值不一定只能是 0。此外,a 为负数时 sqrt 无意义。

第 9 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确计算机基础(网络设备)
思路与推导
  1. 具有设置 IP 和接入 WiFi 能力的“WiFi 盒子”通常集成了路由器的网络地址转换(NAT)和数据包转发功能。

第 10 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确循环结构等价转换
思路与推导
  1. for 循环和 while 循环在逻辑表达上是完备且等价的,可以互相重写。