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

基于腾讯云HAI + DeepSeek快速设计自己的个人网页

基于腾讯云HAI + DeepSeek快速设计自己的个人网页

前言:通过结合腾讯云HAI 强大的云端运算能力与DeepSeek先进的 AI技术,本文介绍高效、便捷且低成本的设计一个自己的个人网页。你将了解到如何轻松绕过常见的技术阻碍,在腾讯云HAI平台上快速部署DeepSeek模型,仅需简单几步,就能获取一个包含个人简介、技能特长、项目经历及联系方式等核心板块的响应式网页。 目录 一、DeepSeek模型部署在腾讯云HAI 二、设计个人网页 一、DeepSeek模型部署在腾讯云HAI 把 DeepSeek 模型部署于腾讯云 HAI,用户便能避开官网访问限制,直接依托腾讯云 HAI 的超强算力运行 DeepSeek-R1 等模型。这一举措不仅降低了技术门槛,还缩短了部署时间,削减了成本。尤为关键的是,凭借 HAI 平台灵活且可扩展的特性,用户能够依据自身特定需求定制专属解决方案,进而更出色地适配特定业务场景,满足各类技术要求 。 点击访问腾讯云HAI控制台地址: 算力管理 - 高性能应用服务 - 控制台 腾讯云高性能应用服务HAI已支持DeepSeek-R1模型预装环境和CPU算力,只需简单的几步就能调用DeepSeek - R1

By Ne0inhk
AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

云边有个稻草人-ZEEKLOG博客 目录 引言 一、什么是DeepSeek? 1.1 DeepSeek平台概述 1.2 DeepSeek的核心功能与技术 二、蓝耘通义万相2.1概述 2.1 蓝耘科技简介 2.2 蓝耘通义万相2.1的功能与优势 1. 全链条智能化解决方案 2. 强大的数据处理能力 3. 高效的模型训练与优化 4. 自动化推理与部署 5. 行业专用解决方案 三、蓝耘通义万相2.1与DeepSeek的对比分析 3.1 核心区别 3.2 结合使用的优势 四、蓝耘注册流程 五、DeepSeek与蓝耘通义万相2.1的集成应用 5.1 集成应用场景 1. 智能医疗诊断

By Ne0inhk
如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

它是免费的——社区驱动的人工智能💪。         当 OpenAI 第一次推出定制 GPT 时,我就明白会有越来越多的人为人工智能做出贡献,并且迟早它会完全由社区驱动。         但从来没有想过它会如此接近😂让我们看看如何在 Windows 机器上完全免费使用第一个开源推理模型!  步骤 0:安装 Docker 桌面         我确信很多人已经安装了它,所以可以跳过,但如果没有 — — 这很简单,只需访问Docker 的官方网站,下载并运行安装 👍         如果您需要一些特定的设置,例如使用 WSL,那么有很多指导视频,请查看!我将继续下一步。 步骤 1:安装 CUDA 以获得 GPU 支持         如果您想使用 Nvidia 显卡运行 LLM,则必须安装 CUDA 驱动程序。(嗯……是的,它们需要大量的计算能力)         打开CUDA 下载页面,

By Ne0inhk
在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

本文将分步向您展示如何在本地安装和运行 DeepSeek、使用 CodeGPT 对其进行配置以及开始利用 AI 来增强您的软件开发工作流程,所有这些都无需依赖基于云的服务。  步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT         要在本地运行 DeepSeek,我们首先需要安装Ollama,它允许我们在我们的机器上运行 LLM,以及CodeGPT,它是集成这些模型以提供编码辅助的 VSCode 扩展。 安装 Ollama Ollama 是一个轻量级平台,可以轻松运行本地 LLM。 下载Ollama 访问官方网站:https://ollama.com * 下载适合您的操作系统(Windows、macOS 或 Linux)的安装程序。 * 验证安装 安装后,打开终端并运行: ollama --version  如果 Ollama 安装正确,

By Ne0inhk