调整课次结构:前9节重新排序,新建第06课一维数组,后3节不变

This commit is contained in:
chengzi
2026-07-03 15:27:11 +08:00
parent 30f803784a
commit b973fb7825
29 changed files with 1301 additions and 13 deletions

View File

@@ -0,0 +1,187 @@
# 第1课C++自带函数
## 教学目标
- 学会查阅和使用C++标准库自带函数
- 掌握 `<cmath>``<algorithm>``<cctype>` 三个常用头文件
- 能用自带函数解决计算问题,体会"站在巨人的肩膀上"
## 核心考点:正确选择并使用标准库函数
### 考什么
题目通常给出一个计算或处理任务,要求选择合适的标准库函数,并写对头文件、参数和返回值。例如开平方用 `sqrt`,求最大值用 `max`,判断字符用 `isdigit`。考试不只考“记住函数名”,还考能否把函数正确放进完整程序。
### 必须理解
调用标准库函数要过三关:第一,函数属于哪个头文件;第二,传入参数的类型和含义;第三,返回结果是什么类型。例如 `sqrt(x)` 返回浮点数,即使 x 是整数,也要注意精度和类型。
### 核心写法
```cpp
#include <cmath> // sqrt、pow
#include <algorithm> // max、min、swap
#include <cctype> // isdigit、isalpha
double root = sqrt(x);
int bigger = max(a, b);
```
先根据任务选函数,再补头文件,最后检查参数范围和返回类型。
### 常见错误
- 忘记包含对应头文件,导致函数未声明。
- 认为 `pow` 一定返回整数,直接用于要求精确整数的运算,可能受到浮点误差影响。
- 只背函数名,不检查参数是否满足要求,例如对负数直接开平方。
### 判断是否掌握
看到“开平方、绝对值、最值、交换、字符分类”时,能说出函数名、头文件、关键参数和返回结果,并能独立写出一段正确调用代码。
---
## 函数速查表
### 一、数学计算函数(头文件:`<cmath>`
| 函数 | 参数 | 返回值 | 示例 | 说明 |
|------|------|--------|------|------|
| `sqrt(x)` | `double x` — 一个非负数 | `double` — x 的平方根 | `sqrt(16)``4.0` | 开根号 |
| `abs(x)` | `int x` — 一个整数 | `int` — x 的绝对值 | `abs(-5)``5` | 去掉负号 |
| `pow(a, b)` | `double a` — 底数,`double b` — 指数 | `double` — a 的 b 次方 | `pow(2, 3)``8.0` | aᵇ |
### 二、最值与交换函数(头文件:`<algorithm>`
| 函数 | 参数 | 返回值 | 示例 | 说明 |
|------|------|--------|------|------|
| `max(a, b)` | 两个同类型的值 | 同类型 — 较大值 | `max(3, 7)``7` | 两数取大 |
| `min(a, b)` | 两个同类型的值 | 同类型 — 较小值 | `min(3, 7)``3` | 两数取小 |
| `swap(a, b)` | 两个同类型的**变量** | `void`(无返回值) | `swap(x, y)` → x和y交换 | 交换两变量的值 |
### 三、字符判断函数(头文件:`<cctype>`
| 函数 | 参数 | 返回值 | 示例 | 说明 |
|------|------|--------|------|------|
| `isalpha(c)` | `char c` — 一个字符 | `bool` — 是字母返回 `true` | `isalpha('A')``true` | 判断是否为字母A~Z 或 a~z |
| `isdigit(c)` | `char c` — 一个字符 | `bool` — 是数字返回 `true` | `isdigit('5')``true` | 判断是否为数字0~9 |
| `islower(c)` | `char c` — 一个字符 | `bool` — 是小写字母返回 `true` | `islower('a')``true` | 判断是否为小写字母a~z |
| `isupper(c)` | `char c` — 一个字符 | `bool` — 是大写字母返回 `true` | `isupper('A')``true` | 判断是否为大写字母A~Z |
### 四、字符转换函数(头文件:`<cctype>`
| 函数 | 参数 | 返回值 | 示例 | 说明 |
|------|------|--------|------|------|
| `tolower(c)` | `char c` — 一个字符 | `int` — 对应的小写字母 ASCII 码 | `tolower('A')``97`(即 `'a'` | 大写转小写 |
| `toupper(c)` | `char c` — 一个字符 | `int` — 对应的大写字母 ASCII 码 | `toupper('a')``65`(即 `'A'` | 小写转大写 |
> **注意**`tolower` 和 `toupper` 返回的是 `int`ASCII 码),输出时转回 `char``cout << (char)tolower('A');` 输出 `a`。
---
## 题目一:计算两点之间的距离
### 核心代码(一句话)
> 两点距离的核心:**勾股定理**`sqrt` 和 `pow` 配合使用,一行搞定。
### 自然语言思路
小明站在平面上的 A 点 `(x₁, y₁)`,小红站在 B 点 `(x₂, y₂)`,求两人之间的直线距离。
第一步,算出**水平方向**差了多少:`x₁ - x₂`
第二步,算出**垂直方向**差了多少:`y₁ - y₂`
第三步,把两个差值**分别平方**,平方就用 `pow(差值, 2)`
第四步,两个平方**加起来**。
第五步,对和**开根号**,用 `sqrt`,得到最终距离。
第六步,题目一般要求保留小数,用 `fixed << setprecision(2)` 保留两位。
> 其实就是把"勾股定理"翻译成代码:`c = sqrt(a² + b²)`。
### 伪代码
```
1. 输入 x1, y1, x2, y2 (四个浮点数)
2. 计算 dx = x1 - x2 (水平距离)
3. 计算 dy = y1 - y2 (垂直距离)
4. 计算 dist = sqrt( pow(dx, 2) + pow(dy, 2) )
5. 输出 dist保留两位小数
```
### 真实代码
```cpp
#include <iostream>
#include <cmath> // sqrt、pow 在这里
#include <iomanip> // fixed、setprecision 在这里
using namespace std;
int main() {
double x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
double dist = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
cout << fixed << setprecision(2) << dist << endl;
return 0;
}
```
### 注意点
1. **头文件别忘**`sqrt``pow``<cmath>` 里,格式化输出在 `<iomanip>` 里。
2. **pow 的第二个参数**`pow(底数, 指数)`,指数写 `2` 表示平方,写 `0.5` 也能表示开方(和 sqrt 等价)。
3. **坐标相减顺序无所谓**`pow(x1-x2, 2)``pow(x2-x1, 2)` 结果一样,因为平方消掉了负号。
4. **保留小数的另一种写法**`printf("%.2f", dist)` 也可以,需要 `<cstdio>`
---
## 题目二:(待橙子补充)
> 建议覆盖:`max/min`、`swap` 等 `<algorithm>` 函数
---
### 核心代码(一句话)
>
### 自然语言思路
### 伪代码
### 真实代码
```cpp
```
### 注意点
---
## 题目三:(待橙子补充)
> 建议覆盖:`isalpha`、`isdigit`、`islower`、`isupper`、`tolower`、`toupper` 等 `<cctype>` 函数
---
### 核心代码(一句话)
>
### 自然语言思路
### 伪代码
### 真实代码
```cpp
```
### 注意点
---
## 本课打油诗
> 自带函数真方便,头文件里全找见。
> 省心省力少出错,一行代码就实现。
---
## 课后作业
(待补充)
1.
2.