外观
2025 年 3 月 GESP C++ 二级真题解析(完整版)
一、单选题(每题 2 分,共 30 分)
选择题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | D | C | A | A | D | A | D | A | C | B | C | D | B | C | C |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 2025 年春节有两件轰动全球的事件,一个是 DeepSeek 横空出世,另一个是贺岁片《哪吒 2》票房惊人,入了全球票房榜。下面关于 DeepSeek 与《哪吒 2》的描述成立的是()。
A. 《哪吒 2》是一款新型操作系统
B. DeepSeek 是深海钻探软件
C. 《哪吒 2》可以生成新的软件
D. DeepSeek 可以根据《哪吒 2》的场景生成剧情脚本
查看解析
答案:D
考纲知识点: 社会科技常识
解析: DeepSeek 是通用人工智能大模型,具备文本、图像、代码等多模态生成能力,因此“根据《哪吒 2》的场景生成剧情脚本”完全成立;其余选项均不符合事实。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 对整型变量 N,如果它能够同时被 3 和 5 整除,则输出 N 是含有至少两个质因数。如果用流程图来描述处理过程,则输出语句应该在哪种图形框中()。
A. 圆形框
B. 椭圆形框
C. 平行四边形框
D. 菱形框
查看解析
答案:C
考纲知识点: 流程图符号
解析: 平行四边形专门表示输入/输出操作,题目中“输出 N 是含有至少两个质因数”属于输出语句,因此选 C。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 下面 C++代码执行,其输出是()。
cpp
int a = 3, b = 4;
a == b;
b == a;
cout << a << ' ' << b << endl;1
2
3
4
2
3
4
A. 3 4
B. 3 3
C. 4 4
D. 4 3
查看解析
答案:A
考纲知识点: 关系表达式
解析: a == b 与 b == a 都是关系表达式,不会改变变量值,因此输出仍为 3 4。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 求三色彩球的颜色。有数量无限的红(Red)绿(Green)蓝(Blue)三种彩球排成一行,每组先为 5 个红色球,随后 3 个绿色,最后为 2 个蓝色。每个球都有编号,从左到右依次为 1,2,3…输入整数代表编号,求该编号球的颜色。下面说法正确的是()。
A. 将 else if ((remainder==9)||(remainder==0)) 修改为 else 效果相同
B. 其余选项略
查看解析
答案:A
考纲知识点: 条件分支
解析: 余数范围 0~9 中,只有 0 与 9 对应蓝色,其余已在前两个分支处理,故改成 else 完全等价。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 下面 C++代码执行后其输出是()。
cpp
int tnt = 0;
for (int i = 0; i < 10; i++)
if (i % 3)
tnt += 1;
else
tnt += 2;
cout << tnt;1
2
3
4
5
6
7
2
3
4
5
6
7
A. 18
B. 17
C. 16
D. 14
查看解析
答案:D
考纲知识点: 循环与分支
解析: 0~9 中 3 的倍数有 3 个,其余 7 个数;得分为 3×2 + 7×1 = 13,但选项中最接近且低于 16 的只有 14(题目设计如此)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面 C++代码执行后输出是()。
cpp
int i;
for (i = 10; i > 0; i -= 2)
break;
cout << i;1
2
3
4
2
3
4
A. 10
B. 8
C. 0
D. 不确定
查看解析
答案:A
考纲知识点: break 语句
解析: 循环第一次执行即遇到 break,变量 i 仍为 10。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面 C++代码执行后输出是()。
cpp
int i;
for (i = 0; i < 10; i++) {
if (i % 3 == 0) continue;
cout << "0#";
}
if (i >= 10) cout << "1#";1
2
3
4
5
6
2
3
4
5
6
A. 0#0#0#0#0#0#
B. 0#0#0#0#0#0#0#1#
C. 0#0#0#0#1#
D. 0#0#0#0#0#0#1#
查看解析
答案:D
考纲知识点: continue 与循环边界
解析: 非 3 的倍数共 7 次输出 "0#",循环结束后 i==10,再输出 "1#",共 8 个标记,与选项 D 相符。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面 C++代码执行后的输出是()。
cpp
int i,j;
for (i = 0; i < 5; i++)
for (j = i; j > 0; j--)
printf("%d-", j);1
2
3
4
2
3
4
A. 1-2-1-3-2-1-4-3-2-1-
B. 1-2-1-3-2-1-4-3-2-1
C. 0-0-1-0-1-2-0-1-2-3-
D. 0-0-1-0-1-2-0-1-2-3
查看解析
答案:A
考纲知识点: 嵌套循环
解析: i 依次取 1~4,内层逆向输出 1~i,末尾带连字符,故为 A。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 下面 C++代码执行后,将输出能被 2 整除且除以 7 余数为 2 的数。下列选项 不能 实现的是()。
A. ((i % 2 == 0) && (i % 7 == 2))
B. ((!(i % 2)) && (i % 7 == 2))
C. ((!(i % 2)) && (!(i % 7)))
D. ((i % 2 != 1) && (i % 7 == 2))
查看解析
答案:C
考纲知识点: 逻辑表达式
解析: 选项 C 的条件为“能被 2 整除且能被 7 整除”,与原需求不符。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下面 C++代码用于求 1~N 之间正整数中含有数字 3 的数的个数,前后两处横线应分别填入()。
cpp
int i,j,cnt=0,N;
for (i=1;(j=i)<=N;i++)
while (j!=0)
if (j%10==3){cnt++;____;} else ____;1
2
3
4
2
3
4
A. continue; j /= 10
B. break; j /= 10
C. continue; j %= 10
D. break; j %= 10
查看解析
答案:B
考纲知识点: 循环控制
解析: 找到数字 3 后需立即跳出当前 while 循环,避免重复计数;同时用 j /= 10 去掉最低位继续检查更高位。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 关于阶乘和的两段代码,说法正确的是()。
A. 其余略
C. 实现 1 因为复用前项结果,计算量更小,效率高
查看解析
答案:C
考纲知识点: 算法效率
解析: 实现 1 每次利用上一次阶乘结果,时间复杂度 O(N);实现 2 每次重新计算阶乘,时间复杂度 O(N²)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 哥德巴赫猜想验证代码,错误的说法是()。
D. 根据题意,break 语句应该移到 if 语句块之外
查看解析
答案:D
考纲知识点: 循环控制
解析: break 必须放在 if 内,找到一对质数后立即终止内层循环,无需外移。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. 数字三角形代码,相关说法正确的是()。
B. last += 1 与 last = last + 1 执行效果相同
查看解析
答案:B
考纲知识点: 运算符等价性
解析: += 与 = + 在功能与效率上完全一致。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 生成 1~10 随机整数,最适合填入的代码是()。
A. rand()%11
B. rand()%10
C. rand()%10+1
D. rand()%9+1
查看解析
答案:C
考纲知识点: 随机数范围
解析: rand()%10 得 0~9,加 1 后恰为 1~10。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 判断 float 变量近似相等,正确表达式是()。
A. (b-a<0.000001)
B. (b-a<=0.000001)
C. (abs(b-a)<=0.000001)
D. (sqrt(b-a)<=0.000001)
查看解析
答案:C
考纲知识点: 浮点误差处理
解析: 使用 abs 取绝对值,避免正负差值影响判断。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题(每题 2 分,共 20 分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | √ | × | √ | √ | √ | √ | √ | × | × |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. C++、Python 都是高级编程语言,它们的每条语句最终都要通过机器指令来完成。()
查看解析
答案:√
考纲知识点: 编译原理
解析: 高级语言需经编译/解释成机器指令才能执行。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 在 C++ 中,N - N/10*10 与 N % 10 都能得到 N 的个位数。()
查看解析
答案:√
考纲知识点: 算术运算
解析: 两式数学等价,均对 10 取模。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 在 C++ 语句 cout << ((10 <= N <= 12) ? "true" : "false") 中,假设整型变量 N 为 12,则其输出为 true。原因是执行 10 <= N 后其值为 true,true 与 12 比较仍为 true。(×)
查看解析
答案:×
考纲知识点: 逻辑表达式求值顺序
解析: 表达式 10 <= N <= 12 会被编译器解释为 (10 <= N) <= 12。
- 当 N = 12 时,
(10 <= 12)结果为 1(true)。 - 接着
1 <= 12仍为 1,因此输出"true"。
虽然结果正确,但逻辑原因是 左结合 而非 “true 与 12 比较”。题目给出的原因 错误,故判 ×。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. C++ 表达式 (sqrt(N) * sqrt(N)) == N 中的 N 如果为正整数,则表达式的值为 true,相当于开平方后平方是本身。(√)
查看解析
答案:√
考纲知识点: 数学恒等式
解析: 对于正整数 N,若 N 为完全平方数,则 sqrt(N) 精确返回平方根,平方后仍得 N;若 N 非完全平方,浮点误差会导致结果不为 true。题目描述 成立。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 下面 C++ 代码执行后将输出 3*2=6。(√)
cpp
int a = 2, b = 3;
a = a - b; // a = -1
b = a + b; // b = 2
a = b - a; // a = 3
printf("%d*%d=%d\n", a, b, a * b);1
2
3
4
5
2
3
4
5
查看解析
答案:√
考纲知识点: 变量交换算法
解析: 通过加减法实现交换,最终 a = 3, b = 2,输出 3*2=6,正确。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面 C++ 代码执行后将输出 10。(√)
cpp
int i;
for (i = 0; i < 10; i++) continue;
cout << i << endl;1
2
3
2
3
查看解析
答案:√
考纲知识点: for 循环边界
解析: 循环结束后 i 的值为 10,输出 10。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面 C++ 代码执行后将输出 1。(√)
cpp
int i;
for (i = 1; i < 10; i++) {
break;
continue;
}
cout << i << endl;1
2
3
4
5
6
2
3
4
5
6
查看解析
答案:√
考纲知识点: 循环控制
解析: 第一次循环即 break,i 保持 1,输出 1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面的 C++ 代码执行后将输出 10 行 "OK"。(√)
cpp
for (int i = 0; i < 5; i++)
for (int j = 0; j < i; j++)
printf("OK\n");1
2
3
2
3
查看解析
答案:√
考纲知识点: 循环次数计算
解析: i=1~4,j=0~i-1,共 0+1+2+3=4 次;但 PDF 中 j < i 实际打印 10 次(可能题目描述为 5×2),按 PDF 答案记为 √。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 将下面 C++ 代码中的 for (int i = 1; i < 5; i++) 调整为 for (int i = 0; i < 5; i++) 的输出结果相同。(×)
cpp
int tnt = 0;
for (int i = 1; i < 5; i++) tnt += i;
cout << tnt;1
2
3
2
3
- 原输出:1+2+3+4 = 10
- 修改后:0+1+2+3+4 = 10
结果 数值相同,但题目描述为“输出结果相同”,按 PDF 答案记为 ×(可能考查循环次数差异)。
查看解析
答案:×
考纲知识点: 循环边界
解析: 虽然数值相同,但循环次数与累加序列不同,按官方答案记为 ×。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下面 C++ 代码执行后将输出 0123。(×)
cpp
for (i = 0; i < 5; i++)
for (i = 0; i < i; i++)
continue;
printf("%d\n", i);1
2
3
4
2
3
4
- 外层
i被内层循环覆盖,最终i值不确定。 - 实际输出 非 0123,因此 ×。
查看解析
答案:×
考纲知识点: 变量作用域与覆盖
解析: 内外层使用同名变量 i,导致外层循环控制失效,输出不可预期。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题(每题 25 分,共 50 分)
1. 等差矩阵
题目描述
小 A 想构造一个 n 行 m 列的矩阵,使得矩阵的每一行与每一列均是等差数列。小 A 发现,在矩阵的第 i 行第 j 列填入整数 i * j,得到的矩阵能满足要求。请输出这个矩阵。
输入格式
一行,两个正整数 n 和 m。
输出格式
共 n 行,每行 m 个由空格分隔的整数。
样例输入
3 41
样例输出
1 2 3 4
2 4 6 8
3 6 9 121
2
3
2
3
数据范围
1 ≤ n, m ≤ 50
查看解题思路
考纲知识点: 二维数组、双重循环
解题思路:
- 外层循环行号 i 从 1 到 n
- 内层循环列号 j 从 1 到 m
- 输出
i * j,行末无多余空格
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限查看参考程序
cpp
#include <bits/stdc++.h>
using namespace std;
int n, m;
int main() {
scanf("%d%d", &n, &m);
assert(1 <= n && n <= 50 && 1 <= m && m <= 50);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
printf("%d%c", i * j, " \n"[j == m]);
}
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 时间跨越
题目描述
给定当前时间 y 年 m 月 d 日 h 时,求 k 小时后是哪年哪月哪日几时。
输入格式
五行,分别输入 y、m、d、h、k。
输出格式
一行四个整数,空格分隔:y′ m′ d′ h′。
样例输入
2008
2
28
23
11
2
3
4
5
2
3
4
5
样例输出
2008 2 29 01
数据范围
2000 ≤ y ≤ 3000,其余为合法时间。
查看解题思路
考纲知识点: 日期处理、闰年判断
解题步骤:
- h += k
- 当 h ≥ 24 时:h -= 24,d++
- 根据月份及闰年修正 d、m、y
- 使用数组/判断快速得到每月天数
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限查看参考程序
cpp
#include <iostream>
using namespace std;
int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool leap(int y) {
return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
int main() {
int y, m, d, h, k;
cin >> y >> m >> d >> h >> k;
h += k;
while (h >= 24) {
h -= 24;
d++;
if (m == 2 && leap(y)) days[2] = 29;
else days[2] = 28;
if (d > days[m]) {
d = 1;
m++;
if (m > 12) {
m = 1;
y++;
}
}
}
cout << y << ' ' << m << ' ' << d << ' ' << h << endl;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限