GESP C++ 考点笔记
按 CCF 官方考纲(C++ 一至八级认证标准)逐级整理 · 语法要点 + 易错提醒
1
一级 · 编程基础入门
掌握顺序、分支、循环三大结构,会用 DevC++ 独立编写调试程序。
1️⃣ 计算机基础与开发环境
- 计算机基本构成:CPU(运算器 + 控制器)、内存、I/O 设备,了解 Windows / Linux 基本操作。
- 集成开发环境 DevC++:新建文件 → 编写 → 保存(.cpp)→ 编译 → 运行 → 调试(断点、单步)。
- 程序注释:
// 单行与/* 多行 */,注释不参与运行。
2️⃣ 变量与基本数据类型
- 类型:
int(整数)、long long(大整数)、float/double(实数)、char(字符)、bool(布尔 true/false)。 - 命名规则:字母、数字、下划线组成,不能以数字开头,不能与关键字重复,区分大小写。
- 变量先定义再使用:
int a; a = 5;或int a = 5;(初始化)。 - 自增自减:
a++(先用后加)、++a(先加后用)。
3️⃣ 输入输出
- 流式:
cin >> a;读入,cout << a;输出(需#include <iostream>+using namespace std;)。 - 格式化:
scanf("%d",&a)、printf("%d\n",a);格式符%d(int)、%lld(long long)、%f(浮点)、%c(字符)。 - 换行:
cout << endl;或\n;保留小数printf("%.2f",x)或fixed<<setprecision(2)。
4️⃣ 运算符
- 算术:
+ - * / %;整数相除得整数(7/2=3),%为求余(7%2=1)。 - 关系:
> >= < <= == !=,结果为 true/false。 - 逻辑:
&&(且)、||(或)、!(非)。 - 三目运算:
a>b ? a : b取较大值。
5️⃣ 三大程序结构
- 顺序:从上到下依次执行。
- 分支:
if/if-else/if-else if-else/switch-case(记得 break)。 - 循环:
for(计数)、while(条件)、do-while(先做后判,至少执行一次);break跳出循环,continue跳过本次。
⚠️ 易错提醒:①
cin/cout 与 scanf/printf 不要混用;② 负数求余结果符号跟随被除数;③ int 最大约 21 亿,求和累乘用 long long;④ switch 每个 case 后要 break,否则会穿透。2
二级 · 语法拓展与嵌套
掌握多层分支/循环嵌套、类型转换与数学函数,独立完成综合案例。
1️⃣ 计算机存储与网络(常识)
- RAM 随机存储器(断电数据丢失)、ROM 只读存储器(固件)、Cache 高速缓冲存储器(CPU 与内存之间)。
- 网络分类:WAN 广域网 / MAN 城域网 / LAN 局域网;了解 TCP/IP 四层模型与 OSI 七层模型。
- IP 地址:如 192.168.1.1,四段 0-255。
2️⃣ 程序设计语言与流程图
- 语言分类:机器语言(0/1)→ 汇编语言 → 高级语言(C++、Python 等)。
- 流程图符号:起止框(圆角矩形)、处理框(矩形)、判断框(菱形)、流程线(箭头)。
3️⃣ ASCII 编码
- 记住三组关键码值:空格 32、"0" 48、"A" 65、"a" 97。
- 字符转数字:
int('A') → 65;数字转字符:char(65) → 'A';大小写相差 32。
4️⃣ 数据类型转换
- 隐式转换(自动):
int a = 3; double b = a; // 3.0;低精度向高精度提升。 - 强制转换:
double x=7.5; int y=(int)x; // 7(截断取整)。
5️⃣ 多层分支与循环嵌套
- 分支嵌套:先判外层条件再进入内层,注意
else与最近的if配对。 - 循环嵌套:外层循环控制行,内层循环控制列(如九九乘法表、打印三角形)。
6️⃣ 常用数学函数
abs(x)绝对值、sqrt(x)平方根(需要#include <cmath>)、max(a,b)/min(a,b)最值。- 随机数:
srand(time(0))播种 +rand()生成。
⚠️ 易错提醒:① 嵌套分支的
else 就近配对,必要时加 {};② 整数除法先转换再除:(double)a/b;③ 开方先判断负数;④ ASCII 大小写转换 ±32。3
三级 · 数组、字符串与算法
掌握编码/进制/位运算、一维数组与字符串,会用枚举法、模拟法解题。
1️⃣ 数据编码:原码、反码、补码
- 正数:原码 = 反码 = 补码;负数:反码 = 原码符号位不变其余取反,补码 = 反码 + 1。
- 计算机用补码存储负数,减法转化为加法。
2️⃣ 进制转换
- 十进制 → 二进制:除 2 取余倒序;二进制 → 十进制:按位权展开(8 4 2 1)。
- 常用:
0b二进制、0o八进制、0x十六进制(A-F 表示 10-15)。
3️⃣ 位运算
&按位与(全 1 才 1,常用于取末位 x&1)、|按位或、~取反、^异或(相同 0 不同 1,x^x=0)、<<左移(×2)、>>右移(÷2)。- 运算优先级低于算术与比较,加括号更安全。
4️⃣ 算法描述
- 三种描述方式:自然语言、流程图、伪代码;先想清楚再写代码。
5️⃣ 一维数组
- 定义:
int a[100];(下标从 0 开始);数组不能整体赋值,需逐元素赋值。 - 常见应用:求和、求最值、统计频次(桶计数)、逆序输出、筛选。
6️⃣ 字符串
- string 类型:
s.size()长度、s.substr(i,k)截取、s.find(t)查找、s.replace(...)替换。 - 大小写转换:遍历用 ASCII ±32 或
tolower/toupper。
7️⃣ 枚举法与模拟法
- 枚举法:把所有可能情况逐一尝试,找满足条件的解(如百钱百鸡、完美数)。
- 模拟法:按题目规则一步一步模拟过程(如走格子、报数问题)。
⚠️ 易错提醒:① 数组越界访问是高频 RE 原因,下标严格 < 长度;② 位运算与比较混用时加括号;③ 字符串下标从 0 开始;④ 桶计数注意值域上限防数组越界。
4
四级 · 函数、结构体与排序
掌握指针、函数参数传递、结构体、递推与三大排序算法,会文件读写。
1️⃣ 指针
- 定义:
int *p = &a;(取地址);解引用:*p即 a 的值。 - 指针作函数参数可以修改实参指向的变量。
2️⃣ 二维与多维数组
- 定义:
int a[3][4];(3 行 4 列,不包含变长数组);双重循环按行遍历。 - 应用:矩阵、图形打印(正方形、三角形)、地图。
3️⃣ 结构体
- 定义:
struct Student { string name; int score; };,可定义结构体数组、指针。 - 结构体作函数参数建议用引用(
const Student &s)避免拷贝。
4️⃣ 函数
- 声明、定义、调用三步;形参是定义处参数,实参是调用处传入的值。
- 作用域:局部变量(函数内)与全局变量(函数外,慎用)。
- 传递方式:值传递(拷贝,不改变实参)、引用传递(
&,改变实参)、指针传递(*,改变实参)。
5️⃣ 递推算法
- 由已知推未知:斐波那契
f[i]=f[i-1]+f[i-2];找到递推关系式是核心。
6️⃣ 排序算法(必考)
- 冒泡:相邻两两比较交换,每一轮把最大值"冒"到最后。
- 插入:把元素插入到已排序部分正确位置。
- 选择:每轮从未排序部分选出最小值放到最前。
- 三者时间复杂度均为 O(n²);稳定性:插入、冒泡稳定,选择不稳定。
7️⃣ 文件操作与异常处理
- 重定向:
freopen("in.txt","r",stdin); freopen("out.txt","w",stdout);。 - 异常处理:
try { ... } catch (...) { ... }了解即可。
⚠️ 易错提醒:① 值传递不会改变实参,需要修改必须用引用/指针;② 结构体数组排序前想清楚比较字段与升降序;③ 冒泡内层循环边界 n-1-i;④ 数组名作函数参数会退化为指针,函数内 sizeof 失效。
5
五级 · 初等数论与基础算法(欧几里得、筛法、二分、贪心、分治、高精度、链表)
笔记整理中
五级 · 初等数论与基础算法(欧几里得、筛法、二分、贪心、分治、高精度、链表)该级别笔记正在整理中,敬请期待。
6
六级 · 树、搜索与简单动态规划(二叉树、DFS/BFS、一维 DP、栈与队列)
笔记整理中
六级 · 树、搜索与简单动态规划(二叉树、DFS/BFS、一维 DP、栈与队列)该级别笔记正在整理中,敬请期待。
7
七级 · 图论与复杂动态规划(图遍历、二维 DP、哈希表、数学库函数)
笔记整理中
七级 · 图论与复杂动态规划(图遍历、二维 DP、哈希表、数学库函数)该级别笔记正在整理中,敬请期待。
8
八级 · 组合数学与算法优化(计数原理、排列组合、最短路、最小生成树)
笔记整理中
八级 · 组合数学与算法优化(计数原理、排列组合、最短路、最小生成树)该级别笔记正在整理中,敬请期待。
🔗 双教材分工与考纲覆盖率总览
+一本通 第四章(while/do-while)
+一本通 补全部理论考点
+初赛篇 第一章
/数据排序/递推算法
为什么这样切分:一、二级考纲以「语法 + 基础概念」为主,趣味教材的故事化例程更适合启蒙;三、四级开始要求「数组 → 函数 → 结构体 → 算法」,一本通的体系化讲解与配套题库正好匹配,且能直接衔接 CSP-J/S。
📌 教学衔接与备考提醒
- 一级别拖:一级知识点少,孩子上手快,建议每次课后都留家庭作业(趣味教材每课都有习题),保持手感,为三级抽象内容腾出缓冲。
- 二级理论集中突击:第 10–12 次课全是背记型内容,建议在考前一个月内上完,避免过早遗忘;考前一周用初赛篇的自测题再过一遍。
- 注意衔接断层:从趣味教材切到一本通,孩子会明显感到"变难、变枯燥"。三级第 1、3 次课(补码、位运算)抽象度高,多用直观演示,别急着赶进度。
- 一本通是"教材 + 题库":每节都有例题和习题(对应洛谷 B 系列题号),建议课堂讲例题、课后刷习题,形成"讲—练—测"闭环。
- 三级别教变长数组:考纲明确「C++ 一维数组基本应用(不包括变长数组)」,让孩子养成用常量的习惯,避免考试踩坑。
- 考试形式:1–4 级均为单选 15 道(2 分)+ 判断 10 道(2 分)+ 编程题 2 道(各 25 分),120 分钟,60 分及格;每级最后 1 次课务必做限时模考。