ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

GESP C++一级集训:考纲六模块、程序骨架与易错点复习清单

GESP C++一级集训:考纲六模块、程序骨架与易错点复习清单

简介:面向GESP一级备考场景的集训课PPT,适合中小学编程学习者、集训班教师及家长用于课堂讲授与考前梳理。课件围绕CCF编程能力等级认证展开,先说明认证定位、考试时间与晋级规则,再梳理一级考纲中的计算机基础知识、变量定义与使用、基本数据类型、程序三大结构以及算术、关系和逻辑运算。操作层面涵盖Dev-C++集成环境、C++程序基本框架、cout格式化输出、cin输入、变量命名规则与简单运算,并安排打印图形、两数求和差乘除等课堂练习,方便教师按“温故知新—课程内容—过关测验—课后练习”组织教学。压缩包共1个pptx文件,约19.99MB,页面完整,可直接投影授课或用于自学复盘。已有1615人学习,适合需要快速建立一级知识框架、明确备考重点的读者参考。

1. 一级知识地图:从考试规则到第一行 cout 的整体轮廓

GESP 一级的集训内容摊开看像一个文件夹,其实只有六层:考试规则、开发环境、程序骨架、输出、变量、输入。前两层回答“考什么、怎么给分”,中间把 C++ 的五行骨架拆到每一行,再往下是 cout 与 cin 这对输入输出搭档,最后落到变量声明和四则运算。整条路径是单向的——骨架立不起来,输出写不对;输出写不对,变量算得再准也没地方显示。它适合两类人:正在准备一级、想把零散课件串成一张网的学习者;以及已经能照着样例敲代码、但一离开答案就不知道从哪写起的 k12 编程学习者。地图先给到这里,后面按模块逐个说清楚重点落在哪。

2. 考试规则与分数结构:级别、场次与题型怎么分布

2.1 级别、场次与时长:一年四次机会怎么用

C++ 方向一共分 1 到 8 级,每年 3、6、9、12 月各有一场,也就是一年四次报考窗口。1 到 4 级每场 2 小时,5 到 8 级每场 3 小时,卷面满分统一 100 分。规则里还有一条容易被忽略:第一级必须考,之后每一级得分在 90 分(含)以上,可以跨过一级直接报下一级。

这条规则直接决定了复习策略。2 小时的考场时间要装下 15 道单选、10 道判断和 2 道编程题,如果不做时间切分,很容易在选择题上磨太久,最后编程题只剩二十分钟。合理的切法是客观题 30 到 40 分钟,两道编程题留 60 分钟,剩下的时间回头检查拼写和分号。跨级那条 90 分线更狠:它要求客观题几乎不丢分,编程题还得接近满分,容错空间比“通过”小得多。

项目1–4 级5–8 级
考试时长2 小时3 小时
卷面满分100 分100 分
考试月份3、6、9、12 月3、6、9、12 月
跨级条件本级 ≥ 90 分可跨一级本级 ≥ 90 分可跨一级

2.2 题型与分值:30 + 20 + 50 的结构

一级卷面由三块拼成:单选题 15 题、每题 2 分,共 30 分;判断题 10 题、每题 2 分,共 20 分;编程题 2 题、每题 25 分,共 50 分。客观题和编程题正好各占一半,这意味着任何一半塌掉,整张卷子都很难看。

题型题量单题分值合计主要考查点
单选题15230概念记忆、读代码、语法细节
判断题10220规则辨析、易混概念
编程题22550输出格式、变量运算、简单逻辑

单选题里读代码的题占比不低,常见形式是给一段带 cout 的程序,问屏幕上打印什么。这类题不考你写不写得出来,只看你能不能按顺序把每一步的值推对,所以平时练习时“嘴上念一遍执行过程”比“看一眼觉得对”有用得多。判断题则是另一种画风,题干里经常出现“一定”“必须”“只能”这类绝对化表述,一级的知识点大多是“通常如此”而不是“绝对如此”,见到绝对化词先打个问号。

