乐于分享
好东西不私藏

2026 年 6 月 GESP C++ 二级真题 · 逐题详解

2026 年 6 月 GESP C++ 二级真题 · 逐题详解

2026 年 6 月 GESP C++ 二级真题 · 逐题详解

一、单选题(每题 2 分,共 30 分)

参考答案:C B D C B B A A A D A B D B A


第 1 题|答案 C

学校组织参观未来农场,智能温室中湿度传感器连续检测土壤湿度变化,并把检测到的数据实时发送给中央控制器。这里的湿度传感器类似于计算机系统中的哪一类组件?

传感器把外界物理信号(湿度)转换成数据"采集并送入"系统,这正是输入设备的角色(类比键盘、鼠标、麦克风)。处理器负责运算、存储器负责记忆、输出设备负责呈现结果——都不符合"采集并送入"这个动作。选 C。


第 2 题|答案 B

二手电脑老旧,运行仿真系统时频繁弹出"系统内存不足"警告导致卡顿。计划通过增加物理内存解决,应购买哪种硬件?

"物理内存"对应的硬件就是内存条(RAM)。机械硬盘/移动硬盘是外部存储(扩大的是容量不是内存),显卡管图形。题眼是"内存不足"→加内存条。选 B。别把"硬盘空间"和"内存"混为一谈,这是常见误区。


第 3 题|答案 D

float a = 3 + 3.5;cout << a;

右边 3 + 3.5 只要有一个是小数,整个表达式按浮点运算,结果 6.5,赋给 float 完全合法,输出 6.5。代码不报错,排除 A、B;结果不是 6,排除 C。破除误区:整数 + 小数 = 小数,不会被截断成 6。选 D。


第 4 题|答案 C

与 not (x > 5 or y <= 10) 等价的是?

用德摩根定律:not (A or B) = (not A) and (not B)

  • not (x > 5) → x <= 5
  • not (y <= 10) → y > 10

合起来就是 x <= 5 and y > 10。选 C。考点:德摩根定律——非"或"变"且",且每个条件各自取反。


第 5 题|答案 B

执行 cout << (2.5 + 2.25) << ' ' << (2.2 + 2.1) 输出 4.75 4.300000000000001,原因最可能是?

计算机用二进制存浮点数,有些小数(如 2.2、2.1)无法精确表示,运算就会累积出微小误差。这不是 + 运算符时对时错(排除 A),也不是不能用于浮点数(排除 C),更不是 cout 输不了长数(排除 D)。选 B。这是浮点数的固有特性,一级/二级常考。


第 6 题|答案 B

int n; cin >> n;for (int i = n; i > 0; i--) {for (int j = 0; j < i; j++)cout << j + 1 << ' ';cout << endl;}

输入 4,外层 i 依次取 4、3、2、1,每行打印 1 2 ... i

1 2 3 41 2 31 21

最后一行是 i=1 时,只打印 1。选 B。陷阱:问的是"最后一行"不是第一行。


第 7 题|答案 A

