✅ GESP C++ 各等级详细知识点汇总
🎯 一级(基础入门)
模块类别 | 详细知识点 |
1. 计算机基础 | - 计算机发展简史(ENIAC、图灵、冯·诺依曼结构等) - 软硬件构成(CPU、内存、I/O)- 操作系统基本概念(Windows / Linux) |
2. 编程环境 | - Dev C++的使用:新建、编辑、保存、编译、调试 - 程序输入输出语句:cin , cout , scanf , printf |
3. 程序基本要素 | - 标识符、关键字、常量、变量、表达式的概念 - 命名规则:不能以数字开头,不能包含非法符号如 - |
4. 数据类型 | - 整型:int , long long - 浮点型:float , double - 字符型:char - 布尔型:bool |
5. 运算符 | - 算术运算:+ , - , * , / , % - 自增自减:++ , -- - 逻辑运算:&& , || , ! |
6. 控制结构 | - 顺序结构- 分支结构:if , if-else , switch - 循环结构:for , while , do-while - 跳转语句:break , continue |
7. 输入输出处理 | - 整数与浮点数输入、输出控制 - 字符与ASCII转换原理(如 'A' = 65 ) - 多变量输入输出及格式控制 |
8. 注释与调试 | - 注释语法:单行 // ,多行 /* */ - 调试技巧:逐步执行、输出中间变量值进行检查 |
9. 常见逻辑判断类题型 | - 判断奇偶、倍数、质数、完全平方数、立方数、兄弟数(形如 N = X*(X+1)) |
10. 常用算法思想初步 | - 枚举法- 模拟法 - 基础逻辑组合运算 - 四舍五入 (x+5)/10*10 |
🧩 二级(基础结构与语法拓展)
模块类别 | 详细知识点 |
1. 存储与网络基础 | - 内存分类:RAM、ROM、Cache 区别与作用 - 网络分层模型:TCP/IP 四层、OSI 七层 - 网络划分与子网掩码、IP 地址概念 |
2. 编程语言与流程图 | - 程序设计语言分类:机器语言、汇编语言、高级语言(如 C++、Python) - 常见编程语言比较 - 流程图:基本图形符号、顺序/选择/循环结构的绘制与阅读 |
3. ASCII 与类型转换 | - ASCII 编码表常见字符:如 'A' = 65 , 'a' = 97 , '0' = 48 - 类型转换:显式(强转)、隐式(自动转换) |
4. 分支与循环结构进阶 | - 多层 if-else 嵌套 - switch-case 嵌套与缺省分支 - 多重循环嵌套(如 for 套 while ) |
5. 数学函数使用 | - abs() 绝对值 - sqrt() 平方根 - max() , min() 取最大最小值 - rand() 生成伪随机数(通常结合 srand() 使用) |
6. 数据类型扩展 | - 类型混合计算与转换:如 int 与 float 运算结果为 float - 强制类型转换:(int)(x + 0.5) 用于四舍五入 - 类型范围差异可能引发的精度问题 |
7. 多层逻辑表达式 | - 多条件组合:如 (N % 2 == 0) && (N % 3 == 0) - 条件顺序的重要性 - if-else if-else 结构分支覆盖 |
8. 程序结构图与算法分析 | - 可视化编程结构图的阅读与填写 - 简单程序流程模拟、变量追踪测试 - 判断代码死循环与逻辑不完整结构 |
9. 数值类问题技巧 | - 常见模型:求余数分析、因数和倍数判断 - 特殊技巧:(a+3)/4*4 取大于等于 a 的最小 4 的倍数 - 代码中容易出错的顺序问题(如自增时机) |
10. 综合模拟与调试能力 | - 通过中间变量输出进行调试 - 常见错误调试如:赋值符号错误 = vs == - 多组输入输出调试与条件测试场景覆盖 |
🥈 三级(进制、位运算、基础算法)
模块类别 | 详细知识点 |
1. 数据编码基础 | - 二进制编码方式:原码、反码、补码的定义与转换规则 - 补码用于计算机中整数表示,需掌握带符号数补码求法 |
2. 进制转换 | - 二/八/十/十六进制之间的相互转换 - 常见如:十进制转二进制、十六进制转十进制等 - 0x1A = 26 ,0b1010 = 10 等基本理解 |
3. 位运算基础 | - 位操作符:& (按位与)、| (按位或)、~ (按位取反)、^ (按位异或) - 位移运算:<< 左移,>> 右移 - 二进制模拟与快速乘除的应用 |
4. 算法思想与描述 | - 算法三种描述方法:自然语言、流程图、伪代码 - 学会将题目转化为操作步骤、逻辑块 - 算法调试与变量流程分析基础 |
5. 枚举算法模型 | - 穷举所有可能解:如暴力判断区间中所有数是否满足某条件 - 常见应用如:枚举质数、平方数、符合某规则的数对/三元组 |
6. 模拟算法模型 | - 按题意模拟过程,如进位、借位、推演计数器变化等 - 特点是“按实际过程一步步推进”,而非公式化 - 如:图书馆老鼠、报数跳过等 |
7. 一维数组基础操作 | - 定义、赋初值、遍历、计数 - 使用循环访问数组元素,如 for (int i = 0; i < n; i++) cout << a[i]; - 注意数组越界问题 |
8. 字符串处理基础 | - 字符串函数基础:求长度、大小写转换、字符提取 - 查找/分割/替换字符串操作,如:s[i] , toupper(s[i]) - 简单的正序与逆序判断 |
9. 条件复合判断 | - 条件嵌套组合,如 (x % 2 == 0 && x % 3 != 0) - 多条件组合嵌套 if-else if - 条件执行顺序及分支逻辑的陷阱 |
10. 数组与字符串结合 | - 输入一串整数或字符,统计/处理其中某些类型(如统计奇数、美丽数字) - 利用数组完成数字统计、条件计数等操作 - 字符串中提取数字/字母等操作 |
🏅 四级(函数、结构体、排序)
模块类别 | 详细知识点 |
1. 指针初识 | - 指针的定义与基本操作:声明、赋值、解引用 *p - int *p = &x; 表示指针指向变量地址 - *p = 10; 代表修改指针所指变量的值 |
2. 二维/多维数组 | - 二维数组定义:int a[3][4]; - 访问方式如:a[i][j] - 多维数组在循环中的遍历和应用(如矩阵加法) |
3. 结构体使用 | - 自定义结构体类型:struct Student { ... }; - 使用结构体数组、结构体嵌套 - 结构体作为函数参数传递与使用 const 修饰 |
4. 函数定义与调用 | - 函数声明与定义 - 实参与形参,参数作用域 - 参数传递方式:值传递、引用传递(& )、指针传递 |
5. 作用域与变量生命周期 | - 全局变量与局部变量区别 - 函数中变量作用范围 - 局部变量不能跨函数使用;全局变量可被多个函数共享 |
6. 递推算法入门 | - 构造递推关系:如 f(n) = f(n-1) + n - 在循环中实现等价递推公式 - 用递推解决斐波那契数列、数字计数问题等 |
7. 排序算法基础 | - 冒泡排序、选择排序、插入排序 - 时间复杂度(冒泡/插入/选择均为 O(n²)) - 判断稳定性与适用场景 |
8. 文件操作与重定向 | - 使用 freopen() 实现文件读写 - 简单文本文件 读(fscanf)/写(fprintf) 操作 - C++流方式使用 ifstream , ofstream |
9. 异常处理机制 | - try-catch 结构初步 - 捕捉基本类型异常,如 int , char* - 简单语法了解:try { ... } catch(...) { ... } |
10. 算法复杂度初步 | - 分析常见算法时间复杂度:O(1)、O(n)、O(n²)、O(log n) - 利用循环嵌套次数估计复杂度 - 空间复杂度理解:变量/数组/递归栈等影响 |
🏆 五级(数论与核心算法)
模块类别 | 详细知识点 |
1. 初等数论基础 | - 最大公约数(GCD):使用辗转相除法(欧几里得算法) - 最小公倍数(LCM):lcm(a,b)=a*b/gcd(a,b) - 判断素数、合数、奇偶性、因数与倍数关系 |
2. 高精度计算(模拟) | - 数组实现高精度加法、减法、乘法、除法 - 字符串/数组表示大整数,每位反存 - 常见输入处理:getline , reverse , char - '0' 转换 |
3. 链表基本操作 | - 单链表:定义节点结构体,基本插入、删除、遍历操作 - 双向链表、循环链表介绍与定义 - 链表在OJ环境中用数组模拟实现 |
4. 素数筛法 | - 埃氏筛法:标记法 for (i = 2; i <= n; i++) if (!vis[i]) - 线性筛法:复杂度更优,为 O(n) - 可用于快速判定素数、统计范围内素数个数 |
5. 唯一分解定理 | - 所有正整数都能表示为若干个质数的乘积 - 实现质因数分解:从 2~√n 试除法 - 输出格式如 60 = 2^2 × 3 × 5 (考试常用计数写法) |
6. 二分算法模型 | - 二分查找(前提:数组有序) - 二分答案:如最大最小值、最小可行值问题 - 模板:while(l <= r) { mid = (l + r)/2; ... } |
7. 递归算法初步 | - 递归定义、出口条件 - 常见题型:阶乘、斐波那契数列、汉诺塔 - 分析时间复杂度与栈空间使用,避免栈溢出 |
8. 贪心算法基础思想 | - 每一步都选当前“局部最优”,尝试构建全局最优解 - 应用题:区间覆盖、最少选数问题、最大和路径等 - 判断贪心适用性的核心:最优子结构 |
9. 分治算法初识 | - 将问题拆分为子问题解决后合并:典型如归并排序、快速排序 - 时间复杂度:归并/快排为 O(n log n) - 通常结合递归实现 |
10. 复杂度综合理解 | - 对数复杂度:二分查找、平衡树等 O(log n) - 多项式复杂度:线性/平方级别算法 - 学会评估不同算法在输入量不同下的表现 |
🧠 六级(树结构与动态规划)
模块类别 | 详细知识点 |
1. 树的基础结构与遍历 | - 树的概念:根、子节点、叶子节点、深度、高度等 - 常见类型:完全二叉树、二叉排序树(BST) - 遍历方式:前序、中序、后序、层序遍历 |
2. 哈夫曼树与编码 | - 最优前缀编码构造过程:使用最小堆构建哈夫曼树 - 哈夫曼编码生成规则(左0右1) - 可用于压缩、编码效率分析等应用 |
3. 格雷编码原理 | - 相邻编码只变一位:G(i) = i ^ (i >> 1) - 在图像编码、数字通信中常见应用 - 能实现无歧义的状态转移表示方式 |
4. 搜索算法基础 | - 深度优先搜索(DFS):栈实现或递归 - 广度优先搜索(BFS):队列实现 - 区别:DFS先深入、BFS先广展 - 应用场景:连通块、迷宫、图染色等问题 |
5. 二叉树搜索算法 | - 查找值是否存在于BST中 - 插入/删除节点操作 - 分析搜索路径长度和性能(最坏O(n),平衡时O(log n)) |
6. 简单动态规划 | - 一维动态规划:如 dp[i] = max(dp[i-1], ...) - 状态设计与初始化 - 常见模型:爬楼梯、最大连续子段和、最长递增子序列 |
7. 01 背包问题初步 | - 给定容量和若干物品(每个只能选一次),求最大价值 - 状态定义:dp[i][j] 表示前i件物品容量为j时的最大价值 - 空间优化:滚动数组 O(n) 实现 |
8. 面向对象编程基础 | - 类的定义与构造:class Student { ... }; - 成员变量与函数的使用 - 特性介绍:封装、继承、多态 基础概念 |
9. 栈与队列的实现 | - 栈:先进后出(LIFO),操作:push , pop , top - 队列:先进先出(FIFO),操作:push , pop , front - 循环队列使用数组实现 |
10. 综合问题建模分析 | - 将问题转化为动态规划或图搜索 - 分析变量与状态间关系,构建状态转移方程 - 使用递归、循环、数据结构综合解决中型问题 |
🎓 七级(图论与高级动态规划)
模块类别 | 详细知识点 |
1. 数学库函数 | - 三角函数:sin(x) , cos(x) , tan(x) 等(角度需转弧度) - 对数函数:log10(x) (以10为底)、log2(x) (以2为底) - 指数函数:exp(x) (e^x) |
2. 二维动态规划模型 | - 状态定义 dp[i][j] ,表示二维子问题最优解 - 常见模型:最长公共子序列(LCS)、最长上升子序列(LIS) - 滚动数组优化空间:dp[j] 滚动代替 dp[i][j] |
3. 区间 DP 初识 | - 区间状态定义:dp[l][r] 表示 [l,r] 间的最优解 - 应用:区间合并、括号匹配、最小代价合并石子等 - 通常含三重循环:区间长度、起点、决策点 |
4. 图的基本定义 | - 图的元素:点、边、度数(入度、出度) - 有向图与无向图表示方式:邻接矩阵、邻接表 - 判断连通性、存图操作等基本知识 |
5. 图的遍历算法 | - 深度优先搜索(DFS):用于连通块、拓扑排序等 - 广度优先搜索(BFS):用于最短路、层次遍历 - 泛洪算法(Flood Fill):类似 BFS 多方向染色 |
6. 哈希表基础应用 | - 哈希函数构造、取模 % 映射散列地址 - 处理冲突方式:开放寻址、拉链法 - 常用 STL 容器:unordered_map , unordered_set |
7. 动态规划优化技巧 | - 滚动数组优化:dp[i%2][j] 代替二维 - 状态压缩:使用位运算压缩状态表示(例如子集状态) - 单调队列优化、斜率优化等高级优化思想初识 |
8. 多维状态建模 | - 三维 dp[i][j][k] 状态建模技巧 - 应用场景如:物品选取状态变化、子序列问题加条件 - 注意初始化与状态转移边界 |
9. 常见图论问题模型 | - BFS求最短路径,DFS搜索所有路径/方案数 - 图的染色、连通性判断 - 迷宫问题、岛屿数量、骑士跳等经典建模 |
10. 综合算法工程能力 | - 题意建模为图/动态规划/枚举/搜索问题 - 使用 STL 容器提高代码效率与可读性 - 熟练调试与验证边界条件、复杂输入处理 |
👑 八级(组合数学与算法优化)
模块类别 | 详细知识点 |
1. 计数原理基础 | - 加法原理与乘法原理:解决方案总数 = 各种情况相加或相乘 - 应用于路径数、方案数计算等组合性问题 - 理解互斥与独立事件在计数中的角色 |
2. 排列与组合 | - 排列:A(n, k) = n! / (n-k)! - 组合:C(n, k) = n! / (k!·(n-k)!) - 利用循环、递推或数学公式求解组合性问题 |
3. 杨辉三角与组合关系 | - 杨辉三角构造:C(n, k) = C(n-1, k-1) + C(n-1, k) - 理解其与组合数 C(n,k) 的对应关系 - 应用于组合、路径数、斐波那契类建模 |
4. 倍增法基础 | - 倍增查找/跳跃思想:如寻找某节点的第2^k个祖先 - 常见应用:快速求幂、LCA倍增、RMQ问题 - 时间复杂度降为 O(log n) 的优化手段 |
5. 基础几何与代数 | - 一元一次方程、二元一次方程求解 - 平面几何面积公式:三角形(1/2*底*高 )、圆(πr² )、矩形(长×宽 ) - 应用如判断图形重叠、交点、包围关系等 |
6. 图论综合算法应用 | - 最小生成树算法:Kruskal(并查集)、Prim(贪心) - 最短路径算法:Dijkstra(堆优化)、Floyd(多源最短路) - 熟悉路径表示与权值计算 |
7. 空间时间复杂度分析 | - 常见复杂度:O(1)、O(log n)、O(n)、O(n²)、O(n log n)、O(2^n)、O(n!) - 空间复杂度:变量、数组、递归栈、图结构的存储开销估算 |
8. 算法优化技巧 | - 数学公式优化:等差/等比数列求和替代循环 - DP优化:滚动数组、状态压缩、记忆化搜索 - 剪枝优化:搜索中提前终止无效分支 |
9. 综合模型建模能力 | - 将题意建模为组合问题、图论问题、DP状态、搜索路径 - 合理使用 STL 提升效率(如 priority_queue , map , set ) - 复杂输入处理技巧,如多行多维解析 |
10. 算法工程综合素养 | - 编写鲁棒性强、结构清晰的代码 - 注重调试技巧与边界测试 - 分析题目限制,选择合适算法设计和复杂度控制 |
🎉 以上是GESP C++ 一级至八级完整分层知识体系,接下来会根据每个知识点进行详细的归纳整理。