GESP-C++ 三级考试重点与编程题模板汇总
本文介绍 GESP-C++ 三级考试的核心考点与编程模板。考试定位为从语法走向算法的第一关,强调规则理解与程序实现,不涉及递归、排序或动态规划等复杂算法。核心知识点包括数据编码、进制转换、位运算、枚举法、模拟法、数组及字符串处理。文章提供了九类常见编程题模板,涵盖数组循环、日期模拟、顺序遍历、位运算、字符串操作、字符画输出及进制转换等,并附带常用数学函数速查,帮助考生掌握解题思路与代码结构。

本文介绍 GESP-C++ 三级考试的核心考点与编程模板。考试定位为从语法走向算法的第一关,强调规则理解与程序实现,不涉及递归、排序或动态规划等复杂算法。核心知识点包括数据编码、进制转换、位运算、枚举法、模拟法、数组及字符串处理。文章提供了九类常见编程题模板,涵盖数组循环、日期模拟、顺序遍历、位运算、字符串操作、字符画输出及进制转换等,并附带常用数学函数速查,帮助考生掌握解题思路与代码结构。

三级是从语法走向算法的第一关
能使用数组、字符串,配合枚举法和模拟法,解决实际问题。
按照大纲,三级内容可以清晰拆成 6 大块:
知识重点: 原码、反码、补码
考试要求:
常见考法: 选择/判断题,不作为复杂编程核心。掌握原码、反码、补码的相关知识。
知识重点: 二进制、八进制、十进制、十六进制
考试要求:
常见考法: 编程题,枚举 + 进制拆分。进制转换是三级考试的重点。
知识重点: &、|、~、^、<<、>>
考试要求:
常见用途: 判断奇偶、统计二进制 1 的个数、构造条件判断。要了解位运算的作用,活学活用。
知识重点: 自然语言描述、流程图描述、伪代码描述;枚举法、模拟法。
实际考试中体现为:
重点算法:
| 算法 | 地位 |
|---|---|
| 枚举法 | ★★★★★ |
| 模拟法 | ★★★★★ |
核心思想: 所有可能 → 一个个试;所有步骤 → 一步步做。
知识重点: C++ 数组基本应用
必会内容:
常见题型: 最大/最小、计数、前缀累加、双重循环枚举。考试中,数组长度不大,重逻辑不重性能。
知识重点: 字符串大小写转换、搜索、分割、替换等
实际要求:
常见考法: 统计字符、字符变换、拆分字符串、简单规则判断(如回文)。字符串的知识与运用。
这是家长和学生最容易焦虑的点,可以直接讲清楚:
❌ 不考内容包括:
📌 若题目像这些,本质仍是枚举/模拟。
while (1) {
// 找最大
// 找最小
// 修改数组
cnt++;
}
int a[N];
int n, ans = 0;
while (true) {
// 1️⃣ 找关键元素(最大/最小/第一个满足)
int pos = -1;
// 2️⃣ 判断是否结束
if (结束条件) break;
// 3️⃣ 修改数组(模拟规则)
a[pos] -= x;
// 4️⃣ 统计答案
ans++;
}
枚举 + 模拟算法: 这类题不是算,是一步一步枚举或者模拟出来的。
w = (w + days[i] - 1) % 7 + 1;
int state = 初始状态;
for (int i = 起点; i <= 终点; i++) {
state = (state + 变化量) % 周期;
}
根据要求,取模挪状态。
a[i] = max(a[i - 1] + 1, a[i]);
for (int i = 2; i <= n; i++) {
if (a[i] 不满足规则) {
a[i] = 修正后的值;
}
ans += a[i];
}
核心思想: 不回头、不回改,只往前推。
| 符号 | 含义 |
|---|---|
| & | 按位与(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
int x;
bool isEven = (x & 1) == 0; // 偶数
bool isOdd = (x & 1) == 1; // 奇数
int cnt = 0;
while (x) {
cnt += (x & 1);
x >>= 1;
}
| 功能 | 说明 |
|---|---|
| 创建与赋值 | string s; (空), string s("Hello");, string s(5, 'x');, s.assign(...) |
| 访问与遍历 | s[i], s.at(i), s.front(), s.back(), for(char c : s) |
| 修改与拼接 | s += "abc", s.append(...), s.replace(...), s[0] = 'A' |
| 查找 | s.find(...), s.rfind(...), s.find_first_of(...), 返回 string::npos 表示未找到 |
| 比较 | ==, !=, compare() |
| 子串 | s.substr(pos, len) |
| 插入与删除 | s.insert(...), s.erase(...), s.pop_back() |
| 大小与清空 | s.size(), s.empty(), s.clear() |
| 其他工具 | toupper(c), tolower(c), sort(s.begin(), s.end()), reverse(s.begin(), s.end()) |
=, assign(), string(n, c)[], at(), front/back, replace+=, append(), insert()erase(), pop_back(), clear()find(), rfind(), substr()size(), empty(), compare()for (int row = 0; row < 5; row++) {
for (char digit : n) {
// 每个字符 → 一块图形
}
}
for (int row = 0; row < H; row++) {
string line;
for (每个元素) {
line += 当前行应该输出的内容;
}
cout << line << endl;
}
考试提醒: 三级很多人不是不会,是少空格/多空格。
for(int j=2;j<=m-2;j++){
s1 = s.substr(0,j);
s2 = s.substr(j,...);
// 判断 s1, s2
}
for (int cut = L; cut <= R; cut++) {
string left = s.substr(0, cut);
string right = s.substr(cut);
if (判断 left && 判断 right) {
// 满足条件
}
}
考试提醒: 先切,再查。
int n;
cin >> n;
while (n > 0) {
cout << n % 2;
n /= 2;
}
注意:顺序反的,要看题目要求,是不是倒回来。
if (c >= '0' && c <= '9') val = c - '0';
else val = c - 'A' + 10;
#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;
}
abs / fabsceil / floor / roundsqrt / powmax(a,b) / min(a,b)#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++ 三级编程题考的是:能不能看懂题,能不能用循环照着规则写程序,而不是算法技巧编程速度。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online