From 36c7ba84c326a737f995cc8c354ab2986d9fff01 Mon Sep 17 00:00:00 2001 From: sairate Date: Sat, 19 Apr 2025 20:04:02 +0800 Subject: [PATCH] =?UTF-8?q?docs(NOI=E7=AB=9E=E8=B5=9B=E5=A4=A7=E7=BA=B2):?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=20C++=20=E7=A8=8B=E5=BA=8F=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=9F=BA=E7=A1=80=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增程序基本概念、基本数据类型、程序基本语句等文档 - 更新 mkdocs.yml 配置,优化文档结构- 调整部分文档路径,提高可读性 --- .idea/workspace.xml | 13 +- .../二.C++程序设计/2.基本数据类型.md | 111 ++++++- .../二.C++程序设计/3.程序基本语句.md | 279 ++++++++---------- 3 files changed, 223 insertions(+), 180 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index a448cf92..0b5e5f18 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,8 +5,9 @@ - + + diff --git a/notebook/docs/NOI竞赛大纲/二.C++程序设计/2.基本数据类型.md b/notebook/docs/NOI竞赛大纲/二.C++程序设计/2.基本数据类型.md index 12db333a..b4b5f227 100644 --- a/notebook/docs/NOI竞赛大纲/二.C++程序设计/2.基本数据类型.md +++ b/notebook/docs/NOI竞赛大纲/二.C++程序设计/2.基本数据类型.md @@ -1,23 +1,102 @@ +# 2. 基本数据类型 -# 基本数据类型 +在编程中,**数据类型**用于定义变量可以存储的数据种类。掌握各种基本数据类型是理解变量、表达式和内存占用的基础。 -在编程中,基本数据类型用于表示不同类型的数值和字符,是编写程序的基础。常见的基本数据类型包括: +--- -## · 整数型:`int`、`long long` -- 用于表示整数值。 -- `int` 通常用于表示较小范围的整数。 -- `long long` 用于表示更大范围的整数,尤其是在处理大数计算时常用。 +## 【 1 】整数型:`int`、`long long` -## · 实数型:`float`、`double` -- 用于表示带小数点的实数。 -- `float` 表示单精度浮点数,精度较低,占用内存较小。 -- `double` 表示双精度浮点数,精度更高,占用内存更大,适合科学计算。 +### 🔹 `int` 【难度:1】 +- 用于表示一般范围的整数(如:-100, 0, 999 等)。 +- 占用内存:通常为 **4字节(32位)** +- 范围(有符号):约 -231 到 231-1 -## · 字符型:`char` -- 用于存储单个字符,如 `'A'`、`'b'`、`'1'`。 -- 本质上是一个整数类型,通常占用 1 字节空间,对应 ASCII 编码表。 +```cpp +int age = 18; +``` -## · 布尔型:`bool` -- 用于表示逻辑值:`true`(真)或 `false`(假)。 -- 常用于条件判断、控制程序流程。 +### 🔹 `long long` 【难度:1】 +- 表示更大的整数,通常用于涉及大数计算(如阶乘、数据统计等)。 +- 占用内存:**8字节(64位)** +- 范围(有符号):约 -263 到 263-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 | + +--- + +## ✅ 小结 + +- 整数类型用于计数、下标等离散数据; +- 实数类型用于精确度要求较高的计算; +- 字符类型用于文本字符操作; +- 布尔类型用于控制逻辑和条件判断。 diff --git a/notebook/docs/NOI竞赛大纲/二.C++程序设计/3.程序基本语句.md b/notebook/docs/NOI竞赛大纲/二.C++程序设计/3.程序基本语句.md index aa7b79fa..6649687e 100644 --- a/notebook/docs/NOI竞赛大纲/二.C++程序设计/3.程序基本语句.md +++ b/notebook/docs/NOI竞赛大纲/二.C++程序设计/3.程序基本语句.md @@ -1,236 +1,191 @@ # 3. 程序基本语句 -程序是由一条条“语句”组成的,每条语句都有其明确的功能,例如输入、输出、赋值、判断、循环等。掌握基本语句,是学会编写程序的第一步。 +程序语句是构成程序逻辑的核心部分,掌握基本语句的使用,是编程入门的关键。本章将系统讲解输入输出、条件判断、循环结构等常用语句。 --- -## 📥输入、输出与赋值语句 - -### 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. 赋值语句 - -将右侧的值赋给左侧变量,是程序中最基本的操作之一。 +## 【2】输入输出语句与赋值语句 +### ✅ cin 和 cout(C++ 风格) ```cpp -int a; -a = 5; -a = a + 10; // 赋值时,先计算右边的值 +#include +using namespace std; + +int main() { + int a; + cin >> a; // 输入一个整数 + cout << "你输入的是: " << a << endl; + return 0; +} ``` +- `cin >>`:从键盘读取输入。 +- `cout <<`:输出内容到屏幕。 +- `<< endl`:换行输出。 -### 4. 复合语句 +--- -复合语句即“语句块”,由一对花括号 `{}` 包裹起来的多条语句,常用于条件或循环控制中: +### ✅ scanf 和 printf(C 风格) +```cpp +#include +int main() { + int a; + scanf("%d", &a); // 输入一个整数 + printf("你输入的是: %d\n", a); + return 0; +} +``` +- `%d` 表示格式化整数,`&a` 是地址符,表示把输入值存入变量 a。 + +--- + +### ✅ 赋值语句 +```cpp +int x; +x = 10; +``` +- 把右边的表达式结果赋值给左边的变量。 + +--- + +### ✅ 复合语句(代码块) ```cpp { - int a = 1; - int b = 2; + int a = 5; + int b = 6; cout << a + b << endl; } ``` +- 大括号 `{}` 包裹的是复合语句,表示多个语句作为一个整体执行。 --- -## 🔀选择结构语句 - -程序根据条件不同,执行不同的操作路径,这类语句称为“选择结构”。 - -### 1. if 语句 - -用于根据条件判断是否执行某些语句。 +## 【2】条件语句(选择结构) +### ✅ if 语句 ```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 << "及格"; } else { cout << "不及格"; } ``` -#### 多条件判断 +--- +### ✅ switch 语句 ```cpp -if (score >= 90) { - cout << "优秀"; -} else if (score >= 80) { - cout << "良好"; -} else { - cout << "继续加油"; -} -``` - -### 2. switch 语句 - -适用于“固定选项”的多分支判断。 - -```cpp -int op = 2; -switch (op) { +int option = 2; +switch(option) { case 1: - cout << "选项1"; + cout << "选项一"; break; case 2: - cout << "选项2"; + cout << "选项二"; break; default: cout << "无效选项"; } ``` - -### 3. 多层条件语句(嵌套) - -```cpp -if (x > 0) { - if (x % 2 == 0) { - cout << "正偶数"; - } else { - cout << "正奇数"; - } -} else { - cout << "非正数"; -} -``` +- `switch` 适用于整型、字符型变量。 +- 每个 `case` 后面用 `break` 防止穿透执行。 --- -## 🔁循环结构语句 - -循环语句用于让程序重复执行某些操作。 - -### 1. for 语句(已知次数) +## 【2】循环语句(重复结构) +### ✅ for 循环 ```cpp -for (int i = 1; i <= 5; i++) { +for (int i = 0; i < 5; i++) { cout << i << " "; } ``` +- 固定次数循环,通常用于计数。 -结构包含三部分: -- 初始化:`int i = 1` -- 条件判断:`i <= 5` -- 更新表达式:`i++` - -### 2. while 语句(先判断再执行) +--- +### ✅ while 循环 ```cpp -int i = 1; -while (i <= 5) { +int i = 0; +while (i < 5) { cout << i << " "; i++; } ``` +- 先判断再执行,适用于条件满足才循环的情况。 -若初始条件不成立,则一次都不执行。 - -### 3. do while 语句(先执行后判断) +--- +### ✅ do while 循环 ```cpp -int i = 1; +int i = 0; do { cout << i << " "; i++; -} while (i <= 5); +} while (i < 5); ``` - -不管条件如何,至少执行一次。 +- 至少执行一次,再判断条件。 --- -## 🔃多层循环语句(嵌套循环) - -循环内部再嵌套一个循环,称为“多层循环”,适用于图形输出、二维数组、表格处理等。 - -### 示例:打印矩形 - -```cpp -for (int i = 1; i <= 3; i++) { - for (int j = 1; j <= 5; j++) { - cout << "* "; - } - cout << endl; -} -``` - -输出: - -``` -* * * * * -* * * * * -* * * * * -``` - -### 示例:九九乘法表 +## 【3】多层循环语句 +### ✅ 二重循环示例:九九乘法表 ```cpp for (int i = 1; i <= 9; i++) { 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; } ``` -输出: - -``` -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` 是常用循环方式。 +- 多层嵌套循环用于复杂数据结构处理。 +- 编写循环时要注意终止条件,防止死循环。