C++ 竞赛入门
函数参数
函数参数
本节学会什么
- 区分实参、形参和返回值
- 用值传递把数据交给函数计算
- 判断函数调用后原变量是否会改变
为什么需要它
函数名说明“做什么”,参数说明“需要什么数据”,返回值说明“得到什么结果”。先把这三件事写清楚,主程序就不用知道每一步计算的细节。默认情况下,函数获得的是实参的副本,这也是下一页理解引用参数的起点。
最小可运行示例
下面函数计算两数之差的绝对值。x 和 y 是形参;调用时传入的 a 和 b 是实参:
#include <iostream>
int absolute_difference(int x, int y) {
int difference = x - y;
if (difference < 0) {
difference = -difference;
}
return difference;
}
int main() {
int a = 3;
int b = 8;
int answer = absolute_difference(a, b);
std::cout << answer << '\n';
return 0;
}
输出是 5。调用结束后,a 仍然是 3,b 仍然是 8;函数改的是自己的形参和局部变量,计算结果通过 return 交给调用者。
关键过程与易错点
- 调用
absolute_difference(a, b)时,形参x、y各得到一份值。形参的名字不必与实参相同。 return value;结束函数并把一个结果交回去。非void函数的每条可达路径都应返回正确类型的值。void函数没有返回值,适合只输出或执行动作的场景;需要计算结果时不要把答案只打印在函数内部。- 值传递意味着
void add_one(int x) { x += 1; }不会改变调用者变量。下一页会学习什么时候用引用参数改变原变量。 - 参数顺序是接口的一部分。
absolute_difference(a, b)中第一个实参传给第一个形参;顺序复杂时应使用清晰命名,而不是依靠记忆。
动手检查
编写 int larger(int a, int b),返回较大的数。分别测试相等、前者更大和后者更大三种输入。
再写 void add_one(int x),在函数中给 x 加一,然后在 main 中输出原变量。确认它没有变化,并写一句话解释变化发生在副本上。这正是下一页要解决的问题。
立即练习
| 难度 | 题目 | 题解 | 训练目标 |
|---|---|---|---|
| 基础 | 洛谷 P5735:距离函数 | 题解 | 设计参数和返回值,让函数只完成距离计算。 |
| 巩固 | 洛谷 P5737:闰年展示 | 题解 | 将可重复的判断封装为 bool 函数。 |