函数(function)是一段可重复使用的代码,用来完成一个明确任务。你已经使用过很多标准库功能,例如 cout、string::size()、max()。现在我们开始学习如何定义自己的函数。
定义函数
函数定义使用 returnType functionName。函数可以接收输入,也可以返回输出。括号里的 num1 和 num2 是参数(parameter),调用函数时传进去的 4、12 这类具体值叫实参(argument)。
#include <iostream>
int larger(int num1, int num2) {
if (num1 > num2) {
return num1;
} else {
return num2;
}
}
int main() {
std::cout << larger(4, 12) << '\n';
std::cout << larger(54, 33) << '\n';
return 0;
}运行结果:
12
54return 的作用是把结果交回给调用者(caller)。函数执行到 return 后,本次函数调用就结束了。
知识测验
题目
return 在函数中的作用是什么?
没有返回值的函数
有些函数只负责执行动作,不需要返回结果。例如打印一个简单棋盘:
#include <iostream>
#include <string>
void print_greeting(const std::string& name) {
std::cout << "Hello, " << name << "!\n";
}
int main() {
print_greeting("Alice");
return 0;
}返回类型为 void 的函数不返回结果;函数执行到末尾后,控制权直接回到调用位置。
函数调用
函数调用(function call)发生时,程序会暂时离开当前位置,进入被调用函数的函数体(function body)内部执行。函数结束后,程序再回到原来的位置继续执行。这个“进入与返回”的过程可以用调用栈(call stack)理解。
互动实验
调用者 → 函数 → 返回值
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
下面的程序把“两点间距离”的计算拆成 distance() 和辅助函数 square()。一个函数可以调用另一个函数,把复杂计算分解成清晰的小步骤。
#include <cmath>
#include <iostream>
double square(double value) {
return value * value;
}
double distance(double x1, double y1, double x2, double y2) {
return std::sqrt(square(x2 - x1) + square(y2 - y1));
}
int main() {
double x1, y1, x2, y2;
char comma;
std::cout << "请输入第一个点,例如 0, 0:";
std::cin >> x1 >> comma >> y1;
std::cout << "请输入第二个点,例如 3, 4:";
std::cin >> x2 >> comma >> y2;
std::cout << "距离:" << distance(x1, y1, x2, y2) << '\n';
return 0;
}一次可能的运行结果:
请输入第一个点,例如 0, 0:0, 0
请输入第二个点,例如 3, 4:3, 4
距离:5.0互动实验
嵌套调用:distance() 两次请求 square()
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
函数调用时,程序会发生什么?
main()
每个 C++ 程序都从 main() 开始执行。其他函数必须在调用前完成声明或定义。
int main() {
std::cout << "程序开始\n";
return 0;
}动手练习
写一个计算绝对差的函数
编写 absolute_difference(num1, num2),返回两个数差值的绝对值。
- 定义函数。
- 使用 if/else 返回非负差值。
- 至少打印两组调用结果。
动手练习
写一个判断素数的函数
把素数判断封装进可复用的 is_prime(n)。
- n <= 1 时返回 false。
- 检查到 sqrt(n)。
- 在 main() 函数中读取并输出结果。
动手练习
计算一年中的第几天
拆出 is_leap、days_in_month 和 day_of_year 三个函数。
- 实现闰年判断。
- 返回每个月天数。
- 让 day_of_year 和 main 调用辅助函数。