2026 年 6 月 GESP C++ 一级真题 · 逐题详解
一、单选题(每题 2 分,共 30 分)
第 1 题|答案 C湿度传感器把外界的物理信号(湿度)转换成数据送进控制器,这正是"采集信息、输入系统"的角色,对应计算机的输入设备(类比键盘、鼠标、麦克风)。处理器负责运算,存储器负责记忆,输出设备负责把结果呈现出来——都不符合"采集并送入"这个动作。
第 2 题|答案 D考的是开发环境的基础操作常识。变量名批量替换(A)、撤销(B)、调整缩进(C)都是编辑器的常规功能,描述都正确。D 说"注释里不能中英文混用"是错的——注释是给人看的,中英文随便混,编译器根本不读它。题目问"不正确的",所以选 D。
第 3 题|答案 Dfloat a = 3 + 3.5;,右边 3 + 3.5 中只要有一个是小数,整个表达式就按浮点运算,结果是 6.5,赋给 float 完全合法,输出 6.5。代码不会报错,排除 A、B;结果不是 6,排除 C。这里要破除一个误区:整数 + 小数 = 小数,不会被截断。
第 4 题|答案 C先算原式 -2 * 2 % 4:* 和 % 同级、从左到右,先 -2*2 = -4,再 -4 % 4 = 0。原式 = 0。
A -(2*2)%4 = -4%4 = 0✓ 相同B (-2*2)%4 = -4%4 = 0✓ 相同C -2*(2%4) = -2*2 = -4✗ 不同D (2*2)%-4 = 4%-4 = 0✓ 相同
求"不同的",选 C。考点是运算符优先级和加括号后的求值顺序。
第 5 题|答案 B
int a = 3;int b = a; // b 拷贝了 a 当前的值 3,b 从此独立a = 4; // 改 a 不影响 bprintf("%d %d", a, b); // 4 3关键:b = a 是值拷贝,b 拿到的是 3 这个数,不是 a 这个盒子。之后 a 变 4,b 还是 3。输出 4 3。
第 6 题|答案 Dcin >> N 读整数时,遇到第一个非数字字符就停下。输入 2026-6-27,它读完 2026 碰到 - 就停了,N = 2026,输出 2026。后面的 -6-27 留在缓冲区不管。选 D。
第 7 题|答案 C(求"错误的") 代码:N>M 输出 A 差值,否则输出 B 差值。
A:输入 4 3,N>M,输出A 1✓B:输入 3 4,N≤M,输出B 1✓C:输入 3 3,N 不大于 M,走 else,输出B 0,但选项说输出A 0✗ 错误D:输入 4 4,走 else,输出B 0✓
陷阱在 N > M 是严格大于,相等时走 else。选 C。
第 8 题|答案 C(求"错误的")cnt += 1 等价于 cnt = cnt + 1。
A cnt = cnt + 1✓B cnt = 1 + cnt✓(加法可交换)C cnt =+ 1✗ 这其实是cnt = (+1),即把 cnt 直接赋值为 1,不是自增!D cnt = +1 + cnt✓
C 是经典陷阱:=+ 不是一个运算符,它会被拆成 = 和正号 +。选 C。
第 9 题|答案 A代码:num 从 1 开始,循环 35 次,每次先打印再判断。输出规律是 1 2 3 4 5 6 7 8 9 10 11 然后跳回 5,再 5 6 7 8 9 10 11 循环。说明:num 一直 +1 增长,到了某个值就跳回 5。
观察:11 之后回到 5。所以条件是"当 num 大于某值时减,否则加"。填 >、/=、+=:
当 num > 10(即 num=11)时num /= 2,11/2=5(整数除法),正好跳回 5!否则 num += 1正常 +1。
验证规律完全吻合。选 A > /= +=。这题难点在于**用整数除法实现"跳回"**。
第 10 题|答案 A
for (i = 1; i < 5; i++)if (i % 2 == 0) {continue;cout << i << "#"; // 永远执行不到(continue 之后) }cout << i << "END#";两个关键点:
continue后面的语句永远不会执行(死代码)。偶数时 continue,奇数时啥也不做,循环正常跑完,i 最终变成 5。 循环结束后 cout << i << "END#",i=5,输出5END#。
选 A。陷阱:很多人以为会打印 1#3#,但那行在 continue 之后,根本到不了。
第 11 题|答案 B
for (i = 2; i < N; i++)if (N % i == 0) { cout << "1#"; break; }elsecout << "0#";这是在找 N 的因子。从 i=2 开始:整除就输出 1# 并跳出;不整除输出 0# 继续。
A 输入 2: i<2不成立,循环不执行,无输出。选项说输出1#✗B 输入 15:i=2,15%2≠0→ 0#;i=3,15%3=0→1#并 break。输出0#1#✓C 输入 1:循环不执行,无输出 ✗ D 输入 3:i=2,3%2≠0→ 0#;i=3 不满足 i<3,结束。输出0#✗
选 B。
第 12 题|答案 A(求"错误的") 循环 i 从 0 到 9 共 10 次,tot 累加成 10,输出 10。
A 说改成 1 <= i输出"同样为 45"——首先原输出是 10 不是 45,描述本身就错;改条件后还会少跑一次,结果也变。✗ 错误B i = tot = 0连等赋值合法,等价 ✓C 交换 tot+=1 和 i+=1 顺序,不影响结果 ✓ D 交换两个初始化语句顺序,不影响 ✓
选 A。
第 13 题|答案 B四位数 n,要取十位数字。十位 = 先去掉个位(n/10),再对 10 取余(%10)。即 (n/10)%10。选 B。 口诀:取某一位 = 先除到它在末尾,再 %10。
第 14 题|答案 B秒针位置 = (起始 + 经过秒数)对 60 取余,得到 0~59 的刻度,所以 L1 填 (start + n) % 60(用 / 是错的)。 回到 12 点方向 = 刚好指向 0,L2 填 pos == 0(注意判断相等用 ==,不是赋值 =)。选 B。
第 15 题|答案 B(求"不应填入的") 判断质数,for 从 i=2 开始试除。循环条件可以是:
A i < N:逐个试到 N-1,正确(虽慢)✓C i <= N/2:试到一半,正确 ✓D i*i <= N:试到 √N,正确且高效 ✓B i <= N:会试到 i=N,而N % N == 0永远成立,导致质数被误判为合数输出 NO ✗
所以不应填 B。这题考质数判断的边界:试除上界绝不能取到 N 本身。
二、判断题(每题 2 分,共 20 分)
第 1 题|✓AI 眼镜内置操作系统、能联网(Wi-Fi/蓝牙),具备查询、通信能力,考场禁带合理。表述正确。
第 2 题|✓对大于 100 的整数 n:(n/10)%10 取的是十位;(n%100)/10 先留下后两位再除 10,取的也是十位。两者都取十位,结果相同。✓
第 3 题|✗
for (i = 0; i < 20; i += 3)if (i % 3 != 0) break;cout << i;i 取 0、3、6、9...全是 3 的倍数,i%3!=0 永远不成立,break 永不触发。循环正常结束时 i 增到 21(i=18 时还满足<20,加 3 变 21 退出),输出 21,不是 19。✗
第 4 题|✗求阶乘却写 int rst = 0;,0 乘任何数都是 0,最后输出 0,不是 N!。初值应为 1。✗
第 5 题|✓while(N>0){ 输出 N%10; N/=10; } 不断取个位再砍掉,能逐位(从低到高)输出 N 的各位数字。功能正确。✓
第 6 题|✓printf("\n") 和 printf("%c", '\n') 都是输出一个换行符,效果完全相同。✓
第 7 题|✗2.5 % 2——% 取模运算不允许用于浮点数,这是编译错误,根本生成不了可执行代码。题目说"能生成可执行代码但运行时报错"是错的。✗
第 8 题|✗
int total; // 未初始化!值是随机的for (n=1..4) total *= n;total 没赋初值,是个垃圾值,乘出来结果不确定,不会稳定输出 24。(就算初值是 1,1×1×2×3×4=24,但前提是初始化为 1——这里没有。)✗
第 9 题|✓(以官方答案为准) a=4:(a%2==0) 为真 = 1,(a/2) = 2。按 C++ 语义 1 + 2 = 3。此题官方给 ✓,题面数值在传抄中可能略有出入,课堂以 CCF 公布版为准。重点掌握考点本身:关系表达式的值为 0 或 1,可直接参与算术运算。
第 10 题|✗
while (x < 4) { x++;if (x == 2) continue; // x=2 时跳过下面的输出cout << x << ",";}有 continue:x=2 时跳过打印,输出 1,3,4,。删掉 continue 后,x=2 也会打印,变成 1,2,3,4,。两者不同。✗
三、编程题(每题 25 分,共 50 分)
编程题 1:去旅行
思路:三种方案各算总价,取最小。
方案 1:直飞 = a 方案 2:高铁到 C + 飞机 = b + c 方案 3:高铁到 C + 高铁 = b + d
读入 4 个数,比较三者最小值输出即可。
#include<iostream>usingnamespacestd;intmain(){int a, b, c, d;cin >> a >> b >> c >> d;int x = a, y = b + c, z = b + d;if (x <= y && x <= z) cout << x;elseif (y <= x && y <= z) cout << y;elsecout << z;cout << endl;return0;}考点:多变量比较求最小值。也可用 min(a, min(b+c, b+d))(需 #include <algorithm>)更简洁。典型的一级编程题难度——读数、算式、比较。
编程题 2:交税
思路(分段计税):每月报酬 a,
a ≤ 800:不交税 a > 800:超出部分按 20% 交,即 (a-800)*0.2
12 个月累加,最后保留两位小数输出。
#include<iostream>#include<cstdio>usingnamespacestd;intmain(){double ans = 0.0;for (int i = 0; i < 12; ++i) {double a;cin >> a;if (a > 800.0) ans += (a - 800.0) * 0.2; }printf("%.2f\n", ans);return0;}考点:① 浮点数 double 的使用;② 条件分段(超过 800 才计税);③ 循环累加;④ 格式化输出 printf("%.2f") 保留两位小数——这是一级高频得分点,很多娃栽在"保留两位小数"上。
四、知识点分类汇总:这套卷子各考点考了几道?
把全卷 25 道客观题 + 2 道编程题按知识点归类,一眼看出 6 月一级的"火力分布":
一句话看懂这张表:
循环相关(循环结构 + break/continue)合计 6 道,是当之无愧的第一大考点; 运算与取位(运算符 + 取模取位)合计 5 道,紧随其后; 变量、输入输出各 3 道,也是高频。
也就是说,这套卷子里超过一半的分,压在循环、运算、变量这三块上。一级想稳过,劲就该往这三处使。
如果你家娃看完解析,有些地方还是"似懂非懂"——比如那个 b = a 之后为什么 b 不变、num /= 2 怎么就跳回 5 了、continue 后面那行为什么永远到不了——这恰恰是我们做训练营想解决的问题。
干巴巴的文字讲"值拷贝""循环跳转",孩子点头说懂了,换道题又错。所以在 GESP 一级 14 天训练营 里,这些最抽象的点全做成了会动的动画微课:
第 5 题的"值拷贝",画成两个盒子—— b = a时把 a 里的 3 复制一份放进 b,然后 a 翻牌变 4,b 里那个 3 纹丝不动,一眼看懂"拷的是数,不是盒子";第 9 题 num /= 2跳回 5,让 num 盒子一步步往上数,到 11 时"啪"地一除变 5,单步走、边走边猜,规律自己就看出来了;循环里的 break、continue 跳到哪,用一条会动的箭头领着孩子走,哪行执行了、哪行被跳过,清清楚楚。
配上全部历年真题免费刷(按章节分类,6 月新题已收录)、原创讲义和即时判分练习,就是想让零基础的娃跟着真题的"考点分量"走,把劲用在刀刃上。
📣 GESP 一级 · 暑期 14 天免费学习营,首期免费、限 30 人。 准备 9 月一级的零基础小学生(三年级以上更合适)正合适,每天 1~1.5 小时逐日解锁,从基础一路带到循环专题,第 14 天结营测评摸底。
报名三步:打开 👉 www.gesppass.com/camp,注册后点「免费申请上车」占名额,扫码进「GESP 一级集训营」群,满 20 人或 7 月 6 日准时开营。

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