2.3 一级考纲六块内容与复习优先级

一级考纲列了六块:计算机历史与基础知识、变量的定义与使用、基本数据类型、程序三大结构、基本运算(算术、关系、逻辑)、输入与输出。这六块不是平均用力,梳理下来会发现它们分成两个梯队。

考纲模块具体内容常见考法复习优先级
计算机历史与基础发展简史、基本常识单选记忆题中
变量定义与使用声明语法、命名规则单选、判断、编程高
基本数据类型int、float、double、char单选辨析、编程高
程序三大结构顺序、选择、循环读代码、概念判断中
基本运算算术、关系、逻辑编程题主力高
输入与输出cout、cin编程题必经之路高

优先级高不等于其他三块可以放弃。历史和基础常识属于“看一眼就能记住”的记忆题,投入产出比其实很高;三大结构在一级更多以“读一段代码判断执行顺序”的形式出现,不需要写复杂循环。真正需要动手练到形成肌肉记忆的,是变量声明、四则运算和 cout 的输出格式——这三样是两道编程题的地基。

3. 程序骨架与开发环境:五行代码里藏着的考点

3.1 五行骨架逐行拆解

一级要求能默写出来的最小程序就五行,但每一行都有对应的考点,漏一行就编译不过。

#include <iostream> // 头文件:把输入输出相关的声明引进来 using namespace std; // 使用标准命名空间,省去每次写 std:: int main() { // 主函数,程序从这里开始执行 cout << "Hello, World!" << endl; // 向屏幕输出内容并换行 return 0; // 返回 0,表示程序正常结束 }

逐行看:#include <iostream>是预处理指令,行首的井号不能丢,尖括号里写的是头文件名,写成iostream.h是老式写法,一级环境里会报错。using namespace std;的作用是让后面直接写cout而不必写std::cout,分号照常要加。int main()是整个程序的入口,一对花括号圈出函数体,左花括号后面通常换行缩进。return 0;是给操作系统的返回值,0 代表正常结束,这一行漏掉在很多编译器上只是警告,但一级考试按规范写更稳。最后那行cout不是骨架的一部分,属于你要填进去的内容。

行号代码作用漏掉或写错的后果
1#include <iostream>引入输入输出声明cout、cin 未定义
2using namespace std;打开标准命名空间必须写std::cout
3int main()程序入口链接失败,无入口
4{ }圈定函数体语法错误
5return 0;返回正常状态多数情况仅警告

还有几个名字需要分清:iostream是头文件名,cout、cin、cerr、clog是它里面提供的几个流对象。cout 管标准输出,cin 管标准输入,cerr 和 clog 管错误信息输出,一级阶段用得最多的是前两个。

3.2 书写规范五条:不是形式主义

课件里列了五条书写要求:英文键盘书写、用 tab 键缩进、符号成对书写、注意空格、随手保存。这五条看起来像老师唠叨,实际上每一条都对应一类真实故障。

英文键盘这一条最要命。中文输入法下的分号是“;”,引号是“”,括号是“()”,编译器不认识这些字符,报错信息往往是一串看不懂的stray '\357' in program。缩进用 tab 而不是一串空格,是为了让花括号的层级一眼可见,一级程序短,看不出差别,等代码长到二十行,缩进乱掉的代码自己都读不下去。符号成对书写指的是打左括号的同时把右括号补上,引号同理,这样就不会出现“写到行尾发现少一个引号,回头找半天”的情况。随手保存更是血泪经验,编译运行的是磁盘上的文件,改了没保存,跑的还是上一版,看着屏幕上的旧结果怀疑人生。

3.3 编译报错先看哪一行

Dev-C++ 这类集成开发环境把编辑、编译、运行打包在一起,新人最容易把它当黑匣子:点一下按钮,下面弹出一堆红字,不知道从哪看起。其实定位方法很固定——先看报错列表里的第一条,再看它给的行号,然后往那一行的上一行瞄一眼。

