跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

蓝桥杯C/C++组备考:C++基础知识(上)

蓝桥杯C/C++组竞赛大纲分析及C++基础语法详解。涵盖大学C/B/A组及研究生组的知识点范围与难度系数,重点讲解DevC++环境搭建、基本数据类型、变量常量、操作符、输入输出流及条件判断等核心语法知识,为算法竞赛打下坚实基础。

橘子海发布于 2026/3/26更新于 2026/6/820 浏览
蓝桥杯C/C++组备考:C++基础知识(上)

蓝桥杯C/C++组备考:C++基础知识(上)

前言

第十七届蓝桥杯软件赛C/C++组将于2026年4月11日举行,目前仅剩不到一个半月的时间来进行备战。那么我们需要准备些什么呢?我们首先应该具备的知识是C/C++的基础语法知识。

一、分析大纲,了解所需

我们可以在蓝桥杯官网中找到'第十七届蓝桥杯大赛软件赛(编程类)竞赛大纲'这份文档。

1. 大纲显示内容

大纲截图

大纲截图

大纲截图

大纲截图

大纲截图

从组别划分、知识点结构、难度体系三个方面展开。

2. 组别划分与难度关系

组别适用对象知识点范围说明难度系数范围
大学C组高职高专或基础较弱学生基础语法、常用算法入门1–5
大学B组普通本科生在C组基础上扩展中级算法与数据结构4–7
大学A组重点高校/研究生涵盖C、B组内容,并增加高难度专题7–10
研究生组研究生与A组共享高级内容,题型更具挑战性7–10

说明:A组和研究生组的知识点基本相同,A组更强调综合应用,研究生组可能更注重理论深度和复杂度。

3. 知识点结构分析(按组别)

3.1 大学C组:基础入门阶段

重点掌握:

  • 枚举、排序(冒泡、选择、插入)
  • 搜索(BFS/DFS)
  • 贪心、模拟、二分
  • DP(一维简单问题)
  • 高精度、栈/队列/链表
  • 基础数学

学习建议:

  • 以刷题为导向,熟练掌握基本语法和简单算法。
  • 推荐练习平台:洛谷、AcWing 基础题库。
3.2 大学B组:中级提高阶段

新增内容:

  • 排序进阶(归并、快速、桶、堆、基数)
  • 搜索优化(剪枝、双向BFS、记忆化、迭代加深)
  • DP进阶(背包、树形、状压、数位、优化)
  • 字符串(哈希、KMP)
  • 图论基础(欧拉回路、最小生成树、最短路、拓扑、二分图、连通性、LCA)
  • 数学进阶(排列组合、容斥、逆元、矩阵、高斯消元)
  • 数据结构(ST表、堆、树状数组、线段树、Trie、并查集、平衡树)
  • 计算几何基础

学习建议:

  • 理解算法原理,注重模板的掌握与变形。
  • 推荐练习平台:Codeforces、AtCoder、蓝桥杯真题。
3.3 大学A组 / 研究生组:高级挑战阶段

新增内容:

  • 字符串高级(AC自动机、后缀数组/自动机、回文自动机)
  • 图论高级(网络流、一般图匹配)
  • 数学高级(生成函数、莫比乌斯反演、FFT)
  • 数据结构高级(树链剖分、动态开点线段树、平衡树、可持久化、树套树、动态树)

学习建议:

  • 需要有扎实的数学基础和算法推导能力。
  • 多阅读论文、算法竞赛进阶指南。
  • 推荐练习平台:LOJ、UOJ、POJ、ICPC/CCPC真题。

4. 难度系数说明

  • 系数1–3:基础题,主要考察语法和简单逻辑。
  • 系数4–6:中等题,需要掌握常见算法模板。
  • 系数7–8:难题,考察算法变形与组合应用。
  • 系数9–10:极难题,通常涉及复杂数据结构或数学建模。

各组别难度向上兼容,A组题可能包含B组和C组的基础内容。

二、C++基础语法(上):从零开始的编程基石

适合参加蓝桥杯等算法竞赛的C++入门学习者,掌握这些语法知识是后续算法学习的必备基础。

1. 前言

在开始算法竞赛的征程前,我们首先要打好C++语法基础。无论是枚举、贪心还是动态规划,都需要扎实的语法功底作为支撑。本篇博客将带大家掌握C++最核心的基础语法知识,包括开发环境搭建、第一个程序、数据类型、输入输出、条件判断与循环等基础内容。

2. 开发环境搭建 - DevC++的安装与使用

2.1 为什么选择DevC++?

DevC++是一款免费、轻量级的C/C++集成开发环境(IDE),特别适合初学者和竞赛选手。它使用GCC作为编译器,安装简单,操作便捷,很多学校的机房和竞赛场合都使用它。

