6.4 KiB
第1课:C++自带函数
教学目标
- 学会查阅和使用C++标准库自带函数
- 掌握
<cmath>、<algorithm>、<cctype>三个常用头文件 - 能用自带函数解决计算问题,体会"站在巨人的肩膀上"
核心考点:正确选择并使用标准库函数
考什么
题目通常给出一个计算或处理任务,要求选择合适的标准库函数,并写对头文件、参数和返回值。例如开平方用 sqrt,求最大值用 max,判断字符用 isdigit。考试不只考“记住函数名”,还考能否把函数正确放进完整程序。
必须理解
调用标准库函数要过三关:第一,函数属于哪个头文件;第二,传入参数的类型和含义;第三,返回结果是什么类型。例如 sqrt(x) 返回浮点数,即使 x 是整数,也要注意精度和类型。
核心写法
#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 |
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,保留两位小数
真实代码
#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;
}
注意点
- 头文件别忘:
sqrt和pow在<cmath>里,格式化输出在<iomanip>里。 - pow 的第二个参数:
pow(底数, 指数),指数写2表示平方,写0.5也能表示开方(和 sqrt 等价)。 - 坐标相减顺序无所谓:
pow(x1-x2, 2)和pow(x2-x1, 2)结果一样,因为平方消掉了负号。 - 保留小数的另一种写法:
printf("%.2f", dist)也可以,需要<cstdio>。
题目二:(待橙子补充)
建议覆盖:
max/min、swap等<algorithm>函数
核心代码(一句话)
自然语言思路
伪代码
真实代码
注意点
题目三:(待橙子补充)
建议覆盖:
isalpha、isdigit、islower、isupper、tolower、toupper等<cctype>函数
核心代码(一句话)
自然语言思路
伪代码
真实代码
注意点
本课打油诗
自带函数真方便,头文件里全找见。 省心省力少出错,一行代码就实现。
课后作业
(待补充) 1. 2.