#include <iostream> using namespace std; int main() { cout << "Hello" << endl // 这一行末尾少了一个分号 return 0; }

这段代码编译时会提示expected ';' before 'return',指向的是return 0;那一行。但真正的问题在上一行:编译器读到return才发现上一句没结束。所以看到“期望分号”类报错,第一反应应该是往上翻一行,而不是在报错行上反复改。常见的三类报错可以对照着记:

报错关键词大概率原因怎么改
expected ';'上一行语句没加分号往上一行补;
'cout' was not declared漏头文件或漏命名空间补#include <iostream>与using namespace std;
stray '\357' in program混入中文标点切英文输入法重打该符号

运行成功但结果不对,属于另一类问题,编译器不会提醒。这时候要看的是输出内容和预期差在哪:是少了一个换行,还是数字算错了,还是根本没输出。把每次运行的预期结果先写在纸上,再和屏幕对照,比盯着代码发呆有效。

3.4 三大结构在一级的落点

考纲把顺序、选择、循环三大结构都列了进去,但一级的编程题基本停留在顺序结构:从上到下,一行一行执行,没有分支也没有重复。课件里的“打印图形”练习是个典型例子,既可以用多行 cout 硬写出来,也可以套循环,前者更稳、更不容易在考场上出错。

选择结构和循环在一级更多是以读代码题的形式出现,给你一段带 if 或 for 的程序,问你最终输出什么。这类题不需要你会写,但需要你会“人肉执行”:把变量的值一步步写在旁边,遇到判断就分出两条路,遇到循环就数清楚跑了几轮。把这个习惯练熟,等后面级别真正要写分支和循环时,手感是现成的。

4. cout、cin 与变量:一级编程题的全部武器

4.1 cout 的插入流:项目、表达式与字符串

cout 的写法可以概括成一个公式:cout << 项目1 << 项目2 << … << 项目n;。两个尖括号的方向是从程序指向屏幕,可以理解成“把右边的值插进输出流里”。项目有两种常见形态,输出结果完全不同。

#include <iostream> using namespace std; int main() { cout << 1 + 3 << endl; // 项目是表达式,先算出 4,再输出 4 cout << "1 + 3" << endl; // 项目是字符串,原样输出 1 + 3 cout << "结果:" << 1 + 3 << endl; // 字符串和表达式可以串在一条链上 return 0; }

第一行没有引号,编译器把它当算式,先算后印;第二行加了双引号,引号内的内容一个字都不改地印出来。这就是为什么“输出两个数的和”和“输出这个算式”是两道不同的题。链式写法里每个项目前面都要有一个<<,漏一个就编译不过,多写一个也会出问题。

课件里的两个课堂练习正好对应两类基本功:打印指定图形,练的是多个 cout 的排版和换行位置;输出两个数的和、差、乘、除,练的是把表达式塞进输出流。图形题的关键不是算法,而是数清楚每一行前面有几个空格、行尾要不要换行,这些细节在 25 分的编程题里直接决定拿不拿满分。

4.2 endl 与格式化控制:换行背后的细节

endl出现在输出链末尾,作用有两个:换行,以及刷新输出缓冲区。一级阶段感受到的只是“换行”,但知道它还会刷新缓冲区,能解释一个现象——程序中途崩溃时,带 endl 的那部分内容往往已经显示在屏幕上,而只用"\n"的内容可能还卡在缓冲区里没出来。

cout << "第一行" << endl; // 换行并刷新 cout << "第二行" << "\n"; // 只换行,不主动刷新 cout << "第三行"; // 不换行,光标停在同一行末尾

三个写法的区别在输出多个数字时特别明显。如果连续输出cout << a << b;,两个数字会粘在一起,看起来像一个数;加上空格或 endl 才能分开。一级编程题经常要求“每行一个结果”或“同一行用空格隔开”,这两种格式要求对应完全不同的写法,读题时要把这句话圈出来。