2.2 安装步骤
  1. 下载安装包:可以从SourceForge下载Orwell Dev-C++ 5.11版本
  2. 以管理员权限运行:右键点击安装包,选择"以管理员身份运行"
  3. 选择语言:建议选择"简体中文"
  4. 同意协议:点击"I Agree"
  5. 选择组件:默认选项即可,直接点击Next
  6. 选择安装路径:可以自定义安装位置,建议不要包含中文路径
  7. 完成安装:勾选"运行Dev-C++ 5.11",点击Finish
2.3 首次启动配置

第一次打开DevC++时,会提示选择语言,选择"简体中文/Chinese"即可。

2.4 编写第一个程序

方式一:新建源代码

  • 点击"文件"→"新建"→"源代码"
  • 编写代码后按Ctrl+S保存,文件名以.cpp结尾
  • 按F11编译运行

方式二:新建项目

  • 适合多文件组织
  • 点击"文件"→"新建"→"项目"
  • 选择"Console Application",C++项目
  • 保存项目后,可以在项目中添加多个源文件
2.5 常用快捷键
功能快捷键
编译F9
运行F10
编译 + 运行F11
调试F5
下一步调试F7
单步进入函数F8
2.6 调试功能

调试是排查程序错误的重要手段:

  1. 在行号处点击设置断点
  2. 点击调试按钮或按F5开始调试
  3. 添加变量查看,监控变量变化
  4. 使用F7单步执行,F8进入函数内部

3. 第一个C++程序

3.1 基础程序框架
#include <iostream>
using namespace std;

int main() {
    cout << "Hello World!" << endl;
    return 0;
}
3.2 main函数详解
  • main函数是程序的入口,程序从main函数开始执行
  • int main()表示main函数执行结束后返回一个整型值
  • return 0;表示程序正常结束,与前面的int呼应
  • 一个项目中只能有一个main函数
3.3 输入输出流 - cin和cout
#include <iostream>
using namespace std;

int main() {
    int num;
    cin >> num; // 输入一个整数
    cout << num << endl; // 输出这个整数,endl表示换行
    return 0;
}

特点:

  • cin和cout能自动识别变量类型,不需要像scanf/printf那样手动控制格式
  • <<是流插入运算符,与cout配合使用
  • >>是流提取运算符,与cin配合使用
  • endl的作用是换行并刷新缓冲区
3.4 命名空间

命名空间用于避免命名冲突。std是C++标准库的命名空间:

// 方式一:使用 using namespace std;
#include <iostream>
using namespace std;

// 方式二:使用 std::前缀
#include <iostream>
int main() {
    std::cout << "Hello" << std::endl;
    return 0;
}

竞赛中常用方式一,写起来更快捷。

3.5 注释
// 这是单行注释
/* 这是多行注释
可以写多行内容 */

快捷键:

  • DevC++中:Ctrl + / 注释/取消注释
  • VS中:Ctrl+K+C注释,Ctrl+K+U取消注释

4. 数据类型

4.1 基本数据类型
类型关键字说明
字符型char存储单个字符
短整型short较短的整数
整型int常用整数类型
长整型long较长的整数
长长整型long long更长的整数
单精度浮点型float小数(精度较低)
双精度浮点型double小数(精度较高)
布尔型booltrue或false
4.2 ASCII码表要点
  • 大写字母AZ:65-90
  • 小写字母az:97-122
  • 数字字符09:48-57
  • 大小写字母ASCII码差值:32
  • 换行符\n:10
4.3 signed与unsigned
  • signed:有符号,可表示正负数(int默认就是signed)
  • unsigned:无符号,只能表示0和正整数
unsigned int a; // 无符号整型
signed int b; // 有符号整型,等价于 int b;
4.4 数据类型长度 - sizeof
cout << sizeof(int) << endl; // 4字节
cout << sizeof(long long) << endl; // 8字节
cout << sizeof(double) << endl; // 8字节
4.5 数据范围
类型范围数量级
int-21亿~21亿10^9
unsigned int0~42亿4×10^9
long long-9.2×10^18~9.2×10^1810^18

重要提示:做题时一定要注意数据范围,选择合适的数据类型。经典名言:'十年OI一场空,不开long long见祖宗'

4.6 typedef - 类型重命名
typedef long long ll; // 将 long long 重命名为 ll
typedef unsigned int uint; // 将 unsigned int 重命名为 uint
ll a = 10000000000; // 等价于 long long a = 10000000000;

5. 变量和常量

5.1 变量创建
int age; // 创建变量
int score = 100; // 创建并初始化
5.2 变量命名规则
  • 只能由字母、数字、下划线组成
  • 必须以字母或下划线开头
  • 不能使用关键字(如int、if等)
  • 区分大小写
