C语言重点笔记三——函数(函数的用法、如何封装函数、函数返回值return的介绍、特殊函数(递归函数)等)

        

目录

        

        一.函数的含义

        二.面向过程编程的含义

        三.函数的用法

        四.如何封装函数

        五.函数返回值return的介绍

        六.特殊函数(递归函数)


         一.函数的含义

         函数有两层含义:一是数学上的函数,数学上的函数是一种映射关系,就是给一个x值,通过一个y=f(x),会得到一个y值。二是计算机上的函数,要看英文解释,函数的英文是function,意思功能,我们可以把一个函数看作一个豆浆机,那么这个函数就是实现了打豆浆这个功能。我们并不需要知道具体他是怎么去打豆浆的,就像是一个黑匣子一样,只要知道放什么豆子,就出来什么豆浆。

        二.面向过程编程的含义

        面向过程编程,就是做一件复杂的事情,先对事件进行分解,分解成几个步骤,通过哪些步骤可以完成一个完整的功能,那么我们可以把每个步骤进行封装,就变成了函数,然后我们完成一件事情,只需要把在一个主函数中,分别调用这些功能,最后完成一个整体功能,这就是面向过程编程。

        那么面向过程编程,最核心的就是封装一个豆浆机,也就是怎么封装函数。另外封装函数,还有一个好处就是可以复用,也就是重复使用。

        三.函数的用法:

  1. 函数可以放在主函数的前面,这时候不需要再声明函数,建议用这种写法。
  2. 函数可以放在主函数的后面,这时候主函数前面需要先声明一下函数。
  3. 函数可以单独写到一个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的介绍:

  1. return 的个数,数量不一定,按照你自己的代码逻辑,需要几个就几个,但是可以在逻辑上进行删减。比如下面这个题目,可以4个return ,也可以1个return.

                                

2. 需不需要return,也是根据逻辑,可以要return ,也可以不要return

        ​​​​​​​                ​​​​​​​        ​​​​​​​

3. return就是函数结束,return后面代码无效。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

4. return只能一个返回值,如果要返回几个值,需要有个容器来装数据,也很容易理解,因为函数只有一个数据类型。

                                 

 

 

5. return虽然用于函数中,但是有时候可以实现和break一样的功能。

六.特殊函数(递归函数):

递归函数特点:

  1. 递归函数是函数本身调用自己这个函数,第一点记住自己调用自己
  2. 递归两个字,分解成传递和回归,就是像打台球一样,打出去后,总会撞上边界,然后弹回来,就是一个传递和一个回归的过程
  3. 递归函数必须有边界,不然就没有回归的过程
  4. 递归函数的参数一般是会不断递减,递减到某个参数,这个参数是有固定值的,然后这个时候就会开始回归

         ​​​​​​​

如上图算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)可以进行以上分解,最后可以合并成一个函数,就变成了递归函数了。

函数这一章,除了会自己封装函数,还要知道如何去使用一个函数,使用函数很简单,只要搞清楚两个问题,第一是函数的参数,需要什么豆,就放什么豆进去。第二是函数的返回值,有没有返回值,有的话就要找个杯子去接住。

有关函数的笔记就分享到这啦!

谢谢!

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

تچ快乐杂货店يچ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值