跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
C++算法

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

蓝桥杯 C/C++ 组竞赛备战指南,涵盖开发环境 DevC++ 搭建与配置。详解 C++ 基础语法核心内容,包括 main 函数结构、命名空间、基本数据类型及范围、变量常量定义、算术与关系操作符、cin/cout 与 scanf/printf 输入输出处理、条件判断语句 if 逻辑等。适合初学者夯实编程基础,为后续算法学习做准备。

Kubernet发布于 2026/3/24更新于 2026/5/46 浏览
蓝桥杯 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
  • 数字字符 0-9: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("%[^\n]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折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 大模型微调经验总结:SFT 技术要点与局限性分析
  • 大模型核心概念:Token 究竟是什么?
  • SkyWalking 全链路监控实战:集成 Spring Cloud、Dubbo、RocketMQ 与 ShardingSphere
  • Git-AI:实现 AI 生成代码归属追踪的 Git 扩展工具
  • SkyWalking Kafka 与 RabbitMQ 消息链路追踪实战
  • 斯坦福 2025 AI 指数报告深度解读:从技术突破到产业扩散
  • Git-AI:追踪 AI 生成代码的实用工具
  • CATE 条件平均处理效应估计:五大方法原理详解与 Python 实战
  • 数字化转型的本质:从信息化到数字化的跨越
  • 树莓派 4B 连接大疆 M300 无人机开发指南
  • 数据库迁移 TCO 全景账本:MySQL 替代中的隐性成本与工程化工具链实测
  • KingbaseES 数据库智能 SQL 防护机制与异常语句拦截实践
  • 数据结构基础:串的定义与常见误区
  • 数据结构与算法:链表分类详解与双向链表初始化实现
  • 链表经典算法实战:相交、回文与随机指针复制
  • 数据结构:二叉树基础与 C 语言实现
  • Web 前端基础:HTML、CSS 与 JavaScript 核心知识梳理
  • 手写 C++ TCP 服务器:自定义协议与粘包处理实战
  • VS Code 内置聊天与 GitHub Copilot Chat 的区别
  • 基于管道通信的 Linux 进程池实现详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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