5.3 全局变量与局部变量
int global = 100; // 全局变量,在大括号外定义

int main() {
    int local = 10; // 局部变量,在大括号内定义
    cout << local << endl;
    cout << global << endl;
    return 0;
}

重要区别:

  • 全局变量默认初始化为0
  • 局部变量不初始化则值是随机的(必须初始化后再使用)

竞赛技巧:竞赛中常用全局变量,因为自动初始化为0,且随处可用,避免传参麻烦。

5.4 常量

字面常量:

100 // 整型常量
'a' // 字符常量
3.14 // 浮点型常量

#define定义常量:

#define PI 3.14159
#define MAX 100

const定义常量(推荐):

const double PI = 3.14159;
const int MAX_N = 1000;

const定义的常量有具体类型,更严谨。

6. 操作符

6.1 算术操作符
操作符功能示例
+加法a + b
-减法a - b
*乘法a * b
/除法(整数除法取整)a / b
%取模(取余数)a % b

注意事项:

  • 除数不能为0
  • %操作符只能用于整型
  • 负数取模结果的正负号由第一个操作数决定
6.2 浮点数除法
float x = 6 / 4; // 结果为 1.0(整数除法)
float y = 6.0 / 4; // 结果为 1.5(浮点数除法)
6.3 赋值操作符
int a = 10; // 初始化
a = 20; // 赋值
// 复合赋值符
a += 5; // 等价于 a = a + 5
a -= 3; // 等价于 a = a - 3
a *= 2; // 等价于 a = a * 2
a /= 4; // 等价于 a = a / 4
a %= 3; // 等价于 a = a % 3
6.4 类型转换

隐式类型转换:

int a = 3.14; // a = 3(double转int,截断小数)
double b = 10; // b = 10.0(int转double)

强制类型转换:

double d = 3.14;
int a = (int)d; // a = 3
char c = 'A';
cout << (int)c; // 输出 65(字符的 ASCII 码)
6.5 单目操作符 - ++和--
int a = 10;
int b = ++a; // 前置++:先自增,后使用(a=11, b=11)
int c = a--; // 后置--:先使用,后自减(c=11, a=10)

7. 输入输出进阶

7.1 getchar和putchar
#include <cstdio>

int main() {
    int ch = getchar(); // 读取一个字符
    putchar(ch); // 输出这个字符
    return 0;
}

特点:

  • getchar不会忽略空白字符
  • 读取失败返回EOF(-1)
  • 在输入前按Ctrl+Z可模拟读取失败
7.2 printf格式化输出

基本用法:

printf("Hello World\n");
printf("There are %d apples\n", 3);

常用占位符:

占位符含义
%d十进制整数
%lldlong long 整数
%f浮点数
%c字符
%s字符串
%x十六进制整数

格式化控制:

printf("%5d\n", 123); // 宽度为 5,右对齐:" 123"
printf("%-5d\n", 123); // 左对齐:"123 "
printf("%6.2f\n", 3.14); // 总宽度 6,小数点后 2 位:" 3.14"
7.3 scanf格式化输入

基本用法:

int a;
scanf("%d", &a); // 注意&符号,取地址
int x, y;
scanf("%d%d", &x, &y); // 连续输入

重要特点:

  • scanf处理数值占位符时会自动过滤空白字符(空格、制表符、换行符)
  • 但%c不会忽略空白字符,需要用" %c"的形式跳过空白

scanf返回值:

  • 返回成功读取的变量个数
  • 读取失败返回0
  • 遇到文件结尾返回EOF(-1)
int r = scanf("%d%d", &a, &b);
if (r == 2) { // 成功读取两个数
}
7.4 带空格的字符串输入

方法1:fgets

char str[100];
fgets(str, sizeof(str), stdin);

方法2:scanf特殊格式

char str[100];
scanf("%[^
]s", str); // 读取直到遇到换行符

方法3:getline(string类型)

string s;
getline(cin, s); // 读取一行,包含空格

8. 条件判断

8.1 if语句
if (条件) {
    // 条件为真时执行
}
8.2 if-else语句
if (条件) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}
8.3 else if
if (条件 1) {
    // 条件 1 为真
} else if (条件 2) {
    // 条件 2 为真
} else {
    // 都不满足
}
8.4 嵌套 if
if (条件 1) {
    if (条件 2) {
        // 条件 1 和条件 2 都为真
    }
}
8.5 悬空 else 问题
if (a == 1)
    if (b == 2)
        cout << "hehe";
    else
        cout << "haha"; // 这个 else 与第二个 if 匹配,而不是第一个

解决方法:使用大括号明确逻辑

9. 关系操作符

