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 <= 5not (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 != 0) continue; 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 /= 2,11/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 == -1) break; 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=1,1==0为假,not 假= 1右边 (not '5' % 2) == 0:not优先级高于%,即(not 53) % 2 = 0 % 2 = 0,0==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 % 3) break;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 ≤ r(1 ≤ 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:菱形
题意:给定 n(3 ≤ 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 月二级的"火力分布":
一句话看懂这张表:
循环相关(循环结构 + 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 人,大家一起开练。
夜雨聆风