简介:一套面向CCF编程能力等级认证(GESP)一级考试的集训课件PPT,适合准备参加认证的中小学生与编程初学者,尤其适合以C++为备考语言的K12学习者。内容紧密围绕一级考纲,系统梳理了计算机基础知识、程序三大结构(顺序、选择、循环)、基本数据类型、变量定义与命名规则、输入输出语句等核心考点,并完整呈现考试题型与分数分布(单选题15题30分、判断题10题20分、编程题2题50分)、考试时间安排以及90分可跨级报名的晋级规则,同时涵盖Dev-C++开发环境使用与基础程序框架示范。资源为单个pptx文件,压缩包大小约19.99MB,下载后可直接打开浏览。目前已有1604人学习下载。课件配有课堂练习案例(如打印图形、数值运算),可帮助零基础学习者快速建立编程思维,为冲击后续更高级别考试打下扎实基础。
1. GESP 一级 集训课ppt:考前两周最该补的不是语法,是读题
带过几轮GESP 一级集训课的人都有同感:真正卡住学生的从来不是“for循环怎么打”,而是拿到题目后不知道题目在说什么。语法讲一遍就会,读题错误却会反复出现。这套GESP 一级 集训课ppt要解决的正是这个问题——它不是一本语法手册,而是一套把考点切片、把读题动作拆解成步骤的考前训练方案。适合两类人:一是给零基础学生做考前冲刺的老师,二是打算自己系统复习一级考点的自学者。接下来我会把课程切片、幻灯片设计、例题拆法和踩坑记录完整展开。
2. 把一级考点切成六节课:知识点边界与每次课的交付物
GESP一级的知识范围有限,但零基础学员的认知负担比想象中大。我习惯把全部内容切成六个课时,每节课只讲一个“动作”,而不是一个“语法点”。因为考场上真正用的不是语法,而是“读题→设计→写码→验证”这个动作链。
2.1 变量、输入输出与顺序结构:第一节就把“黑匣子”讲通
第一节课的核心不是教会学生写int a;,而是建立“程序 = 输入 → 处理 → 输出”的心智模型。很多学生在后续章节翻车,是因为从一开始就没理解变量和内存的关系,后面循环、数组全是空中楼阁。
#include <iostream> using namespace std; int main() { int a, b; // 申请两块内存,用来存放整数 cin >> a >> b; // 从键盘读取两个数,按顺序放进 a 和 b cout << a + b << endl; // 把相加结果输出 return 0; }这段代码是第一节的“锚点”。我会在幻灯片上保留三行注释,不删掉任意一行,因为注释承担着“把这个语法翻译成日常语言”的任务。第一行说明变量是内存盒子,第二行说明cin是按顺序放入,第三行说明endl换行。这里的参数只有一个a + b,目的是让学员看出“处理”发生在表达式里,而不是在输入或输出里。
这一节课的交付物很明确:一份可以独立完成的“输入两个数,输出它们的和、差、积”的作业题,外加三道“只改数字”的变式题。第一节课不需要数组,不需要循环,甚至不需要if,让学员把“黑匣子”的输入输出边界摸清楚。很多老师喜欢在第一节课就讲完所有数据类型,这是常见的翻车点——double的精度问题、char的输入空白符问题,在一节课里塞进去,学员只会记住“很多类型名”,记不住自己该做什么。
2.2 分支和循环的讲解顺序:先画流程图再上代码
分支和循环是GESP一级的得分主力,也是最容易“假装会了”的部分。我的经验是:不要一上来就贴代码,而是先让学生用箭头和方框把流程画出来。画流程图的习惯能直接抑制一类经典错误——在循环体里忘记更新循环变量。
某个学生曾在一道“从1加到n”的题上卡了半小时,代码反复死循环,原因就是他写的是while (i <= n) { sum += i; },循环变量i根本没有递增。流程图只需要三步:初始化、判断、更新。当一个学员能画出包含这三个节点的图,他写代码出错概率会低很多。
幻灯片上我一般放两张图:一张是正确的“计数器循环”流程图,一张是“判断后退出”的流程图。对应的代码只用for和while各写一遍,不做无谓的变式:
int n, sum = 0; cin >> n; for (int i = 1; i <= n; i++) { // i 从 1 走到 n,每次加 1 sum += i; } cout << sum << endl;这里值得单独讲一下for的三个表达式:int i = 1是起点,i <= n是终点判断,i++是每一步挪动。我讲课时会强调“这三个位置缺一不可”,并且让学生当场在纸上默写三个表达式。循环变量的初始化和更新是GESP一级里错误率最高的两个点,不是语法难,而是学员脑子里没有“循环是重复三段动作”的图景。
2.3 数组与字符串的处理:一级考试里最容易“假装会了”的部分
数组在一级考试里通常以“读入n个数,找最大值/最小值/逆序输出”的形式出现。难点不在于声明int a[100];,而在于“下标是从0开始的”这句话,需要在十余道题里反复捶打才能内化。
字符串则是另一个分水岭。GESP一级要求掌握string的基本操作:length()、拼接、比较,以及用下标访问字符。我会把数组和字符串放在同一节课,因为它们共享同一个核心动作:用下标去访问一组数据中的某一个。
string s; cin >> s; int cnt = 0; for (int i = 0; i < s.length(); i++) { if (s[i] >= '0' && s[i] <= '9') cnt++; // 统计字符中数字的个数 } cout << cnt << endl;这段代码的亮点是把“字符比较”和“范围判断”合在一起。学生在初学时经常写if (s[i] >= 0 && s[i] <= 9),忘记字符'0'到'9'的ASCII码不是数字值本身。我会在幻灯片上用红框标出'0'的单引号,然后问一句:“为什么这里有引号?”这个问题能立刻暴露学员是真的理解字符,还是在背模板。
2.4 每节课的交付物清单:PPT之外还要配什么
只靠PPT上课是不够的。每一节课我固定配三样东西:
| 交付物 | 作用 | 形式 |
|---|---|---|
| 课堂练习纸 | 当堂验证是否理解 | 3~5 道变式题 |
| 课后作业题 | 巩固当天知识点 | 6~8 道编程题 |
| 错误卡 | 记录当天的翻车点 | 学员自己写,一句话一个坑 |
错误卡是这套集训课里最被低估的部分。每节课最后十分钟,让学员把当天“看一眼答案就懂、自己写就错”的地方写在卡片上。到考前最后一节课,这些卡片就是最个性化的复习清单。PPT负责讲解,错误卡负责对抗遗忘,两者缺一不可。
3. 一页幻灯片怎么设计:从标题到示例代码的四个固定结构
集训课PPT不是汇报PPT,每一页都要服务于“学员在30秒内看明白并在5分钟内写出来”这个目标。所以我的幻灯片结构非常固定:上1/3是“今天要解决什么问题”,中1/3是“一段不超过12行的代码”,下1/3是“一个请学生预测输出结果的悬念”。
3.1 示例代码选多长:以“能在20秒内读完”为上限
一节90分钟的课,我会用8到12页代码页,每页只放一段可运行代码。代码行数上限是12行,超过这个长度我就拆成两页,原因很简单:零基础学员读代码的速度远低于老师的讲解速度,一页代码里嵌套两个知识点,后半行学员基本是放弃的。
int n; cin >> n; for (int i = 1; i <= n; i++) { cout << i * i << " "; // 输出 1 到 n 的平方 }这页代码只有7行,但它同时覆盖了循环、递增、乘法表达式和输出格式四个细节。我在讲解时会用光标逐行扫过,每一行只讲一句话,绝不展开。i * i这个写法的好处是:“求平方”不需要调用任何库函数,学员能直观看到“处理”发生在表达式中。如果换成pow(i, 2),就会牵出cmath库和浮点数精度问题,那节课就收不住了。
3.2 错误示范要不要放:先猜后果再加动画
很多老师不敢把错误代码放进PPT,怕学生记住错误写法。我的经验正好相反:把典型错误代码放上大屏幕,让学生先猜输出结果,再用动画揭晓,记忆会深刻得多。关键是要把“这是错”的信号做得极其明显,比如用红底白字,并在代码上方写一行大字:“这段代码能编译通过,但是逻辑错了”。
一个经典示例:
int n = 5; for (int i = 1; i < n; i++) { cout << i << " "; } // 输出 1 2 3 4,少了一个 5放这页之前,我会让学生口头回答“输出什么”。大多数学生会说1 2 3 4 5。当动画把运行结果点亮,全场会安静一瞬。那一瞬就是记忆点。之后我才会问:“<和<=的差别在哪?”这个提问顺序比先讲边界条件再写题有效得多,因为学生的认知冲突已经被激活了。
3.3 练习题页的三种形态:找错、补全、独立写
练习题不能只有“请编写程序”这一种形态。我把练习题页分成三种,按课堂时间灵活切换:
找错题:给出带逻辑错误的代码,要求学生30秒内指出哪一行错了。这个形态训练的是“审读代码”的能力,也是快速发现考场笔误的基础。补全题:给出代码框架,只留空两三处关键表达式。这个形态把学生的注意力集中在当前知识点上,不因为拼写、头文件等噪音丢分。独立写题:空白编辑器,只有题目和样例输入输出。
三种形态的配比是2:1:1,也就是一节课内找错题最多。因为没有哪个一级考点值得让学生从头到尾写10分钟,更多时候他们卡在“从读题到动手”的间隙里,找错题能高密度地弥补这个间隙。
4. 把真题拆成读题步骤:三个圈和一张伪代码纸
GESP一级的编程题读题有迹可循。我总结了一套“三个圈”的动作:先圈输入格式,再圈输出格式,最后圈数据范围。三步走完,题目才被真正“翻译”成可执行的计划。这一步动作看似简单,却是集训课里最有价值的训练内容。
4.1 圈输入、圈输出、圈数据范围:一次读题的标准动作
很多学员做题失败不是不会写代码,而是把“输出n个数的最大值”看成“输出最大值以及它的位置”。这就是读题动作不标准造成的。我要求学员在题目纸上的三处位置画圈,圈完才能动键盘。
以一道常见的“数字拆分”题为例:
输入一个三位数 n,输出它的个位、十位、百位。 输入格式:一行一个整数 n 输出格式:一行三个整数,依次为个位、十位、百位学员容易犯的错是把输出顺序搞反,或者把百位当作个位。如果他在读题时圈出了“依次为个位、十位、百位”这行字,写代码时就会下意识对照。这道题的代码本身只有一行核心逻辑:
int n; cin >> n; cout << n % 10 << " "; // 个位:取余 10 cout << (n / 10) % 10 << " "; // 十位:先去掉个位,再取余 cout << n / 100 << endl; // 百位:整除 100我在讲解时会特意问:“为什么十位要先/ 10再% 10?”目的是让学员理解整除和取余是一对“拆数字”的工具。很多学员背下了公式却不知道背后的意义,一旦题目变成“四位数”就傻眼。所以课堂练习我会加一道变式:输入一个四位整数,输出它的逆序数。这道题在逻辑上完全一样,但能检验学员是真的理解了拆位过程,还是只背了三位数模板。
4.2 从伪代码到正码:我见过最稳的过渡方式
零基础学员最大的障碍不是语法,而是“脑子里没有计划”。我的做法是:在任何一道例题开写之前,先在白板上写三行伪代码,比如:
读入 n 把 n 从 1 到 n 轮流加起来 输出 sum然后让学员把这散三行翻译成C++。这个过程看上去绕路,但能拦下大量“边写边想、写一半忘了自己要干嘛”的学员。伪代码的长度必须控制,不超过三行,超过三行就说明题目被拆得不够细。
int n, sum = 0; cin >> n; for (int i = 1; i <= n; i++) { sum += i; } cout << sum << endl;这里的sum += i值得单独解释一句话:“累加器”的写法。学员第一次看到sum += i时常常不理解为什么不是sum = i。我会故意问:“如果我把sum += i改成sum = i,输出会变成多少?”很多学员能说出“n本身”,那一刻就说明他理解了“累加”这个动作是在重复利用同一个变量。
4.3 判题系统为什么是黑匣子:改错路径要反过来练
GESP一级的判题系统只告诉你在第几个测试点错了,不告诉你输入是什么,输出差多少。这个“黑匣子”特性让很多学员焦虑,因为他们在本地跑样例全对,提交却出错。集训课必须提前模拟这种体验,不能只在课上说“一定要多测边界数据”,而要真实地让他们错一次。
做法很简单:在课堂练习的最后10分钟,出一题看起来很简单但边界极宽的题。比如“输入n个整数,输出最大值”,数据范围写1 <= n <= 1000,但实际某个测试点的n是1。第一轮学员多半不会想到n=1这种孤儿测试点,全班的通过率可能只有一半。
这时我让通过的人公开讲一讲:“你是怎么想到要去测n=1的?”他会说:“只有一个数的时候,它既是最大值也是最小值。”其他人就会意识到,读题时圈数据范围的价值就在于此——范围边界本身就是测试点。黑匣子不可怕,可怕的是没有在边界上试探的意识。
5. 集训避坑:零基础学员最常见的五个翻车现场
带集训课最怕的不是学员笨,而是老师踩过坑却没法提前装进PPT。这一章我把零基础学员最容易翻车的五个场景原样写出来,每条都是“现象 → 原因 → 解决”的路子,可以直接搬到课堂上当反面教材。
5.1 数组越界不报错:运行时不是语法错误,错在哪看不见
现象:代码编译通过了,本地跑小样例也对,提交判题就报错,学员完全不知道去哪查。
原因:数组越界在C++里不一定会立刻崩溃,它悄悄改写了相邻内存的值,导致某个循环多跑一次或某个变量莫名变化。语法上没错,运行时报错,这是零基础学员最难接受的一类问题。
解决:从第一节课接触数组开始,就强制要求数组开大一点,并养成“下标从0到n-1”的口头禅。我会在幻灯片上放一张对比图:左边是int a[100],右边写着“可以用的范围:a[0] ~ a[99]”。每写一次数组,都让学生在代码注释里标出合法下标范围。到后来,这变成一种条件反射,考试时能少丢一多半潜在分。
5.2 cin >> n[0] 被当成“输入整个数组”:声明和赋值混为一谈
现象:输入n个数的题目,学员写了cin >> n;后直接写cin >> n[0];,然后困惑“为什么只读进一个数”。
原因:学员把n既当作“数组长度变量”又当作“数组本体”,概念上完全混淆。这种现象在变量名起得不好的学员身上尤其高发,比如用n做数组名、用a做长度变量名。
解决:集训第一天就定死命名规则。数组永远用arr这种明确单词,长度用n,并且练习用“读入n个数”的标准三段式:
int n; cin >> n; int arr[100]; for (int i = 0; i < n; i++) { cin >> arr[i]; // 逐个读入,下标从 0 开始 }这段代码我会让学员连抄三遍,不换任何内容。原因是我发现很多学员抄第一遍时手和脑是分离的,抄到第三遍才会问“为什么arr[100]不写成arr[n]”。这个问题一旦问出来,说明他真正开始思考数组声明与数组下标的关系了。
5.3 循环少写一个等号就死循环:边界条件要数手指
现象:程序运行后,光标一直闪,控制台没有输出,最后只能关掉窗口。
原因:循环条件写成了i < n,而i的初始值或增量让i永远无法满足退出条件。常见场景是从i = 1开始,条件写成i <= n,却在循环体里忘记i++。
解决:在讲循环时引入一个“数手指”的习惯。每个学员伸出左手,从1数到5,然后问“我要数几次才到5?”答案当然是5次,但for (int i = 1; i < 5; i++)只执行4次。这个物理动作能帮学员把抽象边界变成身体记忆。之后每次写完循环,先问自己:“如果n等于1,这个循环会执行几次?如果n等于最大值,会执行几次?”这两个问题覆盖了90%的循环边界错误。
5.4 int 爆掉:数据范围意识要从第一节课立起来
现象:题目计算“1乘2乘3乘…乘n”,学员用int sum = 1,本地测试n=5是对的,但提交后在大数据点全部错误。
原因:int的取值范围约到21亿,一旦中间结果超过这个范围就会溢出。零基础学员完全没有“数据范围”的概念,以为只要变量类型对了就能算。
解决:每道例题都固定读一遍“数据范围”这一栏,并且只讲一条规则:如果最大可能结果超过10亿,就用long long。我会在幻灯片上把long long用大号字标出来,并在评论区写一行注释“用int会爆”。这里的关键不是讲解二进制位,而是通过重复让学员形成条件反射:看到“1 <= n <= 1000000”的题,直接想“n平方等于10的12次方,int装不下”,然后不加犹豫地写long long。
5.5 集训后期只刷题不听课:PPT节奏出问题
现象:最后一两次课,学员进教室就开始自己刷题,完全不听老师讲。你以为他是不紧张,其实他是听不进去、把刷题当成了心安理得的逃避。
原因:PPT节奏出了问题——前面几节课把新知识全部讲完,最后一两节课没有新内容,只有题目堆叠。零基础学员的专注度撑不住一整节课的刷题循环。
解决:最后一节课必须设计成“对抗遗忘”的模式,而不是“刷更多题”的模式。具体做法是把每道题讲两遍:第一遍让学员读题和圈范围,第二遍随机抽人讲代码思路。这种模式里学员不能低头刷题,因为每个人随时都可能被叫到。再加上限时模拟,每道题只给8到10分钟,到点必须交卷,课堂的紧张感就回来了。
6. 用一张“能力跟踪表”验证集训效果:最后一节课怎么收尾
集训的效果不能等到考试后才知道。我习惯在最后一节课用一张能力跟踪表做总检,这张表只有四列:读题正确、思路正确、语法正确、细节正确。每个学员每次作业的错因落进对应的列里,期末一看分布,就知道他真正的短板在哪。
| 学员 | 读题错误 | 思路错误 | 语法错误 | 细节错误 |
|---|---|---|---|---|
| A同学 | 3次 | 1次 | 5次 | 2次 |
| B同学 | 1次 | 4次 | 2次 | 6次 |
A同学语法错误多,但读题稳,让他做考前突击只需要刷基础语法;B同学细节错误多,多半是数组越界和边界条件问题,要重看循环与下标的专题。这张表最重要的用途是让学员自己看到“原来我错得最多的不是不会写,而是没看懂题”,比老师口头点评一百句都有效。
最后一节课的收尾动作是“学生讲题”。每道题的最终代码我不讲,让学员上台对着自己的错误卡讲,讲不清楚的地方,就说明那里还是虚的。限时模拟我放在倒数第二次课,真实计时,到点交卷,然后马上对答案,让情绪在考前释放完。
我以前总是把模拟考放在考试前一周,结果发现学员错了之后没有时间消化,带着焦虑上考场。后来调整成“先模拟、后收尾”的节奏,学员反而能趁着最后几节课把暴露的问题清掉。另外我还养成一个习惯:把课上讲过的每一个边界易错点浓缩成一张便签卡,正面写“n=1时循环执行几次”,背面写“先数手指再写条件”。到考前让学员把这张卡贴在笔袋里。
做集训课这些年,最大的教训就是:不要高估一节90分钟的课能装下的内容量,也不要低估一次“当堂错”带来的记忆深度。PPT只是载体,读题习惯、错误复盘和边界意识才是学员真正带走的东西。希望帮到你。
本文还有配套的精品资源,点击获取