操作符含义
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于

注意事项:

  • 不要将==写成=(赋值)
  • 不要连续使用,如a < b < c,应写成a < b && b < c
  • 浮点数比较要用误差范围:fabs(a - b) < 1e-9

总结

上篇小结:

至此,我们已经掌握了C++的基础语法:开发环境、数据类型、变量常量、操作符、输入输出、条件判断和循环结构。这些是编写任何程序的基础,也是后续学习数组、字符串、函数和算法的前提。

在下篇中,我们将继续学习:

  • 数组(一维数组、二维数组、字符数组)
  • string字符串类型
  • 函数与递归
  • 位运算
  • 结构体与类

请确保熟练掌握本篇内容后再进入下篇的学习。

【练习题推荐】

  • 洛谷:P1001 A+B Problem
  • 洛谷:P5710 【深基 3.例 2】数的性质
  • 洛谷:P5715 【深基 3.例 8】三位数排序
  • 洛谷:P5720 【深基 4.例 4】一尺之棰
  • 洛谷:P5721 【深基 4.例 6】数字直角三角形

目录

  1. 蓝桥杯C/C++组备考:C++基础知识(上)
  2. 前言
  3. 一、分析大纲,了解所需
  4. 1. 大纲显示内容
  5. 2. 组别划分与难度关系
  6. 3. 知识点结构分析(按组别)
  7. 3.1 大学C组:基础入门阶段
  8. 3.2 大学B组:中级提高阶段
  9. 3.3 大学A组 / 研究生组:高级挑战阶段
  10. 4. 难度系数说明
  11. 二、C++基础语法(上):从零开始的编程基石
  12. 1. 前言
  13. 2. 开发环境搭建 - DevC++的安装与使用
  14. 2.1 为什么选择DevC++?
  15. 2.2 安装步骤
  16. 2.3 首次启动配置
  17. 2.4 编写第一个程序
  18. 2.5 常用快捷键
  19. 2.6 调试功能
  20. 3. 第一个C++程序
  21. 3.1 基础程序框架
  22. 3.2 main函数详解
  23. 3.3 输入输出流 - cin和cout
  24. 3.4 命名空间
  25. 3.5 注释
  26. 4. 数据类型
  27. 4.1 基本数据类型
  28. 4.2 ASCII码表要点
  29. 4.3 signed与unsigned
  30. 4.4 数据类型长度 - sizeof
  31. 4.5 数据范围
  32. 4.6 typedef - 类型重命名
  33. 5. 变量和常量
  34. 5.1 变量创建
  35. 5.2 变量命名规则
  36. 5.3 全局变量与局部变量
  37. 5.4 常量
  38. 6. 操作符
  39. 6.1 算术操作符
  40. 6.2 浮点数除法
  41. 6.3 赋值操作符
  42. 6.4 类型转换
  43. 6.5 单目操作符 - ++和--
  44. 7. 输入输出进阶
  45. 7.1 getchar和putchar
  46. 7.2 printf格式化输出
  47. 7.3 scanf格式化输入
  48. 7.4 带空格的字符串输入
  49. 8. 条件判断
  50. 8.1 if语句
  51. 8.2 if-else语句
  52. 8.3 else if
  53. 8.4 嵌套 if
  54. 8.5 悬空 else 问题
  55. 9. 关系操作符
  56. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • AWS Kiro 结合 AIClient-2-API 实现免费调用 Claude 模型实战
  • MCP 模型上下文协议:原理、架构与应用场景解析
  • Python 实战:Boss 直聘职位信息爬虫开发
  • Ubuntu 系统下 libwebkit2gtk-4.1-0 库安装指南
  • 阿里云 DashScope、OpenAI 及 aiohttp Python SDK 异步性能对比
  • OCC Architecture in DFT Design
  • MySQL JDBC 连接 URL 参数详解与最佳实践
  • 基于 STM32 的智能家居环境监测系统
  • 小鹏 VLA 2.0 与 IRON 人形机器人技术解析
  • 线性代数与空间解析几何在几何体数据结构中的应用
  • 汇川机器人软件 RobotLab 常规操作
  • RAGFlow Python API 中文文档
  • C3P0 反序列化漏洞深度解析:Hex 字节码加载与防御策略
  • Python 实现 PAT 乙级 1021 个位数统计
  • Python 开发常用十大工具推荐
  • 从零搭建双模式可视化编程平台:Python 与 ROS2 集成实践
  • Git 高级用法实战指南:从协作到故障恢复
  • 金仓数据库 MySQL 迁移:语法兼容与语义一致性实践
  • 基于 DeepSeek 的贪吃蛇游戏开发实战
  • Python 金融量化分析师入门指南与职业发展路径

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online