docs(NOI竞赛大纲): 添加 C++ 程序设计基础文档

- 新增程序基本概念、基本数据类型、程序基本语句等文档
- 更新 mkdocs.yml 配置,优化文档结构- 调整部分文档路径,提高可读性
This commit is contained in:
sairate 2025-04-19 20:04:02 +08:00
parent b5939c90d4
commit 36c7ba84c3
3 changed files with 223 additions and 180 deletions

View File

@ -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++ 程序设计基础文档&#10;&#10;- 新增程序基本概念、基本数据类型、程序基本语句等文档&#10;- 更新 mkdocs.yml 配置,优化文档结构- 调整部分文档路径,提高可读性"> <list default="true" id="02f9b0c7-a97d-4689-afaa-3f6563382100" name="更改" comment="docs(NOI竞赛大纲): 添加 C++ 程序设计基础文档&#10;&#10;- 新增程序基本概念、基本数据类型、程序基本语句等文档&#10;- 更新 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++ 程序设计基础文档&#10;&#10;- 新增程序基本概念、基本数据类型、程序基本语句等文档&#10;- 更新 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">

View File

@ -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±387位有效数字 |
| `double` | 8 字节 | ~±1.7e±30815位有效数字 |
| `bool` | 1 字节 | true / false |
---
## ✅ 小结
- 整数类型用于计数、下标等离散数据;
- 实数类型用于精确度要求较高的计算;
- 字符类型用于文本字符操作;
- 布尔类型用于控制逻辑和条件判断。

View File

@ -1,236 +1,191 @@
# 3. 程序基本语句 # 3. 程序基本语句
程序是由一条条“语句”组成的,每条语句都有其明确的功能,例如输入、输出、赋值、判断、循环等。掌握基本语句,是学会编写程序的第一步 程序语句是构成程序逻辑的核心部分,掌握基本语句的使用,是编程入门的关键。本章将系统讲解输入输出、条件判断、循环结构等常用语句
--- ---
## 📥输入、输出与赋值语句 ## 【2】输入输出语句与赋值语句
### 1. 输入语句
用于从用户输入中获取数据。
- **cinC++**
```cpp
int a;
cin >> a; // 读取一个整数并存入变量 a 中
```
多个变量也可连续读取:
```cpp
int x, y;
cin >> x >> y;
```
- **scanfC**
```c
int a;
scanf("%d", &a); // %d 表示读取一个整数
```
多变量读取:
```c
int x, y;
scanf("%d %d", &x, &y);
```
### 2. 输出语句
用于将数据展示到终端(控制台)上。
- **coutC++**
```cpp
int a = 10;
cout << "a = " << a << endl;
```
- **printfC**
```c
int a = 10;
printf("a = %d\n", a);
```
### 3. 赋值语句
将右侧的值赋给左侧变量,是程序中最基本的操作之一。
### ✅ cin 和 coutC++ 风格)
```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 和 printfC 风格)
```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` 是常用循环方式。
- 多层嵌套循环用于复杂数据结构处理。
- 编写循环时要注意终止条件,防止死循环。