格式化控制这块,一级能用到的主要是换行、空格和字符串拼接。更细的宽度控制、小数位数控制需要额外的头文件和函数,属于后面级别的内容,一级不必提前铺开,但要知道“输出格式是可以被精确控制的”,遇到题目要求对齐时不会以为做不到。

4.3 变量:声明语法与命名五条规则

变量的定义可以拆成“类型 + 变量名 + 分号”三段:int n;声明一个整型变量 n,int n = 5;在声明的同时赋值。类型决定这个容器能装什么、占多大,变量名是你之后调用它的凭证。

int c1 = 1; // 声明整型变量 c1,初值 1 int c2 = 2; // 声明整型变量 c2,初值 2 cout << c1 + c2 << endl; // 3 cout << c1 * c2 << endl; // 2 cout << c1 - c2 << endl; // -1 cout << c1 / c2 << endl; // 0,不是 0.5

命名规则有五条,每一条都能在选择题里单独出题:

规则正确示例错误示例
由字母、数字、下划线组成score_1score-1
不能以数字开头n11n
不能包含空格myScoremy Score
不能与关键字重名totalint
区分大小写teacher与Teacher是两个变量以为写错大小写没关系

最后一条是判断和单选的高频点。teacher、Teacher、TEACHER在 C++ 眼里是三个完全不同的名字,声明了其中一个,用另一个就会提示未定义。另外要注意cout并不是关键字,它是标准命名空间里的一个对象名,理论上你可以声明一个叫 cout 的变量,但那样后面的输出全都会出问题,实操中把它当保留字对待就行。

4.4 cin 读取与四则运算:方向别搞反

cin 的写法和 cout 正好相反:cin >> 变量1 >> 变量2;,尖括号方向是从屏幕指向变量。它不需要引号,也不需要在括号里写提示语——提示语要用单独的 cout 输出。

#include <iostream> using namespace std; int main() { int a, b; // 一次声明两个整型变量 cin >> a >> b; // 从键盘读两个数,空格或回车分隔 cout << a + b << endl; // 输出和 cout << a - b << endl; // 输出差 cout << a * b << endl; // 输出积 cout << a / b << endl; // 输出商,整数除法会舍去小数 return 0; }

这段程序里最值得盯的是最后一行。两个 int 相除,结果仍然按整数处理,5 除以 2 得到 2 而不是 2.5。课件里用 135 和 513 做练习,如果题目直接写cout << 135 / 513;,屏幕上出现的是 0,很多新手的第一反应是“程序坏了”,其实是整数除法的规则在起作用。想要小数结果,参与运算的两个数里至少有一个得是浮点类型。

cin >> a >> b;的读入顺序也要注意:先读到的给 a,后读到的给 b,中间用空格、制表符或回车隔开都可以。如果题目要求先读数量再读一串数,变量声明的顺序和读取的顺序必须一一对应,写反了不会报错,但结果会整体错位,这类错误在检查时最难发现。

5. 易漏点排查:一级考场上最容易丢分的五处

5.1 语法与书写类:分号、大小写、中文标点

易漏点一:中文标点混进代码。这是新手翻车率最高的一项,全角分号、全角引号、全角括号在屏幕上和英文符号长得几乎一样,编译器却完全不认。

漏在哪:写代码时输入法没切,或者从别处复制了一段带中文标点的内容,眼睛扫过去看不出区别,直到编译报出一串stray开头的乱码。

怎么补:养成“进编辑器先切英文输入法”的固定动作;看到stray类报错,直接去报错行重打标点,不要试图理解那串八进制数字;写完后用查找功能搜一遍全角分号。

易漏点二:变量名大小写不一致。声明时写int Sum = 0;,使用时写成sum,编译器提示未定义,人却盯着屏幕觉得明明写过。

漏在哪:英文单词的大小写在阅读时被大脑自动归一化了,尤其是全小写和首字母大写之间的差别。

怎么补:变量名统一用全小写加下划线的风格,声明和使用保持同一套写法;如果报未定义,先检查大小写,再检查拼写。

