函数定义与调用

概念讲解

函数定义

1234返回类型 函数名(参数列表) {
    函数体;
    return 返回值;
}

示例

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

函数调用

12int result = add(3, 5);
cout << result;  // 8

参数传递

123456789// 值传递
void func(int x) {
    x = 100;  // 不影响原变量
}

// 引用传递
void func(int& x) {
    x = 100;  // 影响原变量
}

返回值

123int max(int a, int b) {
    return a > b ? a : b;
}

变量作用域

局部变量

123void func() {
    int x = 10;  // 局部变量
}

全局变量

12345int x = 10;  // 全局变量

void func() {
    cout << x;  // 可以访问
}

考点分析

初赛考查方式

  1. 选择题: 函数定义
  2. 程序阅读: 函数调用
  3. 填空题: 参数传递

常见题型

  • 函数定义
  • 参数传递
  • 递归函数

例题精讲

例题 1:函数定义

题目: 定义一个函数求两个数的最大值。

解答:

123int max(int a, int b) {
    return a > b ? a : b;
}

例题 2:值传递

题目: 以下代码的输出是什么?

12345678910void func(int x) {
    x = 100;
}

int main() {
    int a = 10;
    func(a);
    cout << a;
    return 0;
}

解答:

值传递,不影响原变量
输出:10

练习题

  1. 定义一个函数求 n 的阶乘。
查看答案
1234long long factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

或使用循环:

1234567long long factorial(int n) {
    long long result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}
  1. 值传递和引用传递的区别是什么?
查看答案
特性 值传递 引用传递
语法 void func(int x) void func(int& x)
对原变量 不影响 影响
用途 只读参数 需要修改参数
123456void byValue(int x) { x = 100; }
void byRef(int& x) { x = 100; }

int a = 10;
byValue(a);  // a 仍然是 10
byRef(a);    // a 变为 100
  1. 什么是递归函数?
查看答案

递归函数是调用自身的函数。

递归三要素:

  1. 边界条件:递归终止的条件
  2. 递推关系:大问题和小问题的关系
  3. return 返回值:返回结果

示例(求阶乘):

1234int factorial(int n) {
    if (n <= 1) return 1;  // 边界条件
    return n * factorial(n - 1);  // 递推关系
}

易错点

⚠️ 注意:

  1. 函数要有返回值
  2. 值传递不影响原变量
  3. 引用传递会影响原变量
  4. 注意变量的作用域