备战蓝桥杯----C/C++组 (一)所需C++基础知识(上)

备战蓝桥杯----C/C++组 (一)所需C++基础知识(上)
wengqidaifeng

个人主页:

wengqidaifeng

✨永远在路上,永远向前走

个人专栏:

数据结构
C语言
嵌入式小白启动!
重要OJ算法题详解

文章目录


前言

第十七届蓝桥杯软件赛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>// 头文件usingnamespace std;// 使用std命名空间intmain()// 主函数,程序入口{ cout <<"Hello World!"<< endl;// 输出语句return0;// 程序正常结束}

3.2 main函数详解

  • main函数是程序的入口,程序从main函数开始执行
  • int main()表示main函数执行结束后返回一个整型值
  • return 0;表示程序正常结束,与前面的int呼应
  • 一个项目中只能有一个main函数

3.3 输入输出流 - cin和cout

#include<iostream>usingnamespace std;intmain(){int num; cin >> num;// 输入一个整数 cout << num << endl;// 输出这个整数,endl表示换行return0;}

特点:

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

3.4 命名空间

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

// 方式一:使用using namespace std;#include<iostream>usingnamespace std;// 方式二:使用std::前缀#include<iostream>intmain(){ std::cout <<"Hello"<< std::endl;return0;}

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

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:6590
  • 小写字母az:97122
  • 数字字符09:4857
  • 大小写字母ASCII码差值:32
  • 换行符\n:10

4.3 signed与unsigned

  • signed:有符号,可表示正负数(int默认就是signed)
  • unsigned:无符号,只能表示0和正整数
unsignedint a;// 无符号整型signedint b;// 有符号整型,等价于int b;

4.4 数据类型长度 - sizeof

cout <<sizeof(int)<< endl;// 4字节 cout <<sizeof(longlong)<< endl;// 8字节 cout <<sizeof(double)<< endl;// 8字节

4.5 数据范围

类型范围数量级
int-21亿~21亿10^9
unsigned int0~42亿4×10^9
long long-9.2×1018~9.2×101810^18

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

4.6 typedef - 类型重命名

typedeflonglong ll;// 将long long重命名为lltypedefunsignedint 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;// 全局变量,在大括号外定义intmain(){int local =10;// 局部变量,在大括号内定义 cout << local << endl; cout << global << endl;return0;}

重要区别

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

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

5.4 常量

字面常量

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

#define定义常量

#definePI3.14159#defineMAX100

const定义常量(推荐):

constdouble PI =3.14159;constint 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 = 3char 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>intmain(){int ch =getchar();// 读取一个字符putchar(ch);// 输出这个字符return0;}

特点:

  • 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为真}elseif(条件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】数字直角三角形

Read more

OpenClaw部署与配置教程:在Mac mini上接入国产大模型与飞书

一、准备工作 项目说明一台Mac mini云服务器、旧电脑、树莓派也可以飞书账号用来创建机器人国产模型的apiopenclaw的在配置时仅显示国际的大模型,国产模型需要单独配置 二、部署OpenClaw到mac mini 2.1 快速部署 1. 稳定版安装:在终端输入以下命令 curl -fsSL https://openclaw.ai/install.sh |bash 2. 测试版安装(可能包含Bug) curl -fsSL https://openclaw.ai/install.sh |bash -s -- --beta 2.2 同意免责声明 安装好后,将会出现一个问题:是否知晓风险,选择Yes就行。 2.3 配置模式选择 选择“QuickStart”

By Ne0inhk
Linux操作系统从入门到实战(二)手把手教你安装VMware17pro与CentOS 9 stream,实现Vim配置,并配置C++环境

Linux操作系统从入门到实战(二)手把手教你安装VMware17pro与CentOS 9 stream,实现Vim配置,并配置C++环境

Linux操作系统从入门到实战(二)手把手教你安装VMware17pro与CentOS 9.0 stream,实现Vim配置,并编译C++文件 * 前言 * 一、安装VMware17pro * 二、安装CentOS9.0 * 2.1 为什么选择CentOS9,与CentOS7对比 * 2.1 官网下载CentOS9.0 * 2.2 国内清华大学镜像下载CentOS9.0 * 三、实现Linux环境搭建 * 四、配置Vim环境 * 1. 安装必要的软件 * 2. 配置 Vim 高亮显示 * 五、编译运行C++代码 前言 * 在前面的博客里,我们讲解了什么是操作系统,以及它的历史,接下来我们开始构建Linxu环境 * 本次博客将带领大家完成 CentOS 9.0 的安装,

By Ne0inhk
Flutter 三方库 opml 的鸿蒙化适配指南 - 支持大容量订阅源解析、符合 OPML 2.0 规范与 RSS 管理器核心适配

Flutter 三方库 opml 的鸿蒙化适配指南 - 支持大容量订阅源解析、符合 OPML 2.0 规范与 RSS 管理器核心适配

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 opml 的鸿蒙化适配指南 - 支持大容量订阅源解析、符合 OPML 2.0 规范与 RSS 管理器核心适配 前言 在进行 Flutter for OpenHarmony 的阅读类、播客类或 RSS 订阅类应用开发时,支持标准的 OPML(Outline Processor Markup Language)导入与导出是必选功能。opml 库是一个专门用于解析和生成 OPML 文件的 Dart 库。本文将探讨如何在鸿蒙系统下,利用该库高效管理用户的订阅树结构。 一、原理解析 / 概念介绍 1.1 基础原理 OPML 本质上是一种基于

By Ne0inhk
【高级终端Termux】在安卓手机/平板上使用Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程(含安装WPS,VS Code)

【高级终端Termux】在安卓手机/平板上使用Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程(含安装WPS,VS Code)

Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程 一、前言 1. 背景 众所周知,最新搭载澎湃OS和鸿蒙OS的平板都内置了PC级WPS,办公效率直接拉满(板子终于从“泡面盖”升级为“生产力”了)。但问题来了:如果不是这两个系统,难道我们只能继续用平板盖泡面吗?当然不是!折腾了很长时间后,总算找到了一个好玩的东西:高级终端Termux 。现在,不仅能随时随地用WPS改文档,还能VSCode优雅地敲代码,再也不用背着电脑乱跑了。 由于每次搭建环境时都要去不同的平台找不同功能,有时还找不到,所以我决定自己写一篇博客,方便自己以后再搭建时直接“Ctrl C + Ctrl V”,顺便分享给有同样需求的小伙伴们。话不多说,直接开整! 2. 准备工作 * 一部安卓手机:性能越好,折腾起来越顺畅。 * Termux 应用: 不想去F-droid下载的看过来

By Ne0inhk