目录
一.函数的含义
函数有两层含义:一是数学上的函数,数学上的函数是一种映射关系,就是给一个x值,通过一个y=f(x),会得到一个y值。二是计算机上的函数,要看英文解释,函数的英文是function,意思功能,我们可以把一个函数看作一个豆浆机,那么这个函数就是实现了打豆浆这个功能。我们并不需要知道具体他是怎么去打豆浆的,就像是一个黑匣子一样,只要知道放什么豆子,就出来什么豆浆。
二.面向过程编程的含义
面向过程编程,就是做一件复杂的事情,先对事件进行分解,分解成几个步骤,通过哪些步骤可以完成一个完整的功能,那么我们可以把每个步骤进行封装,就变成了函数,然后我们完成一件事情,只需要把在一个主函数中,分别调用这些功能,最后完成一个整体功能,这就是面向过程编程。
那么面向过程编程,最核心的就是封装一个豆浆机,也就是怎么封装函数。另外封装函数,还有一个好处就是可以复用,也就是重复使用。
三.函数的用法:
- 函数可以放在主函数的前面,这时候不需要再声明函数,建议用这种写法。
- 函数可以放在主函数的后面,这时候主函数前面需要先声明一下函数。
- 函数可以单独写到一个tools.c文件里面,这个文件名是自己起的。然后再需要用函数的候,可以#include “tools.c”进来,这样就可以做到一个函数,多个地方重复使用,这些函数就变成了工具,一旦要用就可以随时调用他们。
第3点可参考下面演示:
面向过程编程的特点,就是封装函数。具体做法就是分解功能,把某个功能抽取出来,封装成一个函数。可以方便复用。
四.如何封装函数:
(1)先不要一开始就直接写函数,因为这样一是初学不熟悉函数,写出来可能会有错误,二是直接写函数的话,不好做测试函数是否是正确的。所以先在main函数中写代码,只有在main函数中可以运行了,那么就可以把这个改成一个函数。
(2)抽取函数,一个函数需要有函数名,函数参数,函数返回值,函数数据类型四个东西,那么就把相关的代码拷贝出来,填上以上四个东西。
(3)测试函数是否成功。
自己封装一个函数的几个注意点:
1.对于函数,我们可以参考main()函数的写法。
2.函数名:用小驼峰命名规则,即几个单词组成函数名,首单词是小写字母。
3.函数参数:可以没有参数,没有的话可以填void,有参数的话就正常写参数,即函数输入。
4.函数返回值:可以没有返回值,如果有返回值,就需要有return。并且return的值的数
据类型,就是函数的数据类型。
5.一个函数可以有几个return,但是在c语言只能有一个返回值,不能返回多个值。
6.函数类型:自己推理出来。
7.函数体:从main函数中拷贝出来。
五.函数返回值return的介绍:
- return 的个数,数量不一定,按照你自己的代码逻辑,需要几个就几个,但是可以在逻辑上进行删减。比如下面这个题目,可以4个return ,也可以1个return.
2. 需不需要return,也是根据逻辑,可以要return ,也可以不要return
3. return就是函数结束,return后面代码无效。
4. return只能一个返回值,如果要返回几个值,需要有个容器来装数据,也很容易理解,因为函数只有一个数据类型。
5. return虽然用于函数中,但是有时候可以实现和break一样的功能。
六.特殊函数(递归函数):
递归函数特点:
- 递归函数是函数本身调用自己这个函数,第一点记住自己调用自己
- 递归两个字,分解成传递和回归,就是像打台球一样,打出去后,总会撞上边界,然后弹回来,就是一个传递和一个回归的过程
- 递归函数必须有边界,不然就没有回归的过程
- 递归函数的参数一般是会不断递减,递减到某个参数,这个参数是有固定值的,然后这个时候就会开始回归
如上图算5!,就是分解成如图传递和回归的过程,最后的边界就在factorial(1) = 1,到达边界后就会开始回归计算。
下面提供递归函数的一段演示代码:
#include <stdio.h>
double factorial(int n); //必须声明 //且必须先在main()函数之前声明,因为main()要调用。
int main(){
int n;
printf("输入一个正整数:");
scanf("%d",&n);
printf("%d!=%.0f\n",n,factorial(n)); //调用函数
return 0;
}
double factorial(int n){
if(n==0)
return 1;
else
return n*factorial(n-1);
}
//eg.设n=5;
//递推: f(5)=5*f(4);
// f(4)=4*f(3)
// f(3)=3*f(2)
// f(2)=2*f(1)
// f(1)=1*f(0)
// f(0)=1
//先递推后回归
//回归:f(0)=1,f(1)=1*1=1,f(2)=2*1=2,f(3)=3*2=6,f(4)=4*6=24,f(5)=5*24=120
//所以5!=120
其实递归函数是可以进行分解成普通函数的,比如f(5)可以进行以上分解,最后可以合并成一个函数,就变成了递归函数了。
函数这一章,除了会自己封装函数,还要知道如何去使用一个函数,使用函数很简单,只要搞清楚两个问题,第一是函数的参数,需要什么豆,就放什么豆进去。第二是函数的返回值,有没有返回值,有的话就要找个杯子去接住。
有关函数的笔记就分享到这啦!
谢谢!