XCPCer 从零开始的 C/C++ 入门指南——训练大纲
前言
这份大纲规划了一个《XCPCer 从零开始的 C/C++ 入门指南(算法竞赛向)》系列的写作路线,参考了学长留下的《C语言入门讲义(竞赛向)》(CSDN 原文,作者 2302_79577794,即软件2303罗祥,ACM 前队长)。
原讲义的章节骨架和写法都很好——概念、图示、代码、运行结果、细节解析一条龙;但它缺 C++/STL、位运算、复杂度意识和习题。这份大纲在继承它的骨架之上补齐这些缺口,后续每一章写完都会以正文形式更新到博客。
定位
- 全程
.cpp+ g++ 编译:前半讲 C 兼容子集,后半上 C++ 与 STL,不单独教 C - 编译选项:
-std=c++17 -O2 -Wall,与赛场一致 - IO 双轨:
scanf/printf与cin/cout都教,各有适用场景
每章固定写作骨架
- 导语:本章解决什么问题、赛场上用来干什么
- 概念 + 图示(如冒泡排序的图示、递归”递/归”过程图)
- 语法逐点拆解 + 最小示例
- 完整程序 + 运行结果截图
- 细节解析(如”内层 j 为什么到 n-i-1”这类追问)
- 常见错误对照(编译错 / RE / WA 各举一例)
- 竞赛小结 + 配套习题(5~10 道分级)
第一阶段:起步(第 0–3 章)
第 0 章 赛前须知与环境
编译器选择与安装;编译运行流程;编译选项 -std=c++17 -O2 -Wall;Hello World 逐行拆解;代码规范;判题结果 AC/WA/TLE/MLE/RE/CE/PE 及各自常见原因;常见报错速查表;freopen 文件 IO(ACM 赛制)
第 1 章 变量与数据类型
声明/初始化/命名;int/long long/unsigned/float/double/char/bool 及表示范围表;数据范围→类型选择的直觉(1e9 卡 int 边界、1e18 卡 long long);溢出演示;隐式/强制转换;unsigned 倒序死循环坑;const 与 #define;作用域、全局数组自动清零
✅ 正文已发布:第 1 章 变量与数据类型
第 2 章 ASCII 与字符运算
ASCII 表;大小写转换;c-'0' 取数字值;char 参与算术
第 3 章 输入输出(重点章)
printf/scanf 格式符全套(%d %lld %f %c %s、%.nf、宽度对齐);转义字符表(\n \t \0 \\ \" 等);cin/cout;getline 读整行;多组输入三种(给定次数 / while(scanf...)== / EOF);getchar/putchar;解除同步三件套
第二阶段:控制流与数据组织(第 4–8 章)
第 4 章 运算符与表达式
赋值/算术/自增自减前后缀/关系/逻辑 + 短路求值;位运算 & | ^ ~ << >>(XCPC 必备);优先级表;整数除法截断、负数取模;浮点不能用 == 比较(eps)
第 5 章 分支与循环
if/else、else if 连写、嵌套与悬空 else;switch;三目运算符;while/死循环/do-while/for;break/continue/循环嵌套;经典练习(打印图形、九九乘法表)
第 6 章 数组
一维:创建/三种初始化(完全/不完全/不指定长度)/sizeof 算长度/下标;越界→RE 重点强调;数组开全局(栈空间限制);遍历套路(最值/计数/查找/逆序);二维:分行/省略行/不分行初始化
第 7 章 字符串
char[] 定义与初始化;strlen/strcpy/strcat/strcmp/memset;输入用 fgets 或 string+getline(原讲义教的 gets 已从标准移除,必须改掉);字符串数组(二维 char[]);C++ string 全套(拼接/比较/substr/find/size/遍历/c_str/to_string/stoi)
第 8 章 函数
为什么用/组成/声明与定义/返回值;形参实参;传值 vs 传引用(C++ &)vs 指针传址;作用域;嵌套调用/链式访问;判断质数的 flag 与非 flag 两种写法;递归:基线条件、”递/归”过程图、阶乘例子,再加斐波那契和汉诺塔
第三阶段:C++ 与 STL(第 9–12 章)
第 9 章 结构体与 pair
struct 定义/成员/结构体数组;自定义 cmp 排序;typedef/using 别名;pair 的 first/second
第 10 章 排序与查找
冒泡排序(原理/图示/代码/细节 n-i-1,教学价值保留);选择/插入一笔带过;sort():数组/vector/结构体/lambda;lower_bound/upper_bound;手写二分
第 11 章 序列式容器
vector 全套(push_back/size/resize/遍历/二维 vector);stack/queue/deque;priority_queue(大根堆、greater<> 小根堆、自定义比较)
第 12 章 关联式容器与 auto
set/multiset 去重有序;map/unordered_map 计数与查找;迭代器、范围 for、auto;log 与哈希的复杂度直觉
第四阶段:竞赛素养(第 13–15 章)
第 13 章 复杂度与估算
大 O 直觉;1 秒约 1e8 次运算的经验值;数据范围反推算法表(n≤20→指数、n≤5000→n²、n≤1e5→nlogn、n≥1e6→线性);看题先读数据范围的习惯
第 14 章 竞赛工程技巧
万能头;个人模板;long long 检查清单;边界检查清单(n=0/1、全相等、极端值);对拍(随机数据+暴力+脚本);debug 手段与 SEGV 定位
第 15 章 综合训练与路线
模拟/枚举/前缀和差分入门(衔接后续算法训练);分级题单(CF div4/3、AtCoder ABC、牛客);XCPC 赛制介绍与训练规划
三条总建议
- 全书统一用
.cpp+ g++ 编译,讲 C 兼容子集即可 - 原讲义需要修正的过时点就两处:
gets弃用、bool 不再标注”C++ 才有” - 按每周一次训练,16 章正好一学期;节奏紧可把第 2 章并入第 7 章、第 14 章并入第 13 章
更新计划
每写完一章,正文会更新在本博客并回链到本文,敬请期待。