前言
第十七届蓝桥杯软件赛 C/C++ 组将于 2026 年 4 月 11 日举行,目前仅剩不到一个半月的时间来进行备战。那么我们需要准备些什么呢?我们首先应该具备的知识是 C/C++ 的基础语法知识。
一、分析大纲,了解所需
我们可以在蓝桥杯官网中找到'第十七届蓝桥杯大赛软件赛(编程类)竞赛大纲'这份文档。
蓝桥杯 C/C++ 组竞赛需掌握 C++ 基础语法与开发环境配置。内容涵盖 DevC++ 安装、数据类型、变量常量、操作符、输入输出及条件判断等核心知识点。旨在帮助初学者夯实编程基石,为后续算法学习做准备。

第十七届蓝桥杯软件赛 C/C++ 组将于 2026 年 4 月 11 日举行,目前仅剩不到一个半月的时间来进行备战。那么我们需要准备些什么呢?我们首先应该具备的知识是 C/C++ 的基础语法知识。
我们可以在蓝桥杯官网中找到'第十七届蓝桥杯大赛软件赛(编程类)竞赛大纲'这份文档。





从组别划分、知识点结构、难度体系三个方面展开。
| 组别 | 适用对象 | 知识点范围说明 | 难度系数范围 |
|---|---|---|---|
| 大学 C 组 | 高职高专或基础较弱学生 | 基础语法、常用算法入门 | 1–5 |
| 大学 B 组 | 普通本科生 | 在 C 组基础上扩展中级算法与数据结构 | 4–7 |
| 大学 A 组 | 重点高校/研究生 | 涵盖 C、B 组内容,并增加高难度专题 | 7–10 |
| 研究生组 | 研究生 | 与 A 组共享高级内容,题型更具挑战性 | 7–10 |
说明:A 组和研究生组的知识点基本相同,A 组更强调综合应用,研究生组可能更注重理论深度和复杂度。
重点掌握:
学习建议:
新增内容:
学习建议:
新增内容:
学习建议:
各组别难度向上兼容,A 组题可能包含 B 组和 C 组的基础内容。
适合参加蓝桥杯等算法竞赛的 C++ 入门学习者,掌握这些语法知识是后续算法学习的必备基础。
在开始算法竞赛的征程前,我们首先要打好 C++ 语法基础。无论是枚举、贪心还是动态规划,都需要扎实的语法功底作为支撑。本系列文章将带大家掌握 C++ 最核心的基础语法知识,包括开发环境搭建、第一个程序、数据类型、输入输出、条件判断与循环等基础内容。
DevC++ 是一款免费、轻量级的 C/C++ 集成开发环境(IDE),特别适合初学者和竞赛选手。它使用 GCC 作为编译器,安装简单,操作便捷,很多学校的机房和竞赛场合都使用它。
第一次打开 DevC++ 时,会提示选择语言,选择"简体中文/Chinese"即可。
方式一:新建源代码
.cpp结尾方式二:新建项目
| 功能 | 快捷键 |
|---|---|
| 编译 | F9 |
| 运行 | F10 |
| 编译 + 运行 | F11 |
| 调试 | F5 |
| 下一步调试 | F7 |
| 单步进入函数 | F8 |
调试是排查程序错误的重要手段:
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
return 0;
}
int main()表示 main 函数执行结束后返回一个整型值return 0;表示程序正常结束,与前面的 int 呼应#include <iostream>
using namespace std;
int main() {
int num;
cin >> num; // 输入一个整数
cout << num << endl; // 输出这个整数,endl 表示换行
return 0;
}
特点:
<<是流插入运算符,与 cout 配合使用>>是流提取运算符,与 cin 配合使用endl的作用是换行并刷新缓冲区命名空间用于避免命名冲突。std 是 C++ 标准库的命名空间:
// 方式一:使用 using namespace std;
#include <iostream>
using namespace std;
// 方式二:使用 std::前缀
#include <iostream>
int main() {
std::cout << "Hello" << std::endl;
return 0;
}
竞赛中常用方式一,写起来更快捷。
// 这是单行注释
/* 这是多行注释
可以写多行内容 */
快捷键:
| 类型 | 关键字 | 说明 |
|---|---|---|
| 字符型 | char | 存储单个字符 |
| 短整型 | short | 较短的整数 |
| 整型 | int | 常用整数类型 |
| 长整型 | long | 较长的整数 |
| 长长整型 | long long | 更长的整数 |
| 单精度浮点型 | float | 小数(精度较低) |
| 双精度浮点型 | double | 小数(精度较高) |
| 布尔型 | bool | true 或 false |
:10signed:有符号,可表示正负数(int 默认就是 signed)unsigned:无符号,只能表示 0 和正整数unsigned int a; // 无符号整型
signed int b; // 有符号整型,等价于 int b;
cout << sizeof(int) << endl; // 4 字节
cout << sizeof(long long) << endl;// 8 字节
cout << sizeof(double) << endl; // 8 字节
| 类型 | 范围 | 数量级 |
|---|---|---|
| int | -21 亿~21 亿 | 10^9 |
| unsigned int | 0~42 亿 | 4×10^9 |
| long long | -9.2×10^18~9.2×10^18 | 10^18 |
重要提示:做题时一定要注意数据范围,选择合适的数据类型。经典名言:'十年 OI 一场空,不开 long long 见祖宗'
typedef long long ll; // 将 long long 重命名为 ll
typedef unsigned int uint; // 将 unsigned int 重命名为 uint
ll a = 10000000000; // 等价于 long long a = 10000000000;
int age; // 创建变量
int score = 100;// 创建并初始化
int global = 100; // 全局变量,在大括号外定义
int main() {
int local = 10; // 局部变量,在大括号内定义
cout << local << endl;
cout << global << endl;
return 0;
}
重要区别:
竞赛技巧:竞赛中常用全局变量,因为自动初始化为 0,且随处可用,避免传参麻烦。
字面常量:
100 // 整型常量
'a' // 字符常量
3.14 // 浮点型常量
#define 定义常量:
#define PI 3.14159
#define MAX 100
const 定义常量(推荐):
const double PI = 3.14159;
const int MAX_N = 1000;
const 定义的常量有具体类型,更严谨。
| 操作符 | 功能 | 示例 |
|---|---|---|
| + | 加法 | a + b |
| - | 减法 | a - b |
| * | 乘法 | a * b |
| / | 除法(整数除法取整) | a / b |
| % | 取模(取余数) | a % b |
注意事项:
%操作符只能用于整型float x = 6 / 4; // 结果为 1.0(整数除法)
float y = 6.0 / 4; // 结果为 1.5(浮点数除法)
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
隐式类型转换:
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 码)
int a = 10;
int b = ++a; // 前置++:先自增,后使用(a=11, b=11)
int c = a--; // 后置--:先使用,后自减(c=11, a=10)
#include <cstdio>
int main() {
int ch = getchar(); // 读取一个字符
putchar(ch); // 输出这个字符
return 0;
}
特点:
基本用法:
printf("Hello World\n");
printf("There are %d apples\n", 3);
常用占位符:
| 占位符 | 含义 |
|---|---|
| %d | 十进制整数 |
| %lld | long 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"
基本用法:
int a;
scanf("%d", &a); // 注意&符号,取地址
int x, y;
scanf("%d%d", &x, &y); // 连续输入
重要特点:
%c不会忽略空白字符,需要用" %c"的形式跳过空白scanf 返回值:
int r = scanf("%d%d", &a, &b);
if (r == 2) { // 成功读取两个数
}
方法 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); // 读取一行,包含空格
if (条件) {
// 条件为真时执行
}
if (条件) {
// 条件为真时执行
} else {
// 条件为假时执行
}
if (条件 1) {
// 条件 1 为真
} else if (条件 2) {
// 条件 2 为真
} else {
// 都不满足
}
if (条件 1) {
if (条件 2) {
// 条件 1 和条件 2 都为真
}
}
if (a == 1)
if (b == 2)
cout << "hehe";
else
cout << "haha"; // 这个 else 与第二个 if 匹配,而不是第一个
解决方法:使用大括号明确逻辑
| 操作符 | 含义 |
|---|---|
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| == | 等于 |
| != | 不等于 |
注意事项:
==写成=(赋值)a < b < c,应写成a < b && b < cfabs(a - b) < 1e-9上篇小结:
至此,我们已经掌握了 C++ 的基础语法:开发环境、数据类型、变量常量、操作符、输入输出、条件判断和循环结构。这些是编写任何程序的基础,也是后续学习数组、字符串、函数和算法的前提。
在下篇中,我们将继续学习:
请确保熟练掌握本篇内容后再进入下篇的学习。
【练习题推荐】

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online