函数
1.函数的定义与调用
C语言提供了很多函数,比如用sqrt求平方根:(头文件:math.h)
其中double y=sqrt(x);称为"调用sqrt函数",通过调用函数求x的平方根.还有用fabs(x),求x的绝对值等等,然而函数不只有数学函数,还有很多,甚至连头文件里面都不包含的函数.因此C语言允许程序员自定义函数.
函数具备三要素:函数名,函数类型,还有参数列表; 格式如下:
例:比较大小,返回较小.
min是函数的名字,可有程序员自定义.为了提高可读性,函数名尽量浅显易懂. int x , int y 位于( )内,称为"参数列表".x和y代表流入min函数的值(由主函数流入到min函数里面).括号( )里面的参数类型要与从主函数流入数据变量一致.在主函数中,x y 是整型,那么副函数的( )里面也要相对应.如果要转换类型则在副函数的{}里面修改.另外主函数的x,y的位置与副函数的参数列表位置相对应.(除主函数外我称其他函数为副函数) return后面的 x 或 y 就是返回给主函数的数值. 函数的类型(int / double / void)由主函数需要返回的类型决定. 例:通过副函数输出较小值,返回值为空
这样我们就可以把输出交给副函数output了,输出数值不需要返回,因此函数类型可以定义为空(void)
值得注意的是: 函数一定要有函数类型,和函数名.但可以没有列表参数. 比如生成随机数(黄色那一段):
函数的调用,由上面的例可知,主函数中有接受副函数返回的值.并由副函数返回的值给新定义的数据变量赋值.
在前面的例子中,你发觉主函数都在下面,副函数在主函数上面.其实这种局面可以很好改的,也应该改为主函数在开头,副函数在主函数下面. 只要像下面的格式就好了:(注意符号,请仔细品)
2.函数参数的值传递
在红框内部的形式,我们统称为参数列表.它有两种划分,第一种就是红框内的格式,称为形式参数,第二种就是传递参数. 举个例子,下图中的y与a相等吗?
我们输入7 和 8试一下:
发现 y 的值没有变,哎?! 这种类型就是形式参数啦. 形式参数,顾名思义就是在副函数走个形式,不改变本身数值. 接下来说一说实际参数,也就是使用并更改函数中数据变量原来的数值. 之前我们提到"&"是取地址符,在这里我们可以通过取地址符改变原来的数据变量值. 以下图为例:
注意观察"&"的位置,以及输出的结果. 通过取地址符,我们利用副函数改变了主函数中的 y 值.
3.数据重载与默认参数*(不要求掌握)
注意:这小节我导师并没有跟我提起过,我通过看书理解的.
3.1函数重载
以比较大小为例,有时候我们比较大小,有整数类型的([int]1 2 3 4 ...),有浮点类型的([double/float]1.1 1.4 1.6 ....),还有字符类型([char]'a' 'b' 'c' ....).那么我们程序员就要写不同类型的比较函数了... 比如: 这就给我们程序员敲代码带来极其不便,这样写需要程序员牢记每一个函数名和功能,而区别也只是参数类型不同而已. c++允许多个函数同名,只要参数列表不同就可以了.这就是函数重载. 如图:
换句话说,函数的辨别是通过函数名和函数列表共同区分. 但是要注意以下两点: 1.形式参数的名字不能区分函数,例如int max(int x,int y)与int max(int a,int b)不能区分函数. 2.函数返回值类型(副函数类型)也不能区分函数,例如int max(int x)与void max(int x)不能区分函数.
3.2函数默认参数
顾名思义就是给参数列表赋初值.
如果不输入x,y的值,它就用参数列表里面的值. 如果只输入一个x或y的值,那么副函数就不用相应的x或y的值而使用输入的值.
4.递归函数
4.1递归解释.
递归,简单来说就是一个函数调用一个函数,知道得出结果.(弄不好结果都没有,一直循环下去,直到死机) 主要是把复杂的函数逐步简单化. 就像以前讲的故事: 从前有座山,山上有座庙,庙里有个老和尚,老和尚在讲故事,他说啊: 从前有座山,山上有座庙,庙里有个老和尚,老和尚在讲故事,他说啊: 从前有座山,山上有座庙,庙里有个老和尚,老和尚在讲故事,他说啊: .....
4.1递归函数的调用
可分为两种:1,直接调用.2,间接调用.
间接的我用的比较少,所以我用直接调用为例吧 例如:n!=n*(n-1)(n-2)...*1
这期的内容比较多(图多,细节多),希望小伙伴们能在空余时间慢慢消化. 现已三月下旬,多地已经逐步复工,望小伙伴们注意身体,疫情没过去,防控不能松. 以上就是本期内容,谢谢.