mirror of http://git.sairate.top/sairate/doc.git
docs(NOI竞赛大纲): 添加 C++ 程序设计基础文档
- 新增程序基本概念、基本数据类型、程序基本语句等文档 - 更新 mkdocs.yml 配置,优化文档结构- 调整部分文档路径,提高可读性
This commit is contained in:
parent
b5939c90d4
commit
36c7ba84c3
|
@ -5,8 +5,9 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="02f9b0c7-a97d-4689-afaa-3f6563382100" name="更改" comment="docs(NOI竞赛大纲): 添加 C++ 程序设计基础文档 - 新增程序基本概念、基本数据类型、程序基本语句等文档 - 更新 mkdocs.yml 配置,优化文档结构- 调整部分文档路径,提高可读性">
|
<list default="true" id="02f9b0c7-a97d-4689-afaa-3f6563382100" name="更改" comment="docs(NOI竞赛大纲): 添加 C++ 程序设计基础文档 - 新增程序基本概念、基本数据类型、程序基本语句等文档 - 更新 mkdocs.yml 配置,优化文档结构- 调整部分文档路径,提高可读性">
|
||||||
<change afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/二.C++程序设计/4.基本运算.md" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/二.C++程序设计/2.基本数据类型.md" beforeDir="false" afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/二.C++程序设计/2.基本数据类型.md" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/二.C++程序设计/3.程序基本语句.md" beforeDir="false" afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/二.C++程序设计/3.程序基本语句.md" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
@ -262,7 +263,15 @@
|
||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1745063694397</updated>
|
<updated>1745063694397</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="20" />
|
<task id="LOCAL-00020" summary="docs(NOI竞赛大纲): 添加 C++ 程序设计基础文档 - 新增程序基本概念、基本数据类型、程序基本语句等文档 - 更新 mkdocs.yml 配置,优化文档结构- 调整部分文档路径,提高可读性">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1745063920109</created>
|
||||||
|
<option name="number" value="00020" />
|
||||||
|
<option name="presentableId" value="LOCAL-00020" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1745063920109</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="21" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TypeScriptGeneratedFilesManager">
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
|
|
@ -1,23 +1,102 @@
|
||||||
|
# 2. 基本数据类型
|
||||||
|
|
||||||
# 基本数据类型
|
在编程中,**数据类型**用于定义变量可以存储的数据种类。掌握各种基本数据类型是理解变量、表达式和内存占用的基础。
|
||||||
|
|
||||||
在编程中,基本数据类型用于表示不同类型的数值和字符,是编写程序的基础。常见的基本数据类型包括:
|
---
|
||||||
|
|
||||||
## · 整数型:`int`、`long long`
|
## 【 1 】整数型:`int`、`long long`
|
||||||
- 用于表示整数值。
|
|
||||||
- `int` 通常用于表示较小范围的整数。
|
|
||||||
- `long long` 用于表示更大范围的整数,尤其是在处理大数计算时常用。
|
|
||||||
|
|
||||||
## · 实数型:`float`、`double`
|
### 🔹 `int` 【难度:1】
|
||||||
- 用于表示带小数点的实数。
|
- 用于表示一般范围的整数(如:-100, 0, 999 等)。
|
||||||
- `float` 表示单精度浮点数,精度较低,占用内存较小。
|
- 占用内存:通常为 **4字节(32位)**
|
||||||
- `double` 表示双精度浮点数,精度更高,占用内存更大,适合科学计算。
|
- 范围(有符号):约 -2<sup>31</sup> 到 2<sup>31</sup>-1
|
||||||
|
|
||||||
## · 字符型:`char`
|
```cpp
|
||||||
- 用于存储单个字符,如 `'A'`、`'b'`、`'1'`。
|
int age = 18;
|
||||||
- 本质上是一个整数类型,通常占用 1 字节空间,对应 ASCII 编码表。
|
```
|
||||||
|
|
||||||
## · 布尔型:`bool`
|
### 🔹 `long long` 【难度:1】
|
||||||
- 用于表示逻辑值:`true`(真)或 `false`(假)。
|
- 表示更大的整数,通常用于涉及大数计算(如阶乘、数据统计等)。
|
||||||
- 常用于条件判断、控制程序流程。
|
- 占用内存:**8字节(64位)**
|
||||||
|
- 范围(有符号):约 -2<sup>63</sup> 到 2<sup>63</sup>-1
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
long long population = 7800000000;
|
||||||
|
```
|
||||||
|
|
||||||
|
> 💡 提示:在程序中使用大整数时建议使用 `long long` 类型,并搭配 `ll` 作为字面量后缀(如:`1000000000ll`)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 【 1 】实数型:`float`、`double`
|
||||||
|
|
||||||
|
### 🔹 `float` 【难度:1】
|
||||||
|
- 表示**单精度**浮点数,精度约为小数点后6位。
|
||||||
|
- 占用内存:**4字节**
|
||||||
|
```cpp
|
||||||
|
float pi = 3.14159f;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔹 `double` 【难度:1】
|
||||||
|
- 表示**双精度**浮点数,精度约为小数点后15位。
|
||||||
|
- 占用内存:**8字节**
|
||||||
|
```cpp
|
||||||
|
double e = 2.718281828459;
|
||||||
|
```
|
||||||
|
|
||||||
|
> ⚠ 注意:浮点数在计算中存在精度误差,判断是否相等时不要直接用 `==`,而应判断差值是否在一个误差范围内。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 【 1 】字符型:`char`
|
||||||
|
|
||||||
|
- 用于表示单个字符,如 `'A'`、`'b'`、`'1'`。
|
||||||
|
- 实际上是存储字符的 **ASCII编码值**(整数)。
|
||||||
|
- 占用内存:**1字节**
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
char grade = 'A';
|
||||||
|
cout << (int)grade << endl; // 输出字符的 ASCII 编码:65
|
||||||
|
```
|
||||||
|
|
||||||
|
> 💡 字符用单引号包裹(如:`'X'`),而不是双引号。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 【 1 】布尔型:`bool`
|
||||||
|
|
||||||
|
- 只包含两个取值:`true`(真)、`false`(假)
|
||||||
|
- 用于逻辑判断和条件语句
|
||||||
|
- 占用内存:**1字节**(虽然只需要1位,但通常按字节处理)
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
bool isPassed = true;
|
||||||
|
|
||||||
|
if (isPassed) {
|
||||||
|
cout << "考试通过!" << endl;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> ✅ 在 C++ 中,`true` 等价于 `1`,`false` 等价于 `0`。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 扩展知识:类型对应内存大小与范围(一般情况下)
|
||||||
|
|
||||||
|
| 类型 | 大小(字节) | 常规范围(有符号) |
|
||||||
|
|------------|---------------|-----------------------------|
|
||||||
|
| `char` | 1 字节 | -128 ~ 127 |
|
||||||
|
| `int` | 4 字节 | -2,147,483,648 ~ 2,147,483,647 |
|
||||||
|
| `long long`| 8 字节 | 超大整数范围 |
|
||||||
|
| `float` | 4 字节 | ~±3.4e±38(7位有效数字) |
|
||||||
|
| `double` | 8 字节 | ~±1.7e±308(15位有效数字) |
|
||||||
|
| `bool` | 1 字节 | true / false |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 小结
|
||||||
|
|
||||||
|
- 整数类型用于计数、下标等离散数据;
|
||||||
|
- 实数类型用于精确度要求较高的计算;
|
||||||
|
- 字符类型用于文本字符操作;
|
||||||
|
- 布尔类型用于控制逻辑和条件判断。
|
||||||
|
|
|
@ -1,236 +1,191 @@
|
||||||
# 3. 程序基本语句
|
# 3. 程序基本语句
|
||||||
|
|
||||||
程序是由一条条“语句”组成的,每条语句都有其明确的功能,例如输入、输出、赋值、判断、循环等。掌握基本语句,是学会编写程序的第一步。
|
程序语句是构成程序逻辑的核心部分,掌握基本语句的使用,是编程入门的关键。本章将系统讲解输入输出、条件判断、循环结构等常用语句。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📥输入、输出与赋值语句
|
## 【2】输入输出语句与赋值语句
|
||||||
|
|
||||||
### 1. 输入语句
|
|
||||||
|
|
||||||
用于从用户输入中获取数据。
|
|
||||||
|
|
||||||
- **cin(C++)**
|
|
||||||
```cpp
|
|
||||||
int a;
|
|
||||||
cin >> a; // 读取一个整数并存入变量 a 中
|
|
||||||
```
|
|
||||||
多个变量也可连续读取:
|
|
||||||
```cpp
|
|
||||||
int x, y;
|
|
||||||
cin >> x >> y;
|
|
||||||
```
|
|
||||||
|
|
||||||
- **scanf(C)**
|
|
||||||
```c
|
|
||||||
int a;
|
|
||||||
scanf("%d", &a); // %d 表示读取一个整数
|
|
||||||
```
|
|
||||||
|
|
||||||
多变量读取:
|
|
||||||
```c
|
|
||||||
int x, y;
|
|
||||||
scanf("%d %d", &x, &y);
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 输出语句
|
|
||||||
|
|
||||||
用于将数据展示到终端(控制台)上。
|
|
||||||
|
|
||||||
- **cout(C++)**
|
|
||||||
```cpp
|
|
||||||
int a = 10;
|
|
||||||
cout << "a = " << a << endl;
|
|
||||||
```
|
|
||||||
|
|
||||||
- **printf(C)**
|
|
||||||
```c
|
|
||||||
int a = 10;
|
|
||||||
printf("a = %d\n", a);
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. 赋值语句
|
|
||||||
|
|
||||||
将右侧的值赋给左侧变量,是程序中最基本的操作之一。
|
|
||||||
|
|
||||||
|
### ✅ cin 和 cout(C++ 风格)
|
||||||
```cpp
|
```cpp
|
||||||
int a;
|
#include <iostream>
|
||||||
a = 5;
|
using namespace std;
|
||||||
a = a + 10; // 赋值时,先计算右边的值
|
|
||||||
|
int main() {
|
||||||
|
int a;
|
||||||
|
cin >> a; // 输入一个整数
|
||||||
|
cout << "你输入的是: " << a << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
- `cin >>`:从键盘读取输入。
|
||||||
|
- `cout <<`:输出内容到屏幕。
|
||||||
|
- `<< endl`:换行输出。
|
||||||
|
|
||||||
### 4. 复合语句
|
---
|
||||||
|
|
||||||
复合语句即“语句块”,由一对花括号 `{}` 包裹起来的多条语句,常用于条件或循环控制中:
|
### ✅ scanf 和 printf(C 风格)
|
||||||
|
```cpp
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int a;
|
||||||
|
scanf("%d", &a); // 输入一个整数
|
||||||
|
printf("你输入的是: %d\n", a);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- `%d` 表示格式化整数,`&a` 是地址符,表示把输入值存入变量 a。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ✅ 赋值语句
|
||||||
|
```cpp
|
||||||
|
int x;
|
||||||
|
x = 10;
|
||||||
|
```
|
||||||
|
- 把右边的表达式结果赋值给左边的变量。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ✅ 复合语句(代码块)
|
||||||
```cpp
|
```cpp
|
||||||
{
|
{
|
||||||
int a = 1;
|
int a = 5;
|
||||||
int b = 2;
|
int b = 6;
|
||||||
cout << a + b << endl;
|
cout << a + b << endl;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
- 大括号 `{}` 包裹的是复合语句,表示多个语句作为一个整体执行。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔀选择结构语句
|
## 【2】条件语句(选择结构)
|
||||||
|
|
||||||
程序根据条件不同,执行不同的操作路径,这类语句称为“选择结构”。
|
|
||||||
|
|
||||||
### 1. if 语句
|
|
||||||
|
|
||||||
用于根据条件判断是否执行某些语句。
|
|
||||||
|
|
||||||
|
### ✅ if 语句
|
||||||
```cpp
|
```cpp
|
||||||
if (a >= 60) {
|
int score = 85;
|
||||||
|
if (score >= 60) {
|
||||||
|
cout << "及格" << endl;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ if-else 语句
|
||||||
|
```cpp
|
||||||
|
if (score >= 90) {
|
||||||
|
cout << "优秀" << endl;
|
||||||
|
} else {
|
||||||
|
cout << "继续努力" << endl;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ 多层 if-else
|
||||||
|
```cpp
|
||||||
|
if (score >= 90) {
|
||||||
|
cout << "优秀";
|
||||||
|
} else if (score >= 75) {
|
||||||
|
cout << "良好";
|
||||||
|
} else if (score >= 60) {
|
||||||
cout << "及格";
|
cout << "及格";
|
||||||
} else {
|
} else {
|
||||||
cout << "不及格";
|
cout << "不及格";
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 多条件判断
|
---
|
||||||
|
|
||||||
|
### ✅ switch 语句
|
||||||
```cpp
|
```cpp
|
||||||
if (score >= 90) {
|
int option = 2;
|
||||||
cout << "优秀";
|
switch(option) {
|
||||||
} else if (score >= 80) {
|
|
||||||
cout << "良好";
|
|
||||||
} else {
|
|
||||||
cout << "继续加油";
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. switch 语句
|
|
||||||
|
|
||||||
适用于“固定选项”的多分支判断。
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
int op = 2;
|
|
||||||
switch (op) {
|
|
||||||
case 1:
|
case 1:
|
||||||
cout << "选项1";
|
cout << "选项一";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
cout << "选项2";
|
cout << "选项二";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
cout << "无效选项";
|
cout << "无效选项";
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
- `switch` 适用于整型、字符型变量。
|
||||||
### 3. 多层条件语句(嵌套)
|
- 每个 `case` 后面用 `break` 防止穿透执行。
|
||||||
|
|
||||||
```cpp
|
|
||||||
if (x > 0) {
|
|
||||||
if (x % 2 == 0) {
|
|
||||||
cout << "正偶数";
|
|
||||||
} else {
|
|
||||||
cout << "正奇数";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cout << "非正数";
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔁循环结构语句
|
## 【2】循环语句(重复结构)
|
||||||
|
|
||||||
循环语句用于让程序重复执行某些操作。
|
|
||||||
|
|
||||||
### 1. for 语句(已知次数)
|
|
||||||
|
|
||||||
|
### ✅ for 循环
|
||||||
```cpp
|
```cpp
|
||||||
for (int i = 1; i <= 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
cout << i << " ";
|
cout << i << " ";
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
- 固定次数循环,通常用于计数。
|
||||||
|
|
||||||
结构包含三部分:
|
---
|
||||||
- 初始化:`int i = 1`
|
|
||||||
- 条件判断:`i <= 5`
|
|
||||||
- 更新表达式:`i++`
|
|
||||||
|
|
||||||
### 2. while 语句(先判断再执行)
|
|
||||||
|
|
||||||
|
### ✅ while 循环
|
||||||
```cpp
|
```cpp
|
||||||
int i = 1;
|
int i = 0;
|
||||||
while (i <= 5) {
|
while (i < 5) {
|
||||||
cout << i << " ";
|
cout << i << " ";
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
- 先判断再执行,适用于条件满足才循环的情况。
|
||||||
|
|
||||||
若初始条件不成立,则一次都不执行。
|
---
|
||||||
|
|
||||||
### 3. do while 语句(先执行后判断)
|
|
||||||
|
|
||||||
|
### ✅ do while 循环
|
||||||
```cpp
|
```cpp
|
||||||
int i = 1;
|
int i = 0;
|
||||||
do {
|
do {
|
||||||
cout << i << " ";
|
cout << i << " ";
|
||||||
i++;
|
i++;
|
||||||
} while (i <= 5);
|
} while (i < 5);
|
||||||
```
|
```
|
||||||
|
- 至少执行一次,再判断条件。
|
||||||
不管条件如何,至少执行一次。
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔃多层循环语句(嵌套循环)
|
## 【3】多层循环语句
|
||||||
|
|
||||||
循环内部再嵌套一个循环,称为“多层循环”,适用于图形输出、二维数组、表格处理等。
|
|
||||||
|
|
||||||
### 示例:打印矩形
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
for (int i = 1; i <= 3; i++) {
|
|
||||||
for (int j = 1; j <= 5; j++) {
|
|
||||||
cout << "* ";
|
|
||||||
}
|
|
||||||
cout << endl;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
输出:
|
|
||||||
|
|
||||||
```
|
|
||||||
* * * * *
|
|
||||||
* * * * *
|
|
||||||
* * * * *
|
|
||||||
```
|
|
||||||
|
|
||||||
### 示例:九九乘法表
|
|
||||||
|
|
||||||
|
### ✅ 二重循环示例:九九乘法表
|
||||||
```cpp
|
```cpp
|
||||||
for (int i = 1; i <= 9; i++) {
|
for (int i = 1; i <= 9; i++) {
|
||||||
for (int j = 1; j <= i; j++) {
|
for (int j = 1; j <= i; j++) {
|
||||||
cout << j << "*" << i << "=" << j*i << "\t";
|
cout << j << "*" << i << "=" << i * j << "\t";
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- 外层控制行数,内层控制列数。
|
||||||
|
- 多层嵌套常用于处理二维数据(如矩阵、图形、表格等)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ✅ 实际应用:输出矩阵所有元素
|
||||||
|
```cpp
|
||||||
|
int matrix[2][3] = {
|
||||||
|
{1, 2, 3},
|
||||||
|
{4, 5, 6}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
for (int j = 0; j < 3; j++) {
|
||||||
|
cout << matrix[i][j] << " ";
|
||||||
}
|
}
|
||||||
cout << endl;
|
cout << endl;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
输出:
|
|
||||||
|
|
||||||
```
|
|
||||||
1*1=1
|
|
||||||
1*2=2 2*2=4
|
|
||||||
1*3=3 2*3=6 3*3=9
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🧩 小结表
|
## ✅ 小结
|
||||||
|
|
||||||
| 功能类别 | 相关语句 | 描述 |
|
|
||||||
|----------|-----------|------|
|
|
||||||
| 输入语句 | `cin`, `scanf` | 从用户获取数据 |
|
|
||||||
| 输出语句 | `cout`, `printf` | 向屏幕输出数据 |
|
|
||||||
| 赋值语句 | `=` | 设置变量的值 |
|
|
||||||
| 条件语句 | `if`, `switch`, 嵌套 `if` | 根据条件决定执行路径 |
|
|
||||||
| 循环语句 | `for`, `while`, `do while` | 实现重复执行 |
|
|
||||||
| 多层循环 | `for` 嵌套 `for` 等 | 实现二维结构处理 |
|
|
||||||
|
|
||||||
|
- `cin/cout` 和 `scanf/printf` 是基础输入输出方式。
|
||||||
|
- `if`、`switch` 用于做出选择。
|
||||||
|
- `for`、`while`、`do while` 是常用循环方式。
|
||||||
|
- 多层嵌套循环用于复杂数据结构处理。
|
||||||
|
- 编写循环时要注意终止条件,防止死循环。
|
||||||
|
|
Loading…
Reference in New Issue