初识函数
从数学谈起
数学上的函数读者应当都有所了解。我们先陈述一下数学上函数的定义: 设有两个数的集合 和 ,并存在一种对应关系 使得对于集合 中任意一个元素 ,在集合 中都存在唯一的一个元素 与之对应,则记作:
,也记作 。称集合 为定义域,称集合 为陪域。数学上,称 是函数 的变元;物理上,称 为自变量,称 为因变量。
陪域和值域 是不同的,但这是数学上的概念辨析,这里不做展开。
比如函数 中, 是对应法则,而 是因变量, 是自变量。同时,我们默许了定义域和陪域都是实数域 。(值域是区间 。)
计算机中的“函数”
数学上的函数可以在计算机中表现出来。比如现在考虑一个非常简单的一次函数:,其中定义域为全体整数 ,陪域也是全体整数 。我现在想在 C++ 程序上把这个函数“表现”出来——但是显然计算机表达不了全体整数(因为整数有无穷多个,但计算机的存储空间是有限的),所以咱们暂时就把定义域和陪域都限制在 int
类型的表达范围内。那么写成这个样子就可以定义函数 :
读者们看了可能一脸懵逼,这啥玩意儿啊?请看下图,这段代码里面至少体现了一个函数的几个关键信息:定义域、陪域、函数名以及函数的解析式:
目前咱们先不要管“为什么写成这个鬼样子”、“return
是啥意思”,照葫芦画瓢写就是了。
你可以把这段代码放在 int main() {
的上面,然后你就可以像数学上的写法一样去使用这个函数。请看下面的例子:
这里 3 ~ 5 行定义了刚刚的那个函数 ,然后第九行使用了这个函数——令变量 y
的值为 f(x)
。其中 x
的值为 42,因此 f(x)
的值为 85。因此 y
赋值后就得到了 85:
85
为了演示,我再举一个二次函数的例子:。那么我可以这样在 C++ 中表示它:
同样地,你可以像刚才那样去使用这个函数。把这段代码放在最上面:
编译运行的效果是:
¶-5↵
46
现在来考虑绝对值函数 。该如何在 C++ 中表示这个函数呢?根据定义:
那么我可以用条件表达式来写出它的解析式:
看上去不错;你也可以像刚才那样试着去使用它。最后来看一看符号函数 。它数学上的定义是:
那么同样运用条件表达式——
停停停。你会发现这样写有点太乱了,对吧。那么其实我们可以把条件表达式改成 if 语句的形式……
int sgn(int x) {
int y;
if (x > 0) {
y = 1;
} else if (x == 0) {
y = 0;
} else {
y = -1;
}
return y;
}
就像我们原来写代码那样。先设置一个变量 y
用于存放整个函数计算出来的值,随后根据不同的 x
判断 y
应该赋什么值。这时,变量 y
的值就代表了 sgn(x)
这个函数应该是多少(相当于原来解析式的作用),因此只要把 y
放在 return
后面就好。
上面的代码中,我们在第 2 行到第 9 行以 C++ 语言的形式实现了函数的对应法则。
多元函数
数学上有一种函数叫多元函数。多元函数是指将有序数组 通过某个对应规则 映射到唯一对应的数 上,记作
多元函数的准确定义需要用到笛卡尔积的概念,然而这里为了避免晦涩难懂的词汇从而不展开讲解。
最常见的多元函数就是最大值函数 了。比如 就是取 这些变元中最大的那个。
同样地,C++ 中可以很方便地将多元函数表达出来。用接受两个变元的最大值函数 举例,我们可以轻松地写出解析式
那么把它用刚刚学过的那个葫芦装起来:
当然你也可以用语句来代替条件表达式:
然后你就可以这样去使用这个多元函数:
这段程序会输出输入的两个数之中较大的那个。
不管怎么说,目前你知道 C++ 有一种神奇的写法可以表达出一个数学上简单的函数或者多元函数。当这个函数表达出来之后,你可以用一种很直接的方式(比如 y = f(x)
)去使用它。那么这就是你对 C++ 中函数的初步认识。
直到现在我们仍然没有给出 C++ 中函数的具体定义。下一节中我们将进行更详细的学习。