Appearance
🎉C++ 语法入门
Update: 2-8-2026 By Yonas Luo Version 1.0
第一章:输入和输出
1、C++ 程序基本结构
每个 C++ 程序都必须包含一个主函数 main(),程序从这里开始运行:
cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, C++!" << endl;
return 0;
}📝:
#include <iostream>:引入输入输出库using namespace std;:使用标准命名空间int main():主函数,程序从这里开始cout:用于输出,可以输出字符串和变量endl:换行return 0;:表示程序正常结束;:表示一个语句结束,忘记书写可能导致编译错误或逻辑异常
2、输出语句 cout
cout 是标准输出语句,用来在屏幕上显示内容。
2.1 基本输出
cpp
cout << "Hello, World!";2.2 输出多个内容
cpp
int a = 10, b = 20;
cout << "a = " << a << ", b = " << b << endl;2.3 输出换行
可以使用 endl 或 \n:
cout << "第一行" << endl;
cout << "第二行\n";3. 输入语句 cin
cin 用于从键盘输入数据。
cin本质上是从 输入缓冲区 读取数据,如果缓冲区没有数据,程序才会等待用户从键盘输入。
3.1 输入一个变量
cpp
int a;
cin >> a;
cout << "输入的数字是:" << a << endl;3.2 输入多个变量
cpp
int x, y;
cin >> x >> y;
cout << "两数之和为:" << x + y << endl;📝:
- 输入时用空格或回车分隔;
- 如果输入数据类型不匹配,会导致错误结果。
4. 注释语法
注释是程序中不被执行的文字,主要用于说明和标记。编译器会直接忽视。
1. 单行注释
cpp
// 这是单行注释2. 多行注释
cpp
/* 这是
多行注释
可以一次性注释多行*/📝:利用注释的特性,有时候可以利用它来临时“取消”一段代码的运行,常用语调试程序。
第二章:变量与数据类型
1、变量的概念
变量是程序运行中用于存储数据的“容器”,变量名是这个容器的标签。每个变量都占用一定的内存空间,它有一个名字,属于某种数据类型。
在使用变量前必须先声明,即告诉编译器它的类型和名称。
cpp
int a; // 声明一个整型变量 a
double b; // 声明一个浮点型变量 b
char c; // 声明一个字符型变量 c📝:
- 变量必须先声明后使用,否则编译报错
- 变量名区分大小写,例如
num与Num是两个不同变量(即大小写敏感) - 变量名只能包含字母、数字和下划线,且不能以数字开头
2、数据类型
C++ 常见基本数据类型:
| 数据类型 | 说明 | 例子 |
|---|---|---|
| int | 整型,用于整数 | int a = 5; |
| float | 单精度浮点数,用于小数 | float f = 3.14; |
| double | 双精度浮点型,用于小数 | double lf = 3.1415926; |
| char | 字符型,用于单个字符 | char c = 'A'; |
| bool | 布尔型,真或假 | bool flag = true; |
📝:
- 整型和浮点型在运算时会自动进行类型转换(例如 int + double → double);
- 字符用单引号
'A',字符串用双引号"Hello"; - 布尔型只能是
true或false。 - float 精度约为 7 位小数,double 精度约为 15 位小数。
- 字符可以直接进行数学运算,'A' + 1 = 'B'
3、变量的初始化与赋值
3.1 声明同时赋值
cpp
int a = 10;
double pi = 3.14159;
char grade = 'A';
bool flag = false;3.2 先声明后赋值
cpp
int x;
x = 5; // 赋值操作📝:
- 赋值用
=,表示将右边的值存入左边变量;
4、常量
常量在程序运行过程中值不能改变,通常用 const 声明。
cpp
const double PI = 3.14159;
const int DAYS = 7;📝:
- 常量名习惯使用大写字母,便于区分变量;
- 对于不允许改变的值,使用常量可以避免错误。
5、输入与输出变量
变量通常与 cin 和 cout 配合使用。
cpp
int a;
double b;
cin >> a >> b; // 输入两个变量
cout << "a = " << a << ", b = " << b << endl;📝:
- 输入多个变量时,用空格或回车分隔;
- 输出时可以连续输出多个变量和文字说明。
6、变量使用注意事项
- 变量必须先声明再使用;
- 变量名不能和 C++ 关键字重复,如
int,return等; - 不使用初始化的变量可能导致未定义行为;
- 注意类型匹配,避免将浮点数赋值给整型变量造成截断。
第三章:运算符与表达式
1、运算符
运算符是对变量或常量进行运算的符号,包括算术运算、关系运算、逻辑运算等。 表达式是由变量、常量和运算符组成的计算式。
cpp
int a = 5, b = 2;
int sum = a + b; // 加法运算📝:
- 运算符作用于一个或多个操作数;
- 表达式计算结果可以赋值给变量;
- 一级考试常考的表达式一般比较简单,注意运算顺序。
2、算术运算符
算术运算符用于数学计算,常见包括:
| 运算符 | 说明 | 示例 |
|---|---|---|
| + | 加法 | a + b |
| - | 减法 | a - b |
| * | 乘法 | a * b |
| / | 除法 | a / b |
| % | 取模(余数) | a % b |
| ++ | 自增,变量加 1 | a++ 或 ++a |
| -- | 自减,变量减 1 | a-- 或 --a |
📝:
- 除法
/对整型会舍弃小数,只保留整数部分; %只能用于整数;- 自增、自减分前置和后置,一级考试一般只考理解用途。
cpp
int a = 5;
cout << a++ << endl; // 输出 5,之后 a 变为 6
cout << ++a << endl; // 先加 1,a 变为 7,再输出 73、关系运算符
关系运算符用于比较两个值,结果为布尔类型 true 或 false。
| 运算符 | 说明 | 示例 |
|---|---|---|
| == | 等于 | a == b |
| != | 不等于 | a != b |
| > | 大于 | a > b |
| < | 小于 | a < b |
| >= | 大于等于 | a >= b |
| <= | 小于等于 | a <= b |
cpp
int a = 5, b = 3;
bool result = a > b; // true
cout << result << endl;📝:
- 关系运算符结果用于判断条件或赋值给布尔变量;
- 注意
=与==区别:=是赋值,==是比较。
4、逻辑运算符
逻辑运算符用于多个布尔条件的组合判断。
| 运算符 | 说明 | 示例 |
|---|---|---|
| && | 逻辑与(且) | a > 0 && b > 0 |
| || | 逻辑与(或者) | a > 0 || b > 0 |
| ! | 逻辑非(取反) | !(a > 0) |
cpp
int a = 5, b = -2;
bool flag = (a > 0) && (b > 0); // false
cout << flag << endl;
bool flag1 = (a > 0 && b > 0) || (c > 0); // 复合逻辑
cout << "flag1 = " << flag1 << endl; // 输出 1 (true)📝:
&&两边都为真才为真;||两边有一边为真就为真;!用于取反。
由于 C++ 语法支持复合逻辑,你可以同时对多个条件进行判断。 注意逻辑运算符也有优先级:逻辑非 ! > 逻辑与 && > 逻辑或 ||。 一般可以使用括号 () 指明运算顺序,避免疏忽导致逻辑错误。特别的,由于中括号和大括号在程序里面有其他含义,所以统一使用小括号,最内层的最先计算。
5、表达式与优先级
- 表达式可以包含多个运算符,例如
a + b * c; - 运算顺序遵循优先级规则:
- 括号
() - 乘法
*、除法/、取模% - 加法
+、减法- - 关系运算符
- 逻辑运算符
- 括号
cpp
int a = 2, b = 3, c = 4;
int result = a + b * c; // 2 + (3*4) = 14- 可以用括号改变运算顺序:
cpp
int result2 = (a + b) * c; // (2+3)*4 = 20第四章:流程控制
1、流程控制
流程控制用于改变程序的执行顺序,主要包括:
- 条件判断:根据条件决定是否执行某段代码
- 循环结构:重复执行代码
- 跳转语句:改变程序执行的流程
2、条件判断 if 语句
if 语句根据条件表达式的真假决定是否执行代码块。
2.1 单分支 if
cpp
int a;
cin >> a;
if (a > 0) {
cout << "a 是正数" << endl;
}2.2 双分支 if-else
cpp
int a;
cin >> a;
if (a % 2 == 0) {
cout << "a 是偶数" << endl;
} else {
cout << "a 是奇数" << endl;
}2.3 多分支 if- else if -else
cpp
int score;
cin >> score;
if (score >= 90) {
cout << "优秀" << endl;
} else if (score >= 60) {
cout << "及格" << endl;
} else {
cout << "不及格" << endl;
}📝:
- 条件表达式必须返回布尔值
true或false; - 多分支条件会从上到下依次判断,满足第一个条件后跳过后续分支。
- 在分支语句中
if是必须的,而else if和else视具体情况而定,其中else if可以有多个
3、循环结构
循环结构用于重复执行代码,for循环一般用于已知次数的循环,while一般用于不确定次数的循环。
3.1 for 循环
cpp
for (int i = 1; i <= 5; i++) {
cout << "i = " << i << endl;
}结构说明:
cpp
for (初始化; 条件; 步长) {
循环体;
}- 初始化:循环变量初始值
- 条件:循环继续的判断条件
- 步长:每次循环结束后变量变化
3.2 while 循环
cpp
int i = 1;
while (i <= 5) {
cout << "i = " << i << endl;
i++;
}while先判断条件,条件为真才执行循环体。- 注意循环变量变化,否则容易形成死循环。
3.3 do-while 循环
cpp
int i = 1;
do {
cout << "i = " << i << endl;
i++;
} while (i <= 5);do-while先执行一次循环体,再判断条件,至少执行一次。
4、跳转语句
break:立即跳出循环continue:跳过本次循环,进入下一次循环
cpp
for (int i = 1; i <= 5; i++) {
if (i == 3) continue; // 跳过 i=3
cout << i << endl;
}第五章:数组
1、概念
- 数组是存储 同类型数据的连续空间。
- 每个元素都有一个下标索引,下标从
0开始。 - 可以通过下标直接访问或修改元素。
cpp
int arr[5]; // 定义一个整型数组,长度为5
arr[0] = 10; // 第1个元素赋值
arr[1] = 20; // 第2个元素赋值
cout << arr[0]; // 输出第1个元素2、数组定义与初始化
cpp
int a[5] = {1, 2, 3, 4, 5}; // 定义并初始化数组- 可以只初始化部分元素,未初始化的元素值不确定。
- 也可以省略数组长度,让编译器根据初始化数量自动确定:
cpp
int a[] = {1, 2, 3, 4}; // 数组长度为4C++ 支持用常量或直接数字定义数组长度:
cpp
int n = 0;
cin >> n;
int arr[n]; // 使用固定数字定义数组长度
int arr[n]; // C++ 不支持变长数组(VLA),建议用固定长度或 vector<int>3、数组访问
- 通过下标访问:
cpp
cout << a[0] << endl; // 第1个元素
cout << a[3] << endl; // 第4个元素4、数组循环操作
- 使用
for循环遍历数组:
cpp
int a[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
cout << "a[" << i << "] = " << a[i] << endl;
}- 使用
for循环将多个数据输入数组:
cpp
int n;
cin >> n;
int arr[100];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}5、多输入数组示例
cpp
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n; // 输入数组长度
int arr[100]; // 假设数组最大长度为100
// 输入 n 个元素
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
// 输出数组元素
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}📝:
- 输入整数
n,表示数组实际长度; - 使用
for循环依次输入每个元素; - 再用循环输出数组元素;
第六章:IPO 模型
1、概念
- IPO = Input → Process → Output(输入 → 处理 → 输出)
- 是分析程序功能的基本模型,帮助理清思路和步骤。
2、组成
- Input(输入) 程序运行需要的数据,例如用户输入、文件数据、常量等。
- Process(处理) 程序对输入数据进行处理、计算、逻辑判断等操作。
- Output(输出) 程序处理后的结果,例如显示在屏幕上、写入文件等。
3、示例
题目:输入两个整数,输出它们的和。
IPO 分析:
- Input:整数
a和b - Process:计算
sum = a + b - Output:输出
sum
cpp
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b; // Input
int sum = a + b; // Process
cout << sum << endl; // Output
return 0;
}第七章:浮点数格式化输出
- 使用
fixed+setprecision(n)控制输出的小数位数。单纯的setprecision(n)只控制有效数字,和小数无关。 - 需要包含头文件
<iomanip>。
cpp
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double x = 3.1415926;
cout << fixed << setprecision(2); // 保留两位小数
cout << x << endl; // 输出 3.14
cout << setprecision(4); // 再设置 4 位小数
cout << x << endl; // 输出 3.1416
}第八章:示例
例题 1:单变量输入输出
题目:输入一个整数 x,输出它加上 5 的结果。
示例输入:
3示例输出:
8参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
cout << x + 5 << endl;
return 0;
}例题 2:多变量输入输出
题目:输入两个整数 a 和 b,输出它们的和与差。
示例输入:
10 3示例输出:
和: 13
差: 7参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << "和: " << a + b << endl;
cout << "差: " << a - b << endl;
return 0;
}例题 3:条件判断(单分支)
题目:输入一个整数 n,如果 n 为正数,输出 "正数"。
示例输入:
5示例输出:
正数参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n > 0) {
cout << "正数" << endl;
}
return 0;
}例题 4:条件判断
题目:输入一个整数 n,判断它是奇数还是偶数。
示例输入:
7示例输出:
奇数参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n % 2 == 0) {
cout << "偶数" << endl;
} else {
cout << "奇数" << endl;
}
return 0;
}例题 5:条件判断
题目:输入一个成绩(0~100),输出等级。
示例输入:
75示例输出:
及格参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
int score;
cin >> score;
if (score >= 90) {
cout << "优秀" << endl;
} else if (score >= 60) {
cout << "及格" << endl;
} else {
cout << "不及格" << endl;
}
return 0;
}例题 6:for 循环
题目:输出 1~10 的整数,每行一个。
示例输出:
1
2
3
4
5
6
7
8
9
10参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
cout << i << endl;
}
return 0;
}例题 7:while 循环
题目:输入一个整数 n,用 while 循环输出从 n 到 1 的整数。
示例输入:
5示例输出:
5
4
3
2
1参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
while (n > 0) {
cout << n << endl;
n--;
}
return 0;
}例题 8:逻辑运算
题目:输入两个整数 a 和 b,判断是否都为正数。
示例输入:
3 5示例输出:
都为正数参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if (a > 0 && b > 0) {
cout << "都为正数" << endl;
} else {
cout << "至少有一个非正" << endl;
}
return 0;
}例题 9:数组操作(单输入)
题目:输入 5 个整数,输出数组元素的和。
示例输入:
1 2 3 4 5示例输出:
15参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
int arr[5];
int sum = 0;
for (int i = 0; i < 5; i++) {
cin >> arr[i];
sum += arr[i];
}
cout << sum << endl;
return 0;
}例题 10:数组操作(多输入)
题目:先输入数组长度 n,再输入 n 个整数,输出最大值。
示例输入:
4
7 3 9 2示例输出:
9参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int arr[100];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int maxVal = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > maxVal) {
maxVal = arr[i];
}
}
cout << maxVal << endl;
return 0;
}例题 11:浮点数格式化输出
题目:输入一个浮点数 x,输出它保留两位小数的结果。
示例输入:
3.14159示例输出:
3.14参考代码:
cpp
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double x;
cin >> x;
cout << fixed << setprecision(2) << x << endl;
return 0;
}例题 12:判断字符类型
题目:输入一个字符 c,判断它是大写字母还是小写字母。
示例输入:
G示例输出:
大写字母参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
char c;
cin >> c;
if (c >= 'A' && c <= 'Z') {
cout << "大写字母" << endl;
} else if (c >= 'a' && c <= 'z') {
cout << "小写字母" << endl;
} else {
cout << "其他字符" << endl;
}
return 0;
}例题 13:字母反转转换
题目:输入一个大写字母 c,输出与它对称的字母(A ↔ Z,B ↔ Y…)。
示例输入:
B示例输出:
Y参考代码:
cpp
#include <iostream>
using namespace std;
int main() {
char c;
cin >> c;
char mirrored = 'Z' - (c - 'A'); // 字符可以直接做数学运算
cout << mirrored << endl;
return 0;
}