GESP-C++考试(三级)考试重点 (附:【编程题模板】大全)
一、GESP-C++考试(三级)考试重点
1、C++ 三级考试的【官方定位】
三级是从“语法”走向“算法”的第一关
(1)官方目标总结一句话是:
👉 能使用数组、字符串,配合枚举法和模拟法,解决实际问题
(2)📌 注意:
- 三级考试,不强调算法竞赛
- 不追求最优复杂度
- 强调“规则理解 + 程序实现”
2、C++ 三级【知识点总览】
按照大纲,三级内容可以清晰拆成 6 大块:
① 数据编码(理解型知识)
(1)知识重点:
原码、反码、补码
(2)考试要求
- 理解概念
- 会判断
- 简单的手算
(3)常见考法
- 选择 / 判断题
- 不作为复杂编程核心
掌握“原码、反码、补码”的相关知识
② 进制转换(必考)
(1)知识重点:
二进制、八进制、十进制、十六进制
(2)考试要求
- 十进制 ↔ 二进制
- 简单十六进制字符处理
- 配合字符串 / 位运算
(3)常见考法
- 编程题
- 枚举 + 进制拆分
进制转换是三级考试的重点
③ 位运算(三级特色重点)
(1)知识重点:
&、|、~、^、<<、>>
(2)考试要求
- 会使用
- 能与枚举 / 判断配合
(3)常见用途
- 判断奇偶
- 统计二进制 1 的个数
- 构造条件判断
要了解位运算的作用,活学活用
④ 算法的概念与描述
(1)知识重点:
自然语言描述、流程图描述、伪代码描述
枚举法、模拟法
(2)实际考试中体现为:
- 会不会把题目“翻译成程序”
- 是否逻辑清楚
(3)重点算法
| 算法 | 地位 |
|---|---|
| 枚举法 | ★★★★★ |
| 模拟法 | ★★★★★ |
(4)📌 核心思想
所有可能 → 一个个试
所有步骤 → 一步步做
⑤ 数组
(1)知识重点:
C++ 数组基本应用
(2)必会内容
- 数组定义、读入
- 遍历
- 统计 / 比较
- 模拟过程
(3)常见题型
- 最大 / 最小
- 计数
- 前缀累加
- 双重循环枚举
考试中,数组长度不大,重逻辑不重性能
⑥ 字符串及其函数(高频)
(1)知识重点:
字符串大小写转换、搜索、分割、替换等
(2)实际要求
stringlength()substr()- 字符遍历
- ASCII 判断
(3)常见考法
- 统计字符
- 字符变换
- 拆分字符串
- 简单规则判断(如回文)
字符串的知识与运用
3、三级考试中【明确“不考”的内容】
这是家长和学生最容易焦虑的点,可以直接讲清楚:
❌ 不考内容包括:
- 递归
- 排序算法
- DFS / BFS
- 动态规划
- 贪心算法(作为概念不出现)
📌 若题目“像”这些
👉 本质仍是 枚举 / 模拟
4、三级编程题【整体特征】
(1)根据大纲+历年真题:
- 编程题:2 题
- 每题:25 分
- 数据范围小
- 不卡时间
(2)代码基础特征
for / while很多- 条件判断清晰
- 输出格式严格
二、三级考试编程题模板
1️⃣:数组 + while / for 模拟(三级最常见)
(1)📌 代表代码
while (1) { // 找最大 // 找最小 // 修改数组 cnt++; } (2)👉 相关考点
- 数组
- 多次循环
- 状态是否能正确终止
✅ 三级通用模板
int a[N]; int n, ans = 0; while (true) { // 1️⃣ 找关键元素(最大 / 最小 / 第一个满足) int pos = -1; // 2️⃣ 判断是否结束 if (结束条件) break; // 3️⃣ 修改数组(模拟规则) a[pos] -= x; // 4️⃣ 统计答案 ans++; } 🧠 枚举+模拟算法
“这类题不是算,是一步一步 枚举 或者 模拟 出来的。
2、模板 2️⃣:日期 / 日历类【强模拟】
(1)📌 代表代码(判断星期几)
w = (w + days[i] - 1) % 7 + 1; (2)👉 相关考点
- 模拟真实世界规则
- 取模
- 循环推进状态
(3)✅ 三级通用模板
int state = 初始状态; for (int i = 起点; i <= 终点; i++) { state = (state + 变化量) % 周期; } (4)📌 核心思想
根据要求,取模“挪状态”
3、模板 3️⃣:顺序遍历
(1)📌 代表代码
a[i] = max(a[i - 1] + 1, a[i]); (2)👉 相关考点
- 顺序遍历
- “前一个影响后一个”
(3)✅ 三级通用模板
for (int i = 2; i <= n; i++) { if (a[i] 不满足规则) { a[i] = 修正后的值; } ans += a[i]; } (4)🧠核心思想
不回头、不回改,只往前推
4、模板 4️⃣:位运算
┌───────────────┐ │ 1️⃣ 基本位运算符 │ └───────────────┘ & : 按位与(AND) | : 按位或(OR) ^ : 按位异或(XOR) ~ : 按位取反(NOT) << : 左移(乘2^n) >> : 右移(除2^n, 整数除法向下取整) 例子: int a = 5; // 0101 int b = 3; // 0011 int c = a & b; // 0001 -> 1 int d = a | b; // 0111 -> 7 int e = a ^ b; // 0110 -> 6 int f = ~a; // 11111111111111111111111111111010 -> -6 (补码) int g = a << 1;// 1010 -> 10 int h = a >> 1;// 0010 -> 2 ┌───────────────┐ │ 2️⃣ 判断奇偶 │ └───────────────┘ int x; bool isEven = (x & 1) == 0; // 偶数 bool isOdd = (x & 1) == 1; // 奇数 ┌───────────────┐ │ 3️⃣ 统计二进制 1 的个数│ └───────────────┘ int cnt = 0; while (x) { cnt += (x & 1); x >>= 1; } 5、模板 5️⃣:字符串
(1)C++ string 函数速查表
┌─────────────┐ │ 1️⃣ 创建与赋值 │ └─────────────┘ string s; // 空字符串 "" string s("Hello"); // 直接初始化 string s2(s); // 拷贝初始化 string s3(5, 'x'); // 重复字符 "xxxxx" s = "World"; // 赋值 s.assign("New"); // assign函数赋值 s.assign(s2, 1, 3); // 从s2索引1开始取3个字符 ┌─────────────┐ │ 2️⃣ 访问与遍历 │ └─────────────┘ s[i] / s.at(i) // 访问字符 s.front() / s.back() // 首尾字符 for(char c : s) // 遍历 cout << c; ┌─────────────┐ │ 3️⃣ 修改与拼接 │ └─────────────┘ s += "abc"; // 拼接 s.append("def"); // 拼接 s.append(s2, 0, 3); // 拼接子串 s.replace(0, 2, "XY"); // 替换 s[0] = 'A'; // 修改字符 s.at(1) = 'B'; ┌─────────────┐ │ 4️⃣ 查找 │ └─────────────┘ s.find("abc") // 返回索引 s.find('c') s.rfind('c') // 反向查找 s.find_first_of("aeiou") // 第一个匹配的字符 s.find_last_of("aeiou") // 最后一个匹配的字符 结果为 string::npos 表示未找到 ┌─────────────┐ │ 5️⃣ 比较 │ └─────────────┘ s1 == s2 s1 != s2 s1.compare(s2) // <0 s1<s2, 0相等, >0 s1>s2 ┌─────────────┐ │ 6️⃣ 子串 │ └─────────────┘ s.substr(pos, len) // 从pos开始,取len个字符 ┌─────────────┐ │ 7️⃣ 插入与删除 │ └─────────────┘ s.insert(pos, "abc") // 插入 s.erase(pos, len) // 删除 s.pop_back() // 删除最后一个字符 ┌─────────────┐ │ 8️⃣ 大小与清空 │ └─────────────┘ s.size() / s.length() // 长度 s.empty() // 是否为空 s.clear() // 清空 ┌─────────────┐ │ 9️⃣ 其他工具 │ └─────────────┘ toupper(c) / tolower(c) // 大小写转换 sort(s.begin(), s.end()) // 排序 reverse(s.begin(), s.end())// 反转 (2)💡 记忆小技巧:
- 创建/赋值 →
=,assign(),string(n, c) - 访问/修改 →
[],at(),front/back,replace - 拼接/插入 →
+=,append(),insert() - 删除/清空 →
erase(),pop_back(),clear() - 查找/子串 →
find(),rfind(),substr() - 大小/比较 →
size(),empty(),compare() - 工具 → 排序、反转、大小写转换
6、模板 6️⃣:字符画 / 输出模拟
(1)📌 代表代码
for (int row = 0; row < 5; row++) { for (char digit : n) { // 每个字符 → 一块图形 } } (2)👉 相关考点
- 双层循环
- 先看图形,找出规律,按照规律输出图形
- 输出格式是否精确
(3)✅ 三级通用模板
for (int row = 0; row < H; row++) { string; for (每个元素) { line += 当前行应该输出的内容; } cout << line << endl; } (4)🧠 考试提醒
三级很多人不是不会,是“少空格 / 多空格”
7、模板 7️⃣:字符串拆分 + 局部判断
(1)📌 代表代码
for(int j=2;j<=m-2;j++){ s1 = s.substr(0,j); s2 = s.substr(j,...); // 判断 s1, s2 } (2)👉 相关考点
substr- 枚举分割点
- 对每一段做判断(回文)
(3)✅ 三级通用模板
for (int cut = L; cut <= R; cut++) { string left = s.substr(0, cut); string right = s.substr(cut); if (判断 left && 判断 right) { // 满足条件 } } (4)🧠 考试提醒
“先切,再查”
8、模板 8️⃣:进制转换
(1)📌 十进制 → 二进制
int n; cin >> n; while (n > 0) { cout << n % 2; n /= 2; } (注意:顺序反的,要看题目要求,是不是倒回来)
(2)📌 字符 → 数字(十六进制)
if (c >= '0' && c <= '9') val = c - '0'; else val = c - 'A' + 10; 9、模板 9️⃣:数学函数
(1)C++ 常用数学函数:
#include <iostream> #include <cmath> // 数学函数头文件 #include <algorithm> // max, min using namespace std; int main() { // ----------------------------- // 1️⃣ 绝对值 // ----------------------------- int a = -5; double b = -3.14; cout << abs(a) << endl; // 5 cout << fabs(b) << endl; // 3.14 (浮点数绝对值) // ----------------------------- // 2️⃣ 取整函数 // ----------------------------- double x = 3.7, y = -3.7; cout << ceil(x) << endl; // 4 向上取整 cout << floor(x) << endl; // 3 向下取整 cout << round(x) << endl; // 4 四舍五入 cout << round(y) << endl; // -4 // ----------------------------- // 3️⃣ 幂与开方 // ----------------------------- cout << pow(2,3) << endl; // 2^3 = 8 cout << sqrt(16) << endl; // 4 cout << cbrt(27) << endl; // 立方根 3 // ----------------------------- // 4️⃣ 最大值 / 最小值 // ----------------------------- int m = 10, n = 20; cout << max(m,n) << endl; // 20 cout << min(m,n) << endl; // 10 return 0; } (2)💡 记忆小技巧:
- 绝对值 →
abs/fabs - 向上 / 向下 / 四舍五入 →
ceil/floor/round - 平方根 / 幂 →
sqrt/pow - 最大/最小值 →
max(a,b)/min(a,b)
10、【三级编程题万能总模板】
#include <bits/stdc++.h> using namespace std; int main() { // 1️⃣ 输入 int n; cin >> n; // 2️⃣ 定义数据结构 // int a[ ]; // string s; // 3️⃣ 核心算法 // 枚举 / 模拟 / 位运算 // 4️⃣ 输出 cout << ans << endl; return 0; } 三、总结
🎯 GESP C++ 三级编程题考的是:能不能看懂题能不能用循环“照着规则写程序”
而不是:算法技巧编程速度