测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看
官方题单 知识点专项

函数

先会用数学库函数,再学会封装自己的自定义函数。

开始练习 ← 返回广场
题数:18题
完成度:0/18

函数



1. 数学函数



数学函数是 C++ 中用来处理“常见数学操作”的工具,能让我们更方便地写出简洁的代码。

---

1.1 maxmin



作用:

  • max(a, b) 返回 $a$ 和 $b$ 中较大的那个
  • min(a, b) 返回 $a$ 和 $b$ 中较小的那个
  • 注意事项:$a$ 和 $b$ 必须是同一个数据类型,否则编译失败。

  • 参考代码


    ~~~cpp
    #include <bits/stdc++.h>
    using namespace std;

    int main() {
    int a = 3, b = 7;
    cout << max(a, b) << "\n"; // 7
    cout << min(a, b) << "\n"; // 3
    return 0;
    }
    ~~~

    常见用途:
  • 更新最大值:ans = max(ans, x);
  • 更新最小值:ans = min(ans, x);

  • ---

    1.2 ceil(向上取整)



    ceil(x) 表示对 $x$ 向上取整,得到“最小的整数且不小于 $x$”。

    例子:
  • $\lceil 3.0\rceil=3$
  • $\lceil 3.2\rceil=4$
  • $\lceil -2.3\rceil=-2$

  • 注意:ceil 返回的是 double 类型。

    参考代码


    ~~~cpp
    #include <bits/stdc++.h>
    using namespace std;

    int main() {
    double x = 3.2;
    cout << ceil(x) << "\n"; // 4
    return 0;
    }
    ~~~

    ---

    1.3 floor(向下取整)



    floor(x) 表示对 $x$ 向下取整,得到“最大的整数且不大于 $x$”。

    例子:
  • $\lfloor 3.0\rfloor=3$
  • $\lfloor 3.9\rfloor=3$
  • $\lfloor -2.3\rfloor=-3$

  • 注意:floor 返回的是 double 类型。

    参考代码


    ~~~cpp
    #include <bits/stdc++.h>
    using namespace std;

    int main() {
    double x = 3.9;
    cout << floor(x) << "\n"; // 3
    return 0;
    }
    ~~~

    ---

    1.4 round(四舍五入)



    round(x) 表示对 $x$ 进行四舍五入,得到“最接近的整数”。

    例子:
  • $\mathrm{round}(3.2)=3$
  • $\mathrm{round}(3.5)=4$
  • $\mathrm{round}(-2.5)=-3$

  • 注意:round 返回的是 double 类型。

    参考代码


    ~~~cpp
    #include <bits/stdc++.h>
    using namespace std;

    int main() {
    double x = 3.5;
    cout << round(x) << "\n"; // 4
    return 0;
    }
    ~~~

    ---

    1.5 sqrt(开平方)



    sqrt(x) 表示对 $x$ 求平方根。

    例子:
  • $\sqrt{9}=3$
  • $\sqrt{2}\approx 1.414$

  • 注意:
  • sqrt 的返回类型是 double
  • 如果 $x0$,sqrt(x) 在实数范围无意义(一般题目不会给负数)

  • 参考代码


    ~~~cpp
    #include <bits/stdc++.h>
    using namespace std;

    int main() {
    double x = 9;
    cout << sqrt(x) << "\n"; // 3
    return 0;
    }
    ~~~

    ---

    1.6 absfabs(绝对值)



    绝对值表示“距离 $0$ 的距离”。
  • abs(x) 常用于整数(int / long long
  • fabs(x) 常用于浮点数(double

  • 例子:
  • $|5|=5$
  • $|-5|=5$
  • $|-3.2|=3.2$

  • 参考代码


    ~~~cpp
    #include <bits/stdc++.h>
    using namespace std;

    int main() {
    int a = -10;
    double b = -3.14;

    cout << abs(a) << "\n"; // 10
    cout << fabs(b) << "\n"; // 3.14
    return 0;
    }
    ~~~

    注意:如果你写 abs(double),也可能能运行,但竞赛中更推荐浮点用 fabs,更清晰。

    ---

    1.7 pow(指数幂)



    pow(a, b) 表示计算 $a^b$。

    例子:
  • $2^3=8$
  • $10^2=100$

  • 注意:
  • pow 返回类型是 double
  • 在需要精确整数时,不要直接用 pow 当成整数结果(可能有精度误差)

  • 参考代码


    ~~~cpp
    #include <bits/stdc++.h>
    using namespace std;

    int main() {
    cout << pow(2, 3) << "\n"; // 8
    cout << pow(10, 2) << "\n"; // 100
    return 0;
    }
    ~~~



    ---

    1.8 头文件说明



    这些函数常见来源:
  • max / min/abs#include <algorithm>
  • ceil / floor / round / sqrt / fabs / pow#include <cmath>



  • 2. 自定义函数



    在C++中,自定义函数可以把“重复出现的代码”封装起来,使程序更清晰、更好写、更不容易写错。

    ---

    2.1 自定义函数的有点



    常见原因:

    1) 代码复用:一段逻辑要用很多次
    2) 让主程序更清晰main 里只保留流程
    3) 减少错误:修改时只改一个函数即可

    ---

    2.2 自定义函数的基本格式



    一个函数一般由三部分组成:
  • 返回值类型
  • 函数名
  • 参数列表

  • 基本结构:

    ~~~cpp
    返回值类型 函数名(参数类型1 参数1, 参数类型2 参数2, ...) {
    // 函数体
    return 返回值;
    }
    ~~~

    例子:写一个函数返回两个数的和

    ~~~cpp
    int add(int a, int b) {
    return a + b;
    }
    ~~~

    调用方式:

    ~~~cpp
    int c = add(3, 5); // c = 8
    ~~~

    ---

    2.3 常见返回值类型



    注意事项: 当返回值不为 void 类型时,一定要写上return语句返回函数结果,否则程序会运行错误。

    1) int:返回整数
    2) long long:返回大整数
    3) double:返回小数
    4) bool:返回真/假
    5) void:不返回值,只做事情

    ---

    2.4 void 函数(不返回值)



    void 函数一般用于不需要返回值的功能, 例如:
  • 输出
  • 修改数组
  • 完成某个操作

  • 例子:打印 $1\sim n$ 的所有整数

    ~~~cpp
    void print(int n) {
    for (int i = 1; i <= n; i++) {
    cout << i << " ";
    }
    cout << "\n";
    }
    ~~~

    调用:

    ~~~cpp
    print(5); // 输出:1 2 3 4 5
    ~~~

    ---

    2.5 带参数的函数



    参数可以让函数“更通用”,自定义函数可以没有参数,也可以有多个参数。

    例子:判断一个数是否为偶数

    ~~~cpp
    bool is_even(int x) {
    return x % 2 == 0;
    }
    ~~~

    调用:

    ~~~cpp
    if (is_even(10)) cout << "yes\n";
    else cout << "no\n";
    ~~~

    ---

    2.6 多个参数的函数



    例子:返回三个数的最大值

    ~~~cpp
    int max3(int a, int b, int c) {
    return max(a, max(b, c));
    }
    ~~~

    ---

    2.7 函数传递方式



    2.7.1 值传递


    特点:
  • 函数内部修改参数,不会影响外面
  • 适合小数据类型(int / long long

  • 例子:

    ~~~cpp
    void f(int x) {
    x = 100;
    }

    int main() {
    int a = 5;
    f(a);
    cout << a << "\n"; // 5
    }
    ~~~

    ---

    2.7.2 引用传递(直接用原变量)


    在变量名前面加上 & 符号, 则是引用传递。

    特点:
  • 函数内部修改参数,会影响外面
  • 适合需要修改变量、或者数据量大的情况
例子:交换两个数

~~~cpp
void Swap(int &a, int &b) {
int t = a;
a = b;
b = t;
}

int main() {
int x = 3, y = 7;
Swap(x, y);
cout << x << " " << y << "\n"; // 7 3
}
~~~



【前置知识点】
1、循环

【后置衔接知识点】
1、排序

【思维导图】



【题目知识点分类】