【程序设计】1.3 [做算术] 函数
1.3 函数
前面说了数据有类型,并且除法会计算出浮点数来,如果我们希望得到一个整数,比如四舍五入成整数,那该怎么办?
学到现在,似乎还不会做这件事?我们不知道怎么把一个浮点数变成整数,即使计算结果是整数(比如 6/3),但也会表示为浮点数(3.0),没法变成计算机里的整数。
要完成这件事,我们需要借助一个名叫 int 的函数。
A |
|
1 |
=int(6/3) |
2 |
=int(100/3+0.5) |
int(3.0)=3,int(3.1)=3
int(-3.0)=-3,int(-3.1)=-3
(这里的 = 不是赋值语句,是数学上的等式)
其实函数这个概念并不新鲜,在高中数学课就出现过。我们可以先认为程序语言中的函数概念和数学中的函数是一样的,都有自变量(在程序语言中习惯叫参数)和因变量(在程序语言中习惯叫返回值),即 y=f(x) 中,x 是参数,y 是返回值,或者直接说 f(x)返回y。
int(x) 就是以数值 x 为参数,返回比 x 的整数部分,我们叫它取整函数。
顺便说一句,int(x) 返回的整数是 32 位的,把数值(整数或浮点数或长整数本身)转成长整数要用函数 long(x)。当然,还有把数值转成浮点数的函数 float(x)。
实用的程序代码中会出现大量的程序语言中已经有的现成函数,我们把这些事先提供好的函数又称为库函数,好象从一个由函数构成的仓库中取出。一个好的编程人员通常要熟悉数百个常用的库函数,学习一门程序语言,了解并掌握它的库函数是非常必要且重要的。
库函数的作用,主要是复用前人的劳动成果。别人已经写过的完成某种运算的代码,如果已经封装成库函数,我们就直接拿来用就行了,没必要自己再写一遍,即麻烦又可能出错。
而且,对于做上层应用的编程人员来讲,很多处理底层运算的代码是写不出来的,这类运算只能借助库函数来实现。比如这个 int(x),使用 SPL 的代码就几乎无法实现(说几乎,是因为在不考虑效率时还真可以硬拼出来,等学过后面内容可以自己练习一下)。
好奇的你可能要问,如果这门语言写不出自己的库函数,那这些库函数是怎么来的?
程序语言一般是由另一种更基础的程序语言来编写出来的,那么它的库函数就可以由这门更基础的程序语言来编写。比如现在用的 SPL 是 Java 编写的,那 SPL 自己写不出来的库函数就是 Java 写出来的;Java 则是 C 语言编写的,Java 自己写不出来的库函数则用 C 语言编写;C 语言的内核是汇编语言编写的,C 语言写不出来的库函数则由汇编语言编写;到了汇编语言一级,就没有写不出来的库函数了(到这一级的函数已经面目全非了)。
这是些题外话。
程序语言中的函数概念,还要比中学数学的函数要更广泛一点。
函数可以没有参数,比如 SPL 有个 pi() 函数,它就是返回π。计算圆面积可以写成:
>S=pi()*r*r
函数还可以没有返回值,比如 output(x) 函数。
A |
|
1 |
>output("Hello,World") |
执行上面的代码,会在界面右下部分看到 Hello,World 字样。
output(x) 函数将把 x 输出到右下的输出窗口,它没有返回值。
没有返回值的函数,实际上是执行了一个动作,它的作用更像是一条语句。
其实,函数这个词在英语中是 function,它还有“功能”的意思,返回某个值和起到某种功能,在英语中本来也是不区分的。程序员的世界中,函数这个词确实早已超越了要返回某个值的概念,干什么事都可以看成是一个函数的任务。
从这个意义上讲,我们有时候把使用函数计算也称为调用某个函数,也就是执行某项任务的意思。
和数学上的函数类似,程序语言中的函数还可能有多个参数。比如 max(x,y) 将返回 x 和 y 中较大的数。
有些函数的参数个数是确定的,比如乘方函数 power(a,x) 返回 ax,它固定有两个参数。而 max 函数可以有多个参数,max(1,2) 和 max(3,4,5) 都是合理的。
SPL 函数的参数还可能有缺省值,比如前面那个 pi()函数其实有个参数 n,pi(n) 表示 nπ,但我们最常用的就是返回 1π的情况,没写这个参数时的 pi()就表示 pi(1),在掌握库函数时也需要了解它的参数缺省值,否则可能看不懂别人写的代码。
并非所有程序语言的函数都支持参数缺省值,在学习时要加以注意。
到目前为止,我们所学的内容还没有超过 Excel 的能力。