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

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

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

Kubernet发布于 2026/3/24更新于 2026/7/632 浏览
蓝桥杯 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. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 网络安全挖漏洞必备 3 大工具及学习路线指南
  • 前端 SSR 技术指南:提升 SEO 与用户体验
  • OpenClaw 自托管 AI 网关安装与配置指南
  • Science 封面:AI 大模型 Evo 解码生命密码,基因组学进入新时代
  • Stable Diffusion 3.5 FP8 镜像部署与商业授权详解
  • 35 岁程序员失业危机:现状分析与破局策略
  • Math-LLaVA:增强多模态大语言模型的数学推理能力
  • 10款主流AI降重工具功能对比与使用指南
  • AI 写小说全流程指南:提示词与工具推荐
  • Vitis 使用教程:从零实现 AI 模型 FPGA 部署
  • FLUX.2[klein] 开源:本地部署 AI 绘画的轻量级方案
  • AI Skills:前端开发的新效率工具
  • ROS 机器人开发入门:Linux 基础命令与操作指南
  • Python Tkinter 实战:Windows 磁盘清理与系统优化工具开发
  • 前端缓存策略实战:构建高性能 Web 应用
  • AI 代码助手 Copilot 与 Codeium 的技术原理与实践
  • 默认安全治理实践:水平越权检测与前端安全防控
  • C++ 数组详解
  • ChatGPT 免费版与微软 Copilot 技术选型对比
  • 前端国际化最佳实践:让网站走向世界

相关免费在线工具

  • 加密/解密文本

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