考试基本信息先搞清楚考什么、怎么考
GESP(Grade Examination of Software Programming)由中国计算机学会(CCF)发起主办,覆盖中小学阶段,考察语言为图形化编程、Python 与 C++,各级别划分为一至八级。它是一种"学业能力验证"型考试,重在考察编程基础与逻辑思维,而非单纯记忆。
| 项目 | 说明 |
|---|---|
| 主办单位 | 中国计算机学会(CCF) |
| 考试语言 | 图形化编程 / Python / C++ |
| 等级划分 | 一级 ~ 八级,逐级递进 |
| 考试形式 | 全国考点线下机考,系统自动评测 |
| 考试时长 | 约 120 分钟(各级略有差异) |
| 实践机会 | 一年多次认证(约每 3 个月一次),考前有模拟测试可先熟悉系统 |
| 衔接价值 | 高级别优秀考生可与 CSP-J/S 等竞赛衔接 |
两条必须记住的核心规则关乎策略,不只是分数
✅ 60 分通过
满分 100 分,成绩达到 60 分及以上即为通过本级认证。编程题占比大,是过线的关键——客观题尽量全对,编程题至少稳拿第一题,基本就能压线。
🚀 90 分可跳级
每级成绩达到 90 分及以上,下次可跨一级报考。例如一级考到 90+,下次可直接报三级,跳过二级——省一次考试。所以对学有余力的同学,目标不应是"及格",而是"冲 90"。
策略含义:1–3 级考的是语法基本功,冲 90 完全可行;而 7 级以上已接近竞赛难度,靠"背考纲"会明显吃力,需要按竞赛标准训练。
分级别考点与冲 90 关键一级到八级,逐级看清楚
- 计算机基础与编程环境 / 计算机历史
- 变量定义与使用、基本数据类型
- 顺序 / 循环 / 选择 控制结构
- 算术、关系、逻辑运算
- 输入输出语句
5/2=2,区分 = 与 ==。零基础约 2–3 个月。- 计算机存储与网络、ASCII 编码
- 流程图概念、数据类型转换
- 多层分支 / 循环嵌套结构
- 常用数学函数(abs / sqrt / max / min)
&& 高于 ||,复杂逻辑勤加括号;else 只匹配最近的 if,不加大括号必错;内外层循环变量别都用 i。约 1–2 个月。- 数据编码(原码 / 反码 / 补码)
- 进制转换(二 / 八 / 十 / 十六)
- 位运算(& | ~ ^ << >>)
- 一维数组与字符串处理
- 枚举法、模拟法
- 排序算法(冒泡 / 选择等)
- 贪心思想、递推
- 二分思想与边界
- 结构体与多关键字排序
- 模拟与逻辑推演
- 栈、队列、链式结构
- DFS 深度优先搜索
- BFS 广度优先搜索
- 树结构初步
- 动态规划入门
- 堆、并查集、哈希
- 经典 DP 模型
- 图论基础
- 最短路、最小生成树
- 数论
- 高级动态规划
- 网络流初步
- 计算几何基础
题型结构与分值分布以一级、四级卷面为例
| 级别 | 题型 | 题量 × 分值 | 小计 |
|---|---|---|---|
| 一级 | 单选题 | 15 × 2 分 | 30 分 |
| 判断题 | 10 × 2 分 | 20 分 | |
| 编程题 | 2 × 25 分 | 50 分 | |
| 四级(示例) | 单选题 | 约 25 × 2 分 | 50 分 |
| 判断题 | 约 10 × 1 分 | 10 分 | |
| 编程题 | 3 题(约 10 + 15 + 15) | 40 分 |
各级别题量与分值可能随场次微调,但整体占比稳定:编程题约占一半分值,是通过考试的关键;客观题(选择 + 判断)是拉开"优秀"差距的稳定得分区。复习时编程训练必须放第一位。
注意大纲修订:CCF 已明确删除一级标准中误列入的"位运算",一级备考不必在此花时间;同时 C++ 考题统一以 C++11 标准为准,不涉及未定义行为。但 break / continue 在历年真题中反复出现,必须掌握。
考场实战策略120 分钟怎么用
开考先读一遍全部编程题
拿到试卷先把 2–3 道编程题都通读一遍,在草稿纸上记下每题"输入是什么、输出要求什么、数据范围多大",再决定先做哪道。避免一上来死磕第一题,结果卡住浪费时间。
先做最有把握的题
推荐顺序:先做最有把握的编程题 → 再做客观题 → 最后回来啃难题。客观题卡壳往往是某个语法细节想不起来,纠结太久最容易心态崩;而编程题思路一旦对了,写起来很快。
每道编程题先写"暴力版本"
不要一上来就追求最优解。先写能过样例的暴力版本,确保拿到基础分,再根据数据范围考虑优化。二级及以下数据量小,暴力枚举往往直接能过。
严格对齐输出格式
机考自动评测逐字符比对。多一个空格、少一个换行、大小写不一致(YES / Yes)、英文标点写成中文标点,都会判 0 分。写完务必对照题目输出样例逐字检查。
预留 10–15 分钟检查
检查内容:输出格式、循环边界(0 还是 1 起)、变量类型与溢出、数组越界、特殊情况(输入为 0 / 1 / 空)。这些边界条件往往是满分与低分的分水岭。
高频失分点预警这些坑,几乎每场都有人掉
✕输出格式类
- 多余/缺少空格与换行
YES写成Yes、N写成no- 英文标点误用中文标点
- 该输出整数却输出了小数
✕语法细节类
=(赋值)与==(相等)混淆if(a=5)永远为真- 整数除法:
5/2=2而非 2.5 &&与||优先级搞错- else 不加大括号,匹配错 if
✕循环与数组类
- 循环边界写错(
<与<=) - 数组下标从 0 还是 1 起搞混
- 内外层循环变量都用
i - 忘记处理
0或循环结束条件错误 - 数位拆分时位数与下标混淆
✕算法与边界类
- 空输入、极值(0 / 1 / 最大)未处理
- 时间复杂度超标导致超时
- 递归边界 / 传值与传引用混淆
- 搜索时状态设计错误、剪枝不到位
- DP 状态定义不清、初始化遗漏
应对方法:在本地 IDE 里预先准备一套测试用例集,包含常规、边界、错误三类情况,写完每道题都跑一遍,能挡住绝大多数"会做但拿不到分"的问题。
高频必备代码模板二级起必须手写熟练
① 数位拆分 / 数字反转
处理"每一位数字"的万能骨架,二级最爱考。
// 逐位拆分,处理每一位 while (n > 0) { int d = n % 10; // 取出个位 // 对 d 做处理(累加 / 判断奇偶 / 统计) n /= 10; // 去掉个位 }
② 素数判断
bool isPrime(int x) { if (x < 2) return false; for (int i = 2; i * i <= x; i++) if (x % i == 0) return false; return true; }
③ 双重循环图形打印
外层控行、内层控列;先画前几行找规律,再写代码。
for (int i = 1; i <= n; i++) { // 行 for (int j = 1; j <= n; j++) // 列 cout << "*"; // 视位置输出空格或字符 cout << '\n'; // 记得换行! }
④ 进制转换(余数倒序)
// 十进制 → 任意进制,结果需倒序输出 string s = ""; if (n == 0) s = "0"; while (n > 0) { int d = n % base; s += (d < 10 ? char('0' + d) : char('A' + d - 10)); n /= base; } reverse(s.begin(), s.end());
备考规划与刷题方法把每一套真题用透
📖 真题三刷法
第一遍 · 限时模考
严格按考试时间做整套真题,目的是暴露问题,分数不重要。做完对答案,把错题和"蒙对"的题全部标记出来。
第二遍 · 专题拆解
按知识点模块(如数位拆分、图形打印、排序、搜索)分类重做,把薄弱模块逐个攻破。
第三遍 · 母题归纳
把每类题的通用解法模板提炼出来,形成自己的"套路库",遇到新题能快速归类。
刷真题的价值不在"碰到原题",而在熟悉出题人的命题语言。GESP 的特点是"朴素题面 + 硬核内核"——场景是小学生都读得懂的,但背后的算法模型不浅。
🎯 各级别训练量参考
| 级别 | 备考周期 | 建议训练量 | 核心方法 |
|---|---|---|---|
| 一级 | 零基础 2–3 个月 | 选择判断 2 套真题 + 编程题 5 道 | 抠输出格式与基础语法 |
| 二级 | 过一级后 1–2 个月 | 选择判断 2 套真题 + 编程题 8 道 | 图形打印、数位拆分两大模板 |
| 三级 | 过二级后 2–3 个月 | 6 大模板各 3 道 + 真题 2 套 | 枚举、模拟熟练度 |
| 四级及以上 | 视基础 | 真题 + 洛谷 / CSP 系列题 | 算法思路 + 复杂度控制 |
三级六大编程模板:① 数组 + 循环模拟 ② 日期/日历类(取模推进状态)③ 顺序遍历(不回头)④ 位运算(判奇偶 / 统计二进制 1)⑤ 字符串处理(大小写 / 查找 / 拆分 / 回文)⑥ 进制转换(余数倒序)。