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

- 新增程序基本概念、基本数据类型、程序基本语句等文档
- 更新 mkdocs.yml 配置,优化文档结构- 调整部分文档路径,提高可读性
This commit is contained in:
sairate 2025-04-19 15:54:56 +08:00
parent 005a421ef2
commit 8ee15df4a0
9 changed files with 438 additions and 24 deletions

View File

@ -5,8 +5,15 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="02f9b0c7-a97d-4689-afaa-3f6563382100" name="更改" comment="refactor(project): 优化项目配置并添加新功能&#10;&#10;- 更新 Python SDK 版本&#10;- 添加新文档和链接&#10;- 优化 mkdocs 配置&#10;- 新增 Katex 支持&#10;- 更新 README 文件"> <list default="true" id="02f9b0c7-a97d-4689-afaa-3f6563382100" name="更改" comment="refactor(project): 优化项目配置并添加新功能&#10;&#10;- 更新 Python SDK 版本&#10;- 添加新文档和链接&#10;- 优化 mkdocs 配置&#10;- 新增 Katex 支持&#10;- 更新 README 文件">
<change afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/二.C++程序设计/1.程序基本概念.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/二.C++程序设计/2.基本数据类型.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/二.C++程序设计/3.程序基本语句.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竞赛大纲/大纲.md" beforeDir="false" afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/大纲.md" afterDir="false" /> <change beforePath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/1.计算机的基本构成.md" beforeDir="false" afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/一.基础知识与编程环境/1.计算机的基本构成.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/2.WindowLinux等操作系统的基本概念及常见操作.md" beforeDir="false" afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/一.基础知识与编程环境/2.WindowLinux等操作系统的基本概念及常见操作.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/3.计算机网络和Internet的基本概念.md" beforeDir="false" afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/一.基础知识与编程环境/3.计算机网络和Internet的基本概念.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/4.计算机历史和常见用途.md" beforeDir="false" afterPath="$PROJECT_DIR$/notebook/docs/NOI竞赛大纲/一.基础知识与编程环境/4.计算机历史和常见用途.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/notebook/mkdocs.yml" beforeDir="false" afterPath="$PROJECT_DIR$/notebook/mkdocs.yml" 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" />
@ -30,29 +37,31 @@
<option name="hideEmptyMiddlePackages" value="true" /> <option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
</component> </component>
<component name="PropertiesComponent"><![CDATA[{ <component name="PropertiesComponent">{
"keyToString": { &quot;keyToString&quot;: {
"Python.start.executor": "Run", &quot;Python.start.executor&quot;: &quot;Run&quot;,
"RunOnceActivity.OpenProjectViewOnStart": "true", &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
"RunOnceActivity.ShowReadmeOnStart": "true", &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
"SHARE_PROJECT_CONFIGURATION_FILES": "true", &quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
"git-widget-placeholder": "master", &quot;git-widget-placeholder&quot;: &quot;master&quot;,
"ignore_missing_gitignore": "true", &quot;ignore_missing_gitignore&quot;: &quot;true&quot;,
"last_opened_file_path": "C:/sairateproject/markdoc", &quot;last_opened_file_path&quot;: &quot;C:/sairateproject/markdoc&quot;,
"node.js.detected.package.eslint": "true", &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
"node.js.detected.package.tslint": "true", &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
"node.js.selected.package.eslint": "(autodetect)", &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
"node.js.selected.package.tslint": "(autodetect)", &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
"nodejs_package_manager_path": "npm", &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
"settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable", &quot;settings.editor.selected.configurable&quot;: &quot;com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable&quot;,
"vue.rearranger.settings.migration": "true" &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
} }
}]]></component> }</component>
<component name="RecentsManager"> <component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS"> <key name="CopyFile.RECENT_KEYS">
<recent name="C:\sairateproject\markdoc" /> <recent name="C:\sairateproject\markdoc" />
</key> </key>
<key name="MoveFile.RECENT_KEYS"> <key name="MoveFile.RECENT_KEYS">
<recent name="C:\sairateproject\markdoc\notebook\docs\NOI竞赛大纲" />
<recent name="C:\sairateproject\markdoc\notebook\docs\NOI竞赛大纲\一.基础知识与编程环境" />
<recent name="C:\sairateproject\markdoc\notebook" /> <recent name="C:\sairateproject\markdoc\notebook" />
</key> </key>
</component> </component>
@ -196,7 +205,23 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1744972545232</updated> <updated>1744972545232</updated>
</task> </task>
<option name="localTasksCounter" value="12" /> <task id="LOCAL-00012" summary="refactor(project): 优化项目配置并添加新功能&#10;&#10;- 更新 Python SDK 版本&#10;- 添加新文档和链接&#10;- 优化 mkdocs 配置&#10;- 新增 Katex 支持&#10;- 更新 README 文件">
<option name="closed" value="true" />
<created>1744972796032</created>
<option name="number" value="00012" />
<option name="presentableId" value="LOCAL-00012" />
<option name="project" value="LOCAL" />
<updated>1744972796032</updated>
</task>
<task id="LOCAL-00013" summary="refactor(project): 优化项目配置并添加新功能&#10;&#10;- 更新 Python SDK 版本&#10;- 添加新文档和链接&#10;- 优化 mkdocs 配置&#10;- 新增 Katex 支持&#10;- 更新 README 文件">
<option name="closed" value="true" />
<created>1744972862250</created>
<option name="number" value="00013" />
<option name="presentableId" value="LOCAL-00013" />
<option name="project" value="LOCAL" />
<updated>1744972862250</updated>
</task>
<option name="localTasksCounter" value="14" />
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">

