七天计划
怎么用这个终端
1. 每天先看讲义,把当天的口诀念一遍(出声效果更好)。
2. 再做真题模考,25 道客观题自动判分,编程题在本机 IDE 敲。
3. 错的题自动进错题本,第二天先重做错题。
4. 手机和平板之间同步:点最上方黑条的「⇄ 进度码」,生成一串码带走(数学进度也一起打包)。
进度存在本机浏览器里,关掉再打开还在。换设备或清缓存前记得先导出进度码。
GESP C++ 一级教学大纲
写给谁:孩子自学 / 家长陪读 / 老师备课 · 怎么用:先看「口诀」,再回头看「大白话」,最后做题
这份大纲解决什么问题
官方考纲写给竞赛选手看,里面全是术语(标识符、表达式、整除…)。 Jesse 五年级,看术语等于没看。
所以每一节都是三件套:大白话 先讲这玩意儿到底是什么 →生活实例 告诉你生活中哪件事长得像它 → 口诀 给一句能背下来的话。考试考的是最后那个记住的点,中间两件事是帮你记住的。
第 0 课 计算机是什么知识块① · 4道题 · ★☆☆ · 送分题
最容易错的是麦克风和音箱:这两个长得像 twins,一个进一个出,答案就靠方向定。
麦克风是耳朵进,音箱是嘴巴出
五个部件一个都不能少
这道题就是直接让你背五个词,10 个判断题里必出一道,纯记忆,没有道理可讲。
| 年份 | 名字 | 要记什么 |
|---|---|---|
| 1946 | ENIAC(美国) | 世界第一台通用电子计算机 |
| 1958 | 103 机(中国) | 中国第一台通用数字电子计算机,晚了 12年 |
能做的:收邮件、写剧本、写代码。
不能做的:擦地板、倒水、开门。
第 1 课 变量与数据类型知识块②③ · 4道题 · ★★☆
| 规则 | 说明 | 真题怎么问 |
|---|---|---|
| 先定义,后使用 | 没定义的变量不能赋值也不能算 | EX1-4「对一个没定义的变量赋值,等于定义了一个新变量」→ 错 |
| 类型永不改变 | int a 永远是 int,不会算出小数就变 double | EX1-4「赋值后变量类型可能变化」→ 错 |
| 值可能不变 | a = a; 就是把a给自己,左右两边同格同物,等于啥也没干 | EX1-4「赋值后变量的值可能不会变化」→ 对 ✅ |
自己给自己等于白搬,值不变
- 第一个必须是字母或下划线,绝对不能是数字
- 后面只能是字母、数字、下划线——不能有 & # -空格
- 不能是关键字(C++ 自带的词,比如 break、else、while)
真题实战判断
| 候选名字 | 合法? | 为什么 |
|---|---|---|
| number_of_chinese_people | 合法 | 字母开头+全字母下划线 |
| 360AntiVirus | 非法 | 数字开头(EX1-5的B选项) |
| Man&Woman | 非法 | 含 & 这个非法符号(C选项) |
| break | 非法 | 是关键字(D选项) |
| _temp | 合法 | 下划线开头也算合法! |
符号莫来掺,关键字莫占
—— 下划开头也合法
易错提醒:判断题 EX1-19 说「标识符不能完全由数字组成,至少有一个字母就行」→ 错。因为下划线开头也算,不是必须有字母。这题坑在「至少一个字母」这句话上。
endl 长得像关键字,但它不是关键字。关键字是C++ 语言自己规定死的词;endl 是标准库 #include <iostream> 里送来的一个「工具」,负责输出后换一行。
endl 像图书馆里的一本书。它有用、它存在,但它不是规则本身。
同类的还有 cin cout——都是库送来的工具,不是关键字。
| 类型 | 样子 | 能装什么 |
|---|---|---|
| int | 3 | 整数。题目里的 10 就是 int 常量 |
| char | '3' | 单个字符,要加单引号。'3' 是字,不是数 |
| double | 3.5 | 带小数点的数 |
| bool | true / false | 只有两种:对 / 错 |
'3' 是文字符号,占一个字符的格;3 是数量,可以做加法。
cout << 3 + 5; 输出 8(数字相加);cout << '3' + '5'; 输出的是字符编码,不是 8——完全另一回事。
带点是双精度,整数默认 int
第 2 课 运算符——C++ 的算术规矩知识块④ · 6道题 · ★★★ · 主战场
这一节是整个一级考试最重要的一节。客观题 25 道里有 6 道考运算符,加上编程题里的整数运算,接近一半的分数挂在这上面。而且这 6 道题几乎全是「看起来会、其实错」的坑。
7 / 2 → 3 ❌ 小数被吃掉 7 / 2.0 → 3.5 ✅ 右边是小数 7.0 / 2 → 3.5 ✅ 左边是小数 (double)7 / 2→ 3.5 ✅ 强制变成小数
真题 EX1-12:a=7, b=2,哪个结果不是 3.5?
| 表达式 | 结果 | 为什么 |
|---|---|---|
| 0.0 + a / b | 3.0 | a/b 先算,7/2=3 已经是整数了,加 0.0 只能变成 3.0 ← 答案选这个 |
| (a + 0.0) / b | 3.5 | 括号先算,7 变7.0,再除 |
| (0.0 + a) / b | 3.5 | 同上 |
| a / (0.0 + b) | 3.5 | 除数变2.0,小数除法 |
这道题的阴招:0.0 + a / b 里有 0.0,看着像小数参与运算了,但加法在除法后面,除法早就把小数控死了。加小数救不回已经被截断的除法。
要想小数留下来,得有一边是小数
——先除后加救不回,先变小数才有用
a² 写成a^2,考试就专门考这个坑。
a * a → a² ✅ 算平方只能这样 a ^ 2 → 异或结果 ❌ 完全不是平方 pow(a, 2) → a² ✅ 但一级不用这个
真题 EX1-8:a 是 int,表示正方形边长,哪个不能算面积?
| 表达式 | 能算? | 说明 |
|---|---|---|
| a * a | 能 | 标准写法 |
| 1 * a * a | 能 | 多了个 1,不影响 |
| a ^ 2 | 不能 | 异或,不是平方 ← 答案选这个 |
| a * 2 * a / 2 | 能 | 先乘后除,a*2*a=2a²,再/2 = a² |
尖帽子是异或,不是乘方
| 写法 | 名字 | 干什么 |
|---|---|---|
| a = b | 赋值 | 把 b 的值搬进 a,是搬家 |
| a == b | 判断相等 | 问一句「a 和 b 一样吗」,答案是对/ 错 |
a = b:把 b 那箱东西搬进 a 这个格子,a 的东西没了,b 的还在。a == b:两个人站在那比一下身高,一样就打勾,不一样就打叉,谁也不变。
真题 EX1-23:「a = b 可以判断 a 和 b 是否相等」→ 错。它只是搬家,没回答任何问题。
| 你要表达 | 正确写法 | 为什么 |
|---|---|---|
| a 和 b 都等于 0 | a == 0 && b == 0 | && = 两边都满足 |
| a 和 b 都等于 0 | !(a || b) | 都没中就说明全是 0 ← 巧解 |
| a 或 b 至少一个等于 0 | a == 0 || b == 0 | || = 有一边满足就行 |
真题 EX1-11:哪个能正确判断「a 等于 0 且 b 等于 0」?
| 选项 | 行吗 | 错在哪 |
|---|---|---|
| (a == b == 0) | 不行 | C++ 不能连着比。a==b 已经是个对错值了,再跟 0 比没有意义 |
| !(a || b) | 行 | a、b 都不是 0 时结果为假,取反为真 ← 答案选这个 |
| (a + b == 0) | 不行 | a=3、b=-3 也等于 0,漏了 |
| (a == 0) + (b == 0) | 不行 | 这是加法不是与,两个都是 0 时 1+1=2,不等于 0 |
且要两边都成立,或有一个就行
a %= 4 就是「a 除以 4,把余数放回 a」的缩写。完整写法是 a = a % 4;。这类写法叫复合赋值,四个都有:+= -= *= /= %=。
a %= 4 就是「重新算一次我手里剩几块」。所以 a 的值变成 2。
真题 EX1-10:a 是 int 且为 6,执行 a %= 4; 后 a 是?
6 ÷ 4 = 1 余 2 → 答案 B(2) ✅
百分号还能判奇偶(判断题 EX1-24):「a % 4 == 2 能判断 a 是偶数」→ 错。因为 a=4 是偶数,但 4 % 4 = 0,不等于 2。
正确判偶数用:a % 2 == 0(除以 2 余 0 就是偶数)——这才是能记住的那句。
偶数除二余零,奇数除二余一
真题 EX1-9:(4 * (11 + 12) / 4) 等于几?
最外层括号里是 4 * (11+12) / 4 → 先算小括号 11+12=23 → 再 4 * 23 = 92 → 再 92 / 4 = 23→ 答案 C(23) ✅
可写程序的启示:同一级运算(连续乘除)要从左往右算,顺序反了结果差很远。
8 * 7 / 2 从左往右:先 8×7=56,再 56÷2=28。
要是反着先算 7÷2=3,再 8÷3=2 —— 差了 14 倍。
所以拿不准就加括号,加了括号永远不会错。EX1-13、EX1-14 两道填空题考的就是这个:让你在横线上填一个式子,让输出刚好是"20 10"或"147",全靠试和算。
第 3 课 顺序:读进来,算一算,输出去知识块⑤ · ★★☆
| 写法 | 干什么 | 像什么 |
|---|---|---|
| cin >> x; | 把键盘敲的数字读进变量 x | 把答案抄进格子 |
| cout << x; | 把 x 里的东西显示在屏幕上 | 把格子里的答案写在卷子上 |
| cout << a << " " << b; | 一次输出多个,中间用空格隔开 | 写「3 8 5」这种格式 |
易错提醒:方向符号别搞反——cin 是往右(>>,像箭头指进程序),cout 是往左(<<,像箭头指到屏幕)。记反了直接编译报错。
endl 的作用是换一行,输出多组答案时每组后面加一个。
cout << 1 + 2; 是合法的,不用先定义一个变量装结果。C++ 会自己算出 3 再输出。
真题 EX1-18:「计算结果必须存储在变量中才能输出」→ 错 ❌
下雨带伞是 if,没带伞也不犯法,因为没有 else。
真题 EX1-21:「if 语句可以没有 else 子句」→ 对 ✅
没有否则也合法
第 4 课 分支:分岔路口做选择知识块⑤ · ★★☆
a > 90、a == 0。
if (分数 >= 90) cout << "优秀"; else if (分数 >= 60) cout << "及格"; else cout << "不及格";
顺序绝对不能反!程序只会走第一条满足的,一旦走了就不再往下看。
如果把 >=60 写在 >=90 前面,那么 95 分会先被">=60"接走,输出「及格」——永远不可能输出「优秀」。
所以必须从严到宽:先判最严格的,最后才是兜底的 else。
顺序一倒就出错,宽的先抢
switch (d) {
case 1: cout << "周一"; break;
case 2: cout << "周二"; break;
default: cout << "其他";
}
case 必须写 break;不写的话程序不会停下来,会「掉」进下一个 case 继续执行,这叫穿透。
例如 d=1 时不加 break,会先输出「周一」再输出「周二」,答案就错了。
漏了停顿会串台
第 5 课 循环:重复做同一件事知识块⑤ · ★★★ · 编程题核心
for (int i = 1; i <= 100; i++) {
sum += i;
}
| 这一段 | 干什么 | 生活比喻 |
|---|---|---|
| int i = 1 | 准备:i 从 1 开始 | 从第 1 号同学开始点名 |
| i <= 100 | 检查:够不够,还要不要继续 | 「还有没点到 100 号?」 |
| i++ | 更新:每次准备换下一个 | 「下一个!」 |
三个都要检查:
① 初始化写了吗?没写 i 是垃圾值。
② 条件该用 <= 还是 <?i<=100 会算 100 次,i<100 只算 99 次。差一个就是一个错。
③ 累加器初始化了吗?int sum = 0; 这个 0 必须有。
如果忘了在点名册上写起始号(初始化),老师就不知道从哪开始点,会乱。
累加器先归零,末尾还要加一
| 写法 | 先判断还是先干活 | 最少执行几次 |
|---|---|---|
| for | 先判断,再干活 | 可能 0 次 |
| while | 先判断,再干活 | 可能 0 次 |
| do...while | 先干活,再判断 | 至少 1 次 |
while 像「先看菜单再决定点不点」,可以什么都不点。
真题 EX1-22:「do...while 的循环体至少会执行一次」→ 对 ✅
百位 = n / 100; // 385 / 100 = 3 十位 = n / 10 % 10; // 38 % 10 = 8 个位 = n % 10; // 385 % 10 = 5
%10 是「问最后一位是谁」→ 5;/10 是「把最后一位剪掉」→ 38。反复剪,就能把所有位都取出来。
要几位除十几次
为什么必考:数位拆解是小学阶段能拿分的编程题类型(累计相加、数位、反转数字都属这一类)。^ 不能用来求幂,要算平方就用 a * a。
第 6 课 编程题的四个坑知识块⑦ · 每坑 25 分 · 必读
这一节最重要,请务必看完。上面所有知识点加起来只值 50 分(30单选 + 20 判断),但两道编程题一道 25 分。写程序时踩中下面任何一条,那 25 分整题归零,不管你前面算得多对。
int sum; // ❌ 没给初值,sum 里是不知道哪来的旧数据 int sum = 0; // ✅ 先归零,再开始加
回到知识点 9 再看一遍。写程序时,只要题目可能出现小数,就必须有一边先是小数,否则答案天然少一截。
每个 case 末尾都要写 break;,否则程序不会在该分支停下,会继续往下执行下一个 case,输出多出一行。
28(后面有空格或换行)而你多输出了说明文字,或者该分开成两行你打成一行——一样判 0 分。
写完必做的三步
- 抄样例:把题目给的样例输入抄进去跑一遍,对比输出和题目说的一模一样(包括空格和换行)
- 数一数格式:题目要"3 8 5"(空格隔开)还是"3行各一个"?
- 删调试输出:调试时加的提示文字要删掉,只留最后该输出的一句
调试话术全删净
第 7 课 考场生存应试技巧 · 非知识
| 部分 | 题数 | 分值 | 建议用时 | 策略 |
|---|---|---|---|---|
| 单选 | 15 | 30 | 约 30 分钟 | 每题 2 分钟,卡住就跳 |
| 判断 | 10 | 20 | 约 10 分钟 | 快的 1 分钟一道 |
| 编程 1 | 1 | 25 | 约 35 分钟 | 先拿样例测通,再想优化 |
| 编程 2 | 1 | 25 | 约 35 分钟 | 最后写,留足检查时间 |
不要按分数平均分配时间。客观题一共才 50 分,但编程题一道就 25 分。在编程题上多花的时间,能在客观题上换回 3-5 分;但反过来不成立。所以宁可客观题每道快一点,也要给编程题留够时间。
| ✓ | 检查什么 |
|---|---|
| □ | 两道编程题都编译通过了吗?(有报错一定要改) |
| □ | 累加器都初始化了吗?(sum = 0) |
| □ | 跑过样例了吗?输出和题目写的一致? |
| □ | 输出格式对吗?(空格、换行、有没有多余调试语句) |
| □ | switch 的每个 case 都写了 break 吗? |
| □ | int 装得下吗?(会不会某步算出太大、溢出) |
- 先扫一遍编程题,看两道题分别考什么,先写简单的那个。别按顺序死磕。
- 选择题排除了也要再读一遍题,特别要看清问的是「不能」还是「能」——GESP 真题里「不能/不可以」出现的次数出奇地多。
- 实在不会就空着,回头再挑简单的补,回头检查往往能多对几道。
附录 七天速记卡打印贴在书桌前
用法:每天做对应一关之前,先把这一天的口诀念一遍(出声念效果更好)。念完再打开小程序做题。
| Day | 主题 | 今天要背下来的口诀 |
|---|---|---|
| 1 | 计算机基础 | 往里进的是输入,往外出的是输出 麦克风是耳朵进,音箱是嘴巴出 |
| 2 | 变量与类型 | 字母下划开头,后接数字字母码 单引引号是字符,裸着写是数字 一个等号是搬家,两个等号是比高矮 |
| 3 | 运算符 ⚠️ | 整数相除小数跑,要留小数一边搞 平方别写 ^,写成a 乘 a 除四看奇偶,除二判偶奇 |
| 4 | 分支 | 从严到宽排好队,高的先拦 如果就怎样,没有否则也合法 |
| 5 | 循环 ⚠️ | 累加归零再起步 从几开始写几,条件要含头不含尾 取尾用除十,取尾用模十 |
| 6 | 输入输出 | 算完可以直接喊,不必先入柜 样例跑三遍,格式数三遍 |
| 7 | 模考 | 编程题占一半,时间要留够 编译通过再交,格式对齐再交 |
最后一句
如果只能记三句话,就记这三句:
① 整数相除要小数,得有一边是小数。
② ^ 不是平方,用 a*a。
③ 累加器先写 = 0,格式对齐再交。
这三条覆盖了一级最容易丢分的点。
配套文件:《GESP一级一周学习计划.md》(练哪一关)· 题库在「Jesse的学习营」小程序 → GESP 页。
本文档可打印(Ctrl+P),打印时会自动隐藏目录。
错题本
七天速记卡
最后三句
^ 不是平方,用 a*a= 0,格式对齐再交