5.2 运算与类型类:除法的坑和int的边界

易漏点三:整数除法丢小数。5 / 2得 2,1 / 2得 0,一级编程题里凡是出现“平均”“比例”“除法”字样的题目,都可能踩到这个点。

漏在哪:数学课上的除法默认保留小数,写代码时下意识以为结果自然是 2.5,直到输出对不上才发现类型没换。

怎么补:读题时先判断数据是不是整数;确定要小数,就把参与运算的变量声明成double,或者把其中一个数写成2.0这样的浮点字面量;写完用一组能整除和不能整除的数据各测一遍。

易漏点四:变量声明了没给初值就直接参与运算。int s; cout << s + 1;这种写法能编译通过,但 s 里装的是不确定的残留值。

漏在哪:编译不报错、运行不崩溃,只是结果莫名其妙,在考场上很难往“没初始化”上想。

怎么补:声明变量时顺手给个初值,int s = 0;只多敲四个字符,能省掉一整类玄学问题;累加用的变量尤其要记得清零。

5.3 输入输出类:方向、引号与换行

易漏点五:cin 和 cout 的箭头方向写反。把cin >> a;写成cin << a;,或者把cout <<写成cout >>。

漏在哪:两个符号长得对称,打字时手指比脑子快,加上编译器的报错信息往往指向类型不匹配,很难一眼看出是方向问题。

怎么补:记一个固定联想——数据从键盘流进变量,所以 cin 的箭头指向变量;数据从变量流到屏幕,所以 cout 的箭头指向屏幕。写完后逐个扫一眼箭头方向再编译。

易漏点触发场景检查动作
中文标点输入法未切换报错行重打符号
大小写不一致长变量名核对声明与使用
整数除法平均、比例类题目检查类型是否为 double
未初始化累加、计数变量声明时给初值
箭头方向反手快连续输入逐个核对 cin/cout

这五处有个共同特点:全都不是“不会做”,而是“会做但写错”。考场上真正拉开差距的往往不是难题,而是这些在平时练习里被样例答案遮住的小毛病。

6. 考前复习清单:把六块考纲过成一张自测表

复习到收尾阶段,最怕的是“感觉都会了,一写就卡”。比较有效的做法是把六块考纲拆成一张能打勾的自测表,每一项都要求自己能在不看资料的情况下完成,而不是“看着眼熟”。

自测项达标标准不达标就先补
默写程序骨架五行代码一次写对,分号、头文件、命名空间齐全第 3 章 3.1
输出表达式与字符串能说清cout << 1+3和cout << "1+3"的差别第 4 章 4.1
变量命名五条给出一个变量名能判断是否合法第 4 章 4.3
四则运算能正确写出和、差、积、商四个输出第 4 章 4.4
整数除法知道5/2等于几,知道怎么改才能得 2.5第 5 章 5.2
cin 读入能写出一行读两个数的语句第 4 章 4.4
报错定位看到 expected ';' 知道往上一行看第 3 章 3.3
分值结构能说出三种题型各多少分第 2 章 2.2

表格之外还有两个具体技巧值得试。第一个是纸上跑代码:拿一道读代码的选择题,把每个变量的当前值写在一张纸的右边,每执行一行就更新一次,遇到输出就在纸上记下打印内容。这个动作慢,但能暴露“眼睛看懂了、脑子没跟上”的假会。第二个是故意写错:把分号删掉编译一次,把引号打成全角编译一次,看看报错长什么样。见过一次错误信息,考场上再遇到就不会慌。

我自己的教训来自一次模拟练习:代码逻辑全对,运行结果却是零分,查了十分钟才发现cout那一行末尾用的是全角分号,编译器报的错指向下一行,我一直在错误的位置改。从那以后我每次进编辑器,第一件事是把输入法切到英文,编译前再从头扫一遍所有标点,这个动作后来救过好几次。复习这件事没有捷径,把清单上的每一项都动手过一遍,比反复读课件踏实得多。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进