View File

@ -0,0 +1,130 @@
# 程序基本概念
## 一、标识符、关键字、常量、变量、字符串、表达式的概念
### 1. 标识符Identifier
- 标识符是程序中用于标识变量、函数、数组、类等用户自定义元素的名称。
- 命名规则:只能由字母、数字和下划线组成,不能以数字开头,不能使用关键字。
```cpp
int score;
float total_score;
```
### 2. 关键字Keyword
- 关键字是编程语言保留的、具有特定含义的标识符,不能作为变量名或函数名使用。
- 示例C++
```text
int, if, while, return, class, public, private
```
### 3. 常量Constant
- 程序中固定不变的数据值。
- 类型包括整型常量10、浮点常量3.14)、字符常量('a')、字符串常量("hello")。
```cpp
const double PI = 3.14;
```
### 4. 变量Variable
- 变量是程序运行过程中值可以改变的量,需先定义后使用。
- 每个变量都有一个名字、数据类型和存储空间。
```cpp
int age = 18;
```
### 5. 字符串String
- 一系列字符组成的序列,通常用双引号括起来,如 "Hello, world!"。
- 在C++中使用 `std::string` 类型:
```cpp
#include <string>
std::string name = "Alice";
```
### 6. 表达式Expression
- 表达式是由变量、常量、运算符、函数调用等组成的语法结构,能产生一个值。
- 示例:
```cpp
a + b * c
x > 0 && y < 10
```
---
## 二、常量与变量的命名、定义及作用
### 1. 命名规则
- 变量和常量命名应具有可读性,建议采用有意义的名称。
- 遵守语言的语法规则:字母、数字和下划线组成,不能以数字开头,不能使用关键字。
![命名示意图](https://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Variable_naming.svg/800px-Variable_naming.svg.png)
### 2. 定义方式
- 常量定义:
```cpp
const int MAX = 100;
```
- 变量定义:
```cpp
int age = 18;
float pi = 3.14;
```
### 3. 作用
- 常量用于保存不会变化的值,增加程序可读性和安全性。
- 变量用于存储和操作程序运行过程中的数据。
---
## 三、头文件与名字空间的概念
### 1. 头文件Header File
- 头文件是包含函数声明、宏定义、类定义等内容的文件,通常以 `.h``.hpp` 结尾。
- 示例:`#include <iostream>` 引入输入输出库。
```cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello, world!" << endl;
return 0;
}
```
### 2. 名字空间Namespace
- 名字空间用于避免不同模块中标识符的命名冲突。
- 示例:
```cpp
using namespace std; // 使用标准命名空间
std::cout << "Hello"; // 不使用 using 时需加 std:: 前缀
```
---
## 四、编辑、编译、解释、调试的概念
### 1. 编辑Editing
- 使用文本编辑器编写或修改源代码。
### 2. 编译Compiling
- 将源代码(如 `.cpp` 文件)翻译为目标代码(机器语言),形成可执行文件。
![编译过程示意图](https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Compiler_structure.svg/800px-Compiler_structure.svg.png)
### 3. 解释Interpreting
- 一边读取源代码一边执行,不生成可执行文件(如 Python、JavaScript 解释执行)。
### 4. 调试Debugging
- 在程序开发过程中发现并修正错误的过程。
- 常用方法:断点调试、单步执行、查看变量值等。

View File

@ -0,0 +1,23 @@
# 基本数据类型
在编程中,基本数据类型用于表示不同类型的数值和字符,是编写程序的基础。常见的基本数据类型包括:
## · 整数型:`int`、`long long`
- 用于表示整数值。
- `int` 通常用于表示较小范围的整数。
- `long long` 用于表示更大范围的整数,尤其是在处理大数计算时常用。
## · 实数型:`float`、`double`
- 用于表示带小数点的实数。
- `float` 表示单精度浮点数,精度较低,占用内存较小。
- `double` 表示双精度浮点数,精度更高,占用内存更大,适合科学计算。
## · 字符型:`char`
- 用于存储单个字符,如 `'A'`、`'b'`、`'1'`。
- 本质上是一个整数类型,通常占用 1 字节空间,对应 ASCII 编码表。
## · 布尔型:`bool`
- 用于表示逻辑值:`true`(真)或 `false`(假)。
- 常用于条件判断、控制程序流程。

View File

@ -0,0 +1,236 @@
# 3. 程序基本语句
程序是由一条条“语句”组成的,每条语句都有其明确的功能,例如输入、输出、赋值、判断、循环等。掌握基本语句,是学会编写程序的第一步。
---
## 📥输入、输出与赋值语句
### 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. 赋值语句
将右侧的值赋给左侧变量,是程序中最基本的操作之一。
```cpp
int a;
a = 5;
a = a + 10; // 赋值时,先计算右边的值
```
### 4. 复合语句
复合语句即“语句块”,由一对花括号 `{}` 包裹起来的多条语句,常用于条件或循环控制中:
```cpp
{
int a = 1;
int b = 2;
cout << a + b << endl;
}
```
---
## 🔀选择结构语句
程序根据条件不同,执行不同的操作路径,这类语句称为“选择结构”。
### 1. if 语句
用于根据条件判断是否执行某些语句。
```cpp
if (a >= 60) {
cout << "及格";
} else {
cout << "不及格";
}
```
#### 多条件判断
```cpp
if (score >= 90) {
cout << "优秀";
} else if (score >= 80) {
cout << "良好";
} else {
cout << "继续加油";
}
```
### 2. switch 语句
适用于“固定选项”的多分支判断。
```cpp
int op = 2;
switch (op) {
case 1:
cout << "选项1";
break;
case 2:
cout << "选项2";
break;
default:
cout << "无效选项";
}
```
### 3. 多层条件语句(嵌套)
```cpp
if (x > 0) {
if (x % 2 == 0) {
cout << "正偶数";
} else {
cout << "正奇数";
}
} else {
cout << "非正数";
}
```
---
## 🔁循环结构语句
循环语句用于让程序重复执行某些操作。
### 1. for 语句(已知次数)
```cpp
for (int i = 1; i <= 5; i++) {
cout << i << " ";
}
```
结构包含三部分:
- 初始化:`int i = 1`
- 条件判断:`i <= 5`
- 更新表达式:`i++`
### 2. while 语句(先判断再执行)
```cpp
int i = 1;
while (i <= 5) {
cout << i << " ";
i++;
}
```
若初始条件不成立,则一次都不执行。
### 3. do while 语句(先执行后判断)
```cpp
int i = 1;
do {
cout << i << " ";
i++;
} while (i <= 5);
```
不管条件如何,至少执行一次。
---
## 🔃多层循环语句(嵌套循环)
循环内部再嵌套一个循环,称为“多层循环”,适用于图形输出、二维数组、表格处理等。
### 示例:打印矩形
```cpp
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 5; j++) {
cout << "* ";
}
cout << endl;
}
```
输出:
```
* * * * *
* * * * *
* * * * *
```
### 示例:九九乘法表
```cpp
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
cout << j << "*" << i << "=" << j*i << "\t";
}
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` 等 | 实现二维结构处理 |

View File

@ -19,10 +19,10 @@ nav:
- NOI竞赛大纲: - NOI竞赛大纲:
- 大纲: NOI竞赛大纲/大纲.md - 大纲: NOI竞赛大纲/大纲.md
- 一.基础知识与编程环境: - 一.基础知识与编程环境:
- 1.计算机基本构成: NOI竞赛大纲/1.计算机的基本构成.md - 1.计算机基本构成: NOI竞赛大纲/一.基础知识与编程环境/1.计算机的基本构成.md
- 2.Window与Linux等操作系统的基本概念及常见操作: NOI竞赛大纲/2.Window与Linux等操作系统的基本概念及常见操作.md - 2.Window与Linux等操作系统的基本概念及常见操作: NOI竞赛大纲/一.基础知识与编程环境/2.Window与Linux等操作系统的基本概念及常见操作.md
- 3.计算机网络和Internet的基本概念: NOI竞赛大纲/3.计算机网络和Internet的基本概念.md - 3.计算机网络和Internet的基本概念: NOI竞赛大纲/一.基础知识与编程环境/3.计算机网络和Internet的基本概念.md
- 4.计算机历史和常见用途: NOI竞赛大纲/4.计算机历史和常见用途.md - 4.计算机历史和常见用途: NOI竞赛大纲/一.基础知识与编程环境/4.计算机历史和常见用途.md
- 二.C++程序设计: - 二.C++程序设计:
- 1.程序基本概念: NOI竞赛大纲/二.C++程序设计/1.程序基本概念.md - 1.程序基本概念: NOI竞赛大纲/二.C++程序设计/1.程序基本概念.md
- 2.基本数据类型: NOI竞赛大纲/二.C++程序设计/2.基本数据类型.md - 2.基本数据类型: NOI竞赛大纲/二.C++程序设计/2.基本数据类型.md
@ -43,7 +43,7 @@ nav:
- 队列: NOI竞赛大纲/三.数据结构/1.线性结构/队列.md - 队列: NOI竞赛大纲/三.数据结构/1.线性结构/队列.md
- 2.简单树: - 2.简单树:
- 树的定义与相关概念: NOI竞赛大纲/三.数据结构/2.简单树/树的定义与相关概念.md - 树的定义与相关概念: NOI竞赛大纲/三.数据结构/2.简单树/树的定义与相关概念.md
- C++库: - C++常用库:
- 总结: C++/总.md - 总结: C++/总.md
- iostream: C++/1.iostream.md - iostream: C++/1.iostream.md
- fstream: C++/2.fstream.md - fstream: C++/2.fstream.md