Files
project1/第01课-C++自带函数/教案-教师版.md
2026-07-02 16:54:05 +08:00

6.4 KiB
Raw Blame History

第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 判断是否为字母AZ 或 az
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' 小写转大写

注意tolowertoupper 返回的是 intASCII 码),输出时转回 charcout << (char)tolower('A'); 输出 a


题目一:计算两点之间的距离

核心代码(一句话)

两点距离的核心:勾股定理sqrtpow 配合使用,一行搞定。

自然语言思路

小明站在平面上的 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;
}

注意点

  1. 头文件别忘sqrtpow<cmath> 里,格式化输出在 <iomanip> 里。
  2. pow 的第二个参数pow(底数, 指数),指数写 2 表示平方,写 0.5 也能表示开方(和 sqrt 等价)。
  3. 坐标相减顺序无所谓pow(x1-x2, 2)pow(x2-x1, 2) 结果一样,因为平方消掉了负号。
  4. 保留小数的另一种写法printf("%.2f", dist) 也可以,需要 <cstdio>

题目二:(待橙子补充)

建议覆盖:max/minswap<algorithm> 函数


核心代码(一句话)

自然语言思路

伪代码

真实代码


注意点


题目三:(待橙子补充)

建议覆盖:isalphaisdigitislowerisuppertolowertoupper<cctype> 函数


核心代码(一句话)

自然语言思路

伪代码

真实代码


注意点


本课打油诗

自带函数真方便,头文件里全找见。 省心省力少出错,一行代码就实现。


课后作业

(待补充) 1. 2.