备战蓝桥杯----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

【前端进阶之旅】50 道前端超难面试题(2026 最新版)|覆盖 HTML/CSS/JS/Vue/React/TS/ 工程化 / 网络 / 跨端

【前端进阶之旅】50 道前端超难面试题(2026 最新版)|覆盖 HTML/CSS/JS/Vue/React/TS/ 工程化 / 网络 / 跨端

文章目录 * 前言 * 一、原生开发(HTML/CSS/JavaScript) * 二、框架核心(Vue2/3、React16/18/19) * 三、网络协议 * 四、工程化 * 五、跨端开发(uniapp、uniappX) * 六、TypeScript * 写在最后 前言 作为前端开发者,想要突破中高级面试瓶颈,仅掌握基础语法远远不够 —— 大厂面试更侧重底层原理、手写实现、场景分析与跨领域综合能力。本文整理了50 道无答案版前端超难面试题,覆盖原生开发、框架核心、网络协议、工程化、跨端开发、TypeScript 六大核心方向排序且聚焦高频难点,适合自测、复盘或作为面试出题参考,建议收藏反复琢磨! 一、原生开发(HTML/CSS/JavaScript) 原生能力是前端的根基,

By Ne0inhk
【Vue3】前端Vue3最常用的 20 道面试题总结(含详细代码解析)

【Vue3】前端Vue3最常用的 20 道面试题总结(含详细代码解析)

以下是老曹关于 Vue 3 最常用的 20 道面试题总结,涵盖 Vue 3 的核心特性如 Composition API、响应式系统(ref / reactive)、生命周期钩子、组件通信、Teleport、Suspense、自定义指令等高频知识点。每道题都配有详细解释和代码示例,适合用于前端开发岗位的 Vue 3 技术面试准备,大家可以码住随时翻出来查阅背诵和练习! 1. Vue 3 和 Vue 2 的区别是什么? 问题: 解释 Vue 3 相比 Vue 2 的主要改进点。(最主要,不是全部,全部后续老曹会再扩展) 答案: 特性Vue 2Vue 3响应式系统Object.definePropertyProxy架构单一源码模块化架构(Tree-shakable)

By Ne0inhk
springboot3+vue3基于Java Web的饰品商城系统的设计与实现

springboot3+vue3基于Java Web的饰品商城系统的设计与实现

目录 * 摘要 * 项目技术支持 * 可定制开发之功能亮点 * 源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 摘要 随着互联网技术的快速发展,电子商务已成为现代商业的重要组成部分。饰品作为一种时尚消费品,其线上销售需求日益增长。基于Java Web技术的饰品商城系统能够为用户提供便捷的购物体验,同时为商家提供高效的管理平台。本系统采用Spring Boot 3作为后端框架,Vue 3作为前端框架,结合MySQL数据库,实现了一个功能完善、性能稳定的饰品商城系统。 系统分为前台用户模块和后台管理模块。前台用户模块主要包括用户注册与登录、商品浏览、购物车管理、订单支付等功能。用户可以通过分类检索或关键词搜索快速找到心仪的商品,并完成下单支付流程。后台管理模块提供商品管理、订单管理、用户管理等功能,管理员可以便捷地维护商品信息、处理订单及管理用户数据。 系统采用前后端分离架构,后端基于Spring Boot 3实现RESTful API接口,提供高效的数据交互能力。Spring Security确保系统安全性,实现用户权限控制。前端使用Vue 3

By Ne0inhk
鸿蒙开发入门指南:从前端TypeScript到ArkTS过渡指南

鸿蒙开发入门指南:从前端TypeScript到ArkTS过渡指南

鸿蒙开发入门指南:从前端TypeScript到ArkTS过渡指南 * 一、先理解最核心的一句话 * 二、为什么要从TS迁移到ArkTS? * 2.1 程序稳定性:把错误扼杀在编译阶段 * 2.2 程序性能:减少运行时的类型检查 * 三、迁移核心:从“能用”到“规范” * 3.1 最需要改的10条规则(新手必看) * 规则1:使用let,别用var(arkts-no-var) * 规则2:别用any和unknown(arkts-no-any-unknown) * 规则3:类的属性必须初始化(编译强制) * 规则4:构造函数里不能声明字段(arkts-no-ctor-prop-decls) * 规则5:用箭头函数,别用函数表达式(arkts-no-func-expressions) * 规则6:用点访问属性,别用方括号(arkts-no-props-by-index) * 规则7:类型转换用as,别用尖括号(arkts

By Ne0inhk