int tnt = 0;for (int i = 1; i < 5; i += 3) {   // i 取 1、4for (int j = 0; j < i; j++)        tnt += 1;cout << tnt << "#";}cout << tnt;

i += 3 让 i 只取 1 和 4:

  • i=1:内层跑 1 次,tnt=1,打印 1#
  • i=4:内层跑 4 次,tnt=1+4=5,打印 5#
  • i=7 不满足 <5,循环结束
  • 最后 cout << tnt 输出 5(**注意末尾没有 #**)

结果 1#5#5。选 A。陷阱在于 i += 3 跳过了 2、3,以及最后一句没带 #


第 8 题|答案 A

int i;for (i = -2; i < 2; i++)if (not i % 3 == 0)cout << i << "#";cout << i;

先明确优先级:not 比 % 和 == 都高,所以 not i % 3 == 0 实为 ((not i) % 3) == 0

  • i=-2:not(-2)=0,0%3=0,==0 真 → 打印 -2#
  • i=-1:not(-1)=0,同上真 → -1#
  • i=0:not(0)=1,1%3=1,==0 假 → 跳过
  • i=1:not(1)=0,真 → 1#
  • i=2 不满足 <2,结束,cout << i 输出 2

结果 -2#-1#1#2。选 A。**考点:not 是单目运算符,优先级高于 %**,非 0 取非得 0、0 取非得 1。


第 9 题|答案 A

int cnt = 0, i, j;for (i = 0; i < 3; i++) {    j = i;while (j) { cnt += 1; j -= 1; }}cout << i << ' ' << j << ' ' << cnt;

外层 i=0,1,2,每轮 j=i 后用 while 把 j 减到 0,同时 cnt 累加 i 次:

  • i=0:cnt+0
  • i=1:cnt+1
  • i=2:cnt+2 → cnt=3

循环结束后 i=3(跳出时的值)、j=0(每轮都减到 0)、cnt=3。输出 3 0 3。选 A。要点:循环结束后 i 是让条件不成立的那个值。


第 10 题|答案 D

int count = 0, i, j;for (i = 1; i < 4; i++)for (j = 0; j < i; j++) {if (j % 3 != 0continue;        count += 1;break;    }cout << i << ' ' << j << ' ' << count;

关键:内层第一次 j=0,0%3=0!=0 为假,不 continue,于是 count+=1 后立即 break。所以每轮外层内层都只跑 j=0 一次就 break,j 始终停在 0。

  • i=1,2,3 各让 count+1 → count=3
  • 外层结束 i=4,内层 j 停在 0

输出 4 0 3。选 D。陷阱:continue 从没被触发过(j=0 时条件为假),break 才是真正的控制者。


第 11 题|答案 A

int num = 1;for (int i = 0; i < 35; i++) {cout << num << " ";if (num ___ 10)  num ___ 2;else             num ___ 1;}

输出规律:1 2 ... 10 11 然后跳回 5,再 5 6 ... 11 循环。说明 num 一直增长,超过某值就"折回 5"。

填 >/=+=

  • 当 num > 10(即 num=11)时 num /= 211/2=5整数除法),正好跳回 5!
  • 否则 num += 1 正常加一

完全吻合。选 A。难点在于**用整数除法 11/2=5 实现"折回"**。C、D 里的 =+ 不是自增(会被拆成 = 和正号),是陷阱。


第 12 题|答案 B

for (int i = 1; i < N + 1; i++) {for (int j = 1; j < N - i + 1; j++) cout << 0;for (int k = 1; k < 2 * i; k++)cout << (k <= i ? k : 2 * i - k);for (int j = 1; j < N - i + 1; j++) cout << 0;cout << endl;}

输入 10 要输出金字塔状数字图形(每行左右补 0,中间是 1 2 …i…2 1 的山峰)。要生成该图形,横线处应填 i == j or i == 1 or j == 1 or i == N or j == N边框 + 对角线)。选 B。(此题为图形匹配题,核心是识别"边框条件用 or 连接",用 and 会一个格子都填不出。)


第 13 题|答案 D

int tnt = 0, cnt = 0;while (1) {int score; cin >> score;if (score == -1break;    tnt += score; cnt += 1;}cout << tnt / cnt;

corner case(边角案例)最应该是哪个?

如果一上来直接输入 -1,则循环立即 break,cnt 仍为 0,最后 tnt / cnt 是除以 0,导致运行错误。这正是典型的边角案例。选 D。A(连等赋值合法)、B(有 break 不会死循环)、C(提示语无关对错)都不是 corner case。考点:除零风险


第 14 题|答案 B

for (int i = 1; i < N + 1; i++) {for (int j = 1; j < N + 1; j++)if (________) cout << "1 ";elsecout << "0 ";cout << endl;}

目标图形:四条边框全是 1,外加一条主对角线(左上到右下)是 1,其余是 0。

  • 边框:i==1 or j==1 or i==N or j==N
  • 对角线:i==j

用 or 连接:i == j or i == 1 or j == 1 or i == N or j == N。选 B。A、D 用 and(永远同时不成立,画不出);C 把边界写成 0 和 N+1(越界了)。


第 15 题|答案 A("上述代码能完成题目要求")

8 位评委打分(0~10 整数),去掉一个最高分、一个最低分再求和。判断说法正确的是?

逐项审代码:

  • max_score = 0, min_score = 100:因为分数是 0~10,初始最高设 0、最低设 100 能保证被正确覆盖,合理。所以 B(把 min 改成 0)错误——那样最低分永远算成 0。
  • max_score < score / min_score > score:用严格 </> 更新极值,正确,不必改成 <=/>=,所以 C 错。
  • total_score = total_score - max_score - min_score:这行本身逻辑正确,能达到预期,所以 D 的"不能达到预期"错误。

因此代码本身就能完成题目要求,选 A。考点:极值初始化的边界选择 + 去头去尾求和的正确写法。


二、判断题(每题 2 分,共 20 分)

参考答案:✓ ✓ ✓ ✓ ✗ ✗ ✗ ✓ ✓ ✓


第 1 题

AI 眼镜(智能眼镜)内置操作系统,支持 Wi-Fi/蓝牙联网,具备查询、通信能力,考场禁带合理。表述正确。


第 2 题

cout << (not ('5' % 2 == 0) == ((not'5' % 2) == 0));

'5' 的 ASCII 是 53。

  • 左边 not ('5' % 2 == 0)53%2=11==0 为假,not 假 = 1
  • 右边 (not '5' % 2) == 0not 优先级高于 %,即 (not 53) % 2 = 0 % 2 = 00==0 = 1
  • 最后 1 == 1 = 1

输出 1,正确。✓ 考点:not 的优先级高于 %==


第 3 题

int(3.5) 强制转换为 3(直接截断小数部分,非四舍五入),3 * 2 = 6。输出 6,正确。✓


第 4 题

for (int i = 1; i < 10; i += 3) {   // i 取 1、4、7if (not i % 3break;cout << i << "-";}

not i % 3 = (not i) % 3。i 取 1、4、7 时 not i 都是 0,0%3=0 为假,break 永不触发,逐个打印 1-4-7-。输出 1-4-7-,正确。✓(i=10 不满足 <10,正常结束。)


第 5 题

int start_num = 1, end_num = N + 1, i;if (N < 0) start_num = N, end_num = 0;for (i = start_num; i < end_num; i++) cout << i << " ";cout << endl << ((i - 1) == abs(N)) << endl;
  • N > 0:打印 1…N 共 N 个数,结束时 i=N+1,(i-1)==abs(N) → N==N 为 1,末尾输出 1 ✓
  • N < 0(如 N=-3):打印 -3、-2、-1,结束时 i=0,(i-1)==abs(N) → -1 == 3 为 0,末尾输出 0,不是 1

题目说"最后输出 1"对负数不成立,所以说法错误。✗ 考点:别漏掉 N 为负这个边角情况


第 6 题

int cnt = 0, i;for (i = 0; i < 10; i++) {for (int j = 0; j < i; j++) cnt += 1;break;      // 第一轮就跳出}cout << i;

外层 i=0 时,内层 j<0 一次都不跑,紧接着 break 直接跳出外层。i 仍是 0,输出 0,不是 9。✗ 陷阱:break 在外层循环体内,第一圈就结束了。


第 7 题

for (int i = 0; i < N; i++)for (int j = -i; j < i; j++) cnt += 1;cout << cnt;

输入 10,内层 j 从 -i 到 i-1,共 2i 次。累加 2i(i=0…9)= 2×(0+1+…+9) = 2×45 = 90,不是 100。✗ 考点:从 -i 到 i-1 的个数是 2i,等差求和。


第 8 题

while (i < 3) { j=0;while (j < 3) { if (i + j >= 3) count += 1; j += 1; }    i += 1;}

统计 i、j 各取 0~2 时满足 i+j>=3 的组合:(1,2)(2,1)(2,2) 共 3 个。输出 3,正确。✓


第 9 题

int i = 0, Nbase = 1, rst = 0;while (N != 0) {    rst = rst + N % 10 * Nbase;    N /= 10, Nbase *= 10;    i += 1;}cout << rst;

看似"逐位取出再拼回"。以 123 为例:

  • 取个位 3,rst = 0 + 3×1 = 3
  • 取 2,rst = 3 + 2×10 = 23
  • 取 1,rst = 23 + 1×100 = 123

每一位都乘回它原来的权重,所以拼出来还是原数 123。输出等于输入的正整数,正确。✓ 考点:数位拆分与还原,权重 Nbase 与拆分同步增长。


第 10 题

for (int i = 1; i < n + 1; i++) {for j: 打印 (n-i) 个前导 0for k = 1..2i-1: 打印 k<=i ? k : 2i-k   // 1 2 …i…2 1for j: 打印 (n-i) 个后缀 0}

输入 5,正好生成题给的对称"数字菱形":每行两侧补 0,中间是先升后降的山峰。图形匹配,正确。✓


三、编程题(每题 25 分,共 50 分)

编程题 1:完全平方数计数

题意:给定 l ≤ r1 ≤ l ≤ r ≤ 2000),求 [l, r] 内有多少个完全平方数。

思路:不要去逐个判断 l~r 每个数是不是完全平方数(慢且容易写错),而是枚举底数 i,看 i*i 是否落在 [l, r] 区间内。i 从 1 开始,只要 i*i <= r 就继续;若同时 i*i >= l,计数加一。

#include<iostream>usingnamespacestd;intmain(){int ans = 0, l, r;cin >> l >> r;for (int i = 1; i * i <= r; ++i)   // 枚举底数,i*i 不超过 rif (i * i >= l) ans++;         // 落在 [l, r] 内就计数cout << ans << endl;return0;}

样例l=1, r=21 → 完全平方数有 1、4、9、16 共 4 个。

考点:① 枚举平方而非枚举原数(把"判断是不是平方"转化为"生成所有平方",更快更稳);② 循环终止条件 i*i <= r;③ 区间双边界判断 l <= i*i <= r。这是二级典型的"换个角度枚举"思维。


编程题 2:菱形

题意:给定 n3 ≤ n ≤ 15),在 (2n-1)×(2n-1) 的网格中画边长为 n 的菱形,边上的格子用 +,空白用 .

思路:菱形的四条边是四条斜线,用坐标 (i, j)(都从 1 到 2n-1)刻画:

  • 左上边 + 右下边i + j == n + 1(左上)或 i + j == 3n - 1(右下)——这两条是"反斜线",行列和为定值。
  • 右上边 + 左下边i - j == n - 1(左下)或 j - i == n - 1(右上)——这两条是"正斜线",行列差为定值。

满足任一条件的格子打 +,否则打 .

#include<iostream>usingnamespacestd;intmain(){int n;cin >> n;for (int i = 1; i <= 2 * n - 1; ++i) {for (int j = 1; j <= 2 * n - 1; ++j) {if (i + j == n + 1 || i + j == 3 * n - 1)      // 反斜线两条边cout << '+';elseif (i - j == n - 1 || j - i == n - 1)     // 正斜线两条边cout << '+';elsecout << '.';        }cout << '\n';    }return0;}

样例(n=4,网格 7×7):

...+.....+.+...+...+.+.....+.+...+...+.+.....+...

考点:① 用行列关系刻画斜线——i+j 定值是反斜线、i-j 定值是正斜线,这是画图形题的核心工具;② 网格边长是 2n-1 不是 n;③ 四条边四个条件,用 || 连接。菱形/三角形/边框这类"图形绘制"是二级高频题型,掌握"坐标关系"就能一通百通。


四、知识点分类汇总:这套卷子各考点考了几道?

把全卷 25 道客观题 + 2 道编程题按知识点归类,看清 6 月二级的"火力分布":

知识点
涉及题目
题数
计算机基础 / 硬件常识
单选1、单选2、判断1
3
数据类型与浮点误差
单选3、单选5、判断3
3
运算符优先级(not / % / ==)
单选4、单选8、判断2、判断4
4
逻辑运算与德摩根定律
单选4、单选12、单选14
3
数位拆分 / 取位还原
判断9
1
循环结构(for / while 嵌套)
单选6、单选9、判断6、判断7、判断8
5
循环 + break / continue
单选7、单选10、单选11
3
图形绘制(斜线 / 边框 / 对角线)
单选12、单选14、判断10、编程2
4
边角案例 / 边界处理
单选13、单选15、判断5
3
综合应用(平方数、去头尾计分)
单选15、编程1
2

一句话看懂这张表:

  • 循环相关(循环结构 + break/continue)合计 8 道,稳居第一大考点,比一级还吃重;
  • 运算符与逻辑(优先级 + 德摩根)合计 7 道,紧随其后,not 的优先级几乎每套必考;
  • 图形绘制(斜线、边框、对角线)合计 4 道,二级比一级明显加码——这是一级到二级的能力台阶。

也就是说,二级想稳过,劲要往循环嵌套、运算符优先级、图形坐标关系这三块使。


如果你家娃看完解析,有些地方还是"似懂非懂"——比如第 8 题里 not i % 3 为什么先算 not i、第 11 题 11/2 怎么就跳回 5 了、编程题 2 里 i+j 和 i-j 怎么就画出斜线了——这恰恰是我们做训练营想解决的问题。

干巴巴的文字讲"优先级""坐标关系",孩子点头说懂了,换道题又错。所以在 GESP 二级 14 天训练营 里,这些最抽象的点全做成了会动的动画微课:

  • 第 8 题的运算符优先级,画成"拆积木"——not i % 3 一步步拆开,not 先啪地把 i 变成 0 或 1,再做 %,一眼看清谁先谁后;
  • 第 11 题 num /= 2 跳回 5,让 num 盒子一步步往上数,到 11 时"啪"地整除变 5,单步走、边走边猜,规律自己就浮出来;
  • 编程题 2 的菱形斜线,用一条会动的对角线在网格里滑,i+j 相等的格子同时亮起——原来一条斜线就是一个"行列和固定"的方程,画图形从此不靠背。

配上全部历年真题免费刷(按章节分类,6 月新题已收录)、原创讲义和即时判分练习,就是想让娃跟着真题的"考点分量"走,把劲用在刀刃上。

📣 GESP 二级 · 暑期 14 天免费学习营,首期免费、限 30 人。 已过一级、准备 9 月冲二级的小学生(四年级以上更从容)正合适,每天 1~1.5 小时逐日解锁,从循环嵌套一路带到图形绘制专题,第 14 天结营测评摸底。

报名三步:打开 👉 www.gesppass.com/camp,注册后点「免费申请上车」占名额,扫码进「GESP 二级集训营」群,满 20 人或 7 月 16 日准时开营。

名额不多,看到就上车 🚀 觉得这份解析有用,转发给同样在备战 GESP 的家长朋友——拉满 20 人,大家一起开练。