函数

题单类型:官方题单
创建人:
ACGO官方
题数:18
收藏题单
完成度:0/18

函数

1. 数学函数

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


1.1 maxmin

作用:

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

参考代码

#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) 表示对 xx 向上取整,得到“最小的整数且不小于 xx”。

例子:

  • 3.0=3\lceil 3.0\rceil=3
  • 3.2=4\lceil 3.2\rceil=4
  • 2.3=2\lceil -2.3\rceil=-2

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

参考代码

#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) 表示对 xx 向下取整,得到“最大的整数且不大于 xx”。

例子:

  • 3.0=3\lfloor 3.0\rfloor=3
  • 3.9=3\lfloor 3.9\rfloor=3
  • 2.3=3\lfloor -2.3\rfloor=-3

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

参考代码

#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) 表示对 xx 进行四舍五入,得到“最接近的整数”。

例子:

  • round(3.2)=3\mathrm{round}(3.2)=3
  • round(3.5)=4\mathrm{round}(3.5)=4
  • round(2.5)=3\mathrm{round}(-2.5)=-3

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

参考代码

#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) 表示对 xx 求平方根。

例子:

  • 9=3\sqrt{9}=3
  • 21.414\sqrt{2}\approx 1.414

注意:

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

参考代码

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

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

1.6 absfabs(绝对值)

绝对值表示“距离 00 的距离”。

  • abs(x) 常用于整数(int / long long
  • fabs(x) 常用于浮点数(double

例子:

  • 5=5|5|=5
  • 5=5|-5|=5
  • 3.2=3.2|-3.2|=3.2

参考代码

#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) 表示计算 aba^b

例子:

  • 23=82^3=8
  • 102=10010^2=100

注意:

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

参考代码

#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 自定义函数的基本格式

一个函数一般由三部分组成:

  • 返回值类型
  • 函数名
  • 参数列表

基本结构:

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

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

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

调用方式:

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 函数一般用于不需要返回值的功能, 例如:

  • 输出
  • 修改数组
  • 完成某个操作

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

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

调用:

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

2.5 带参数的函数

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

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

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

调用:

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

2.6 多个参数的函数

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

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

2.7 函数传递方式

2.7.1 值传递

特点:

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

例子:

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

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

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

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

特点:

  • 函数内部修改参数,会影响外面
  • 适合需要修改变量、或者数据量大的情况

例子:交换两个数

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、排序

【思维导图】

【题目知识点分类】