跟着严Sir学编程继续更新。希望严Sir能用20年程序类课程教学经验,帮助更多的伙伴更加容易地学习和理解程序。在相关的文章当中,我更多的是根据自己理解来讲解,并且根据自己教学经验,对于重点和难点问题进行了生活化的处理,这样能让更多的人容易理解,同时也带来了学术表达上的严谨程度不足。欢迎大家阅读、点赞、转发,更欢迎大家批评指正!
这是概念梳理的第04篇文章。
很多程序设计初学者进入函数知识学习时,会觉得很困难,不容易理解,使得函数内容成为了学习的分水岭,也成为转向全面对象程序设计语言的拦路虎。
总结原因,两方面的问题:
第一:没有弄清楚程序设计当中的函数概念,结构混乱。
第二:函数形参无法确定,一阵乱写。
严Sir会用2个比喻来讲解,相信会让你恍然大悟。
1 到底什么是函数?—— 一把手枪
程序设计当中,到底什么是函数呢?函数有几类?函数的结构是什么呢?
01 函数的定义
清华大学出版社C程序教材当中对于函数定义:
函数就是功能,一个函数用来实现一个功能。
学到一定程度后,来看这个定义,你会发现讲的很透彻,但是初学者看到这个定义时,往往是一头雾水。
严Sir对于函数的理解是:
函数,就是具有一定格式,完成特定功能的程序段,简单理解就是一件工具,如 一把手枪 。
分析一下:提到手枪,大家的脑海里面是不是浮现出这样的一幅画面。
手枪的作用是:完成击发子弹进行射击的功能。
手枪的结构:手机由固定的几个部分构成。
所以,手枪是具有一定格式,完成特定功能的一件工具,它就是函数。
02 函数的结构
函数由两部分组成,一是函数头,二是函数体。
函数头包括3个内容,一是函数类型(就是函数返回值类型),二是函数名字,三是形参列表。
函数体就是函数中,用花括号(大括号)括起来的,具体功能代码。
具体格式如下:
函数类型 函数名(形参列表)
{
}
03 函数分类
函数可以分为两类:
第一:一把手枪如果放在军火库里面,直接拿出来用就可以了,这种函数叫库函数。
第二:如果手枪不存在,需要自己一步一步来做,做好才能用,这种函数叫做自定义函数。
04 函数的两个阶段
第一个阶段:函数定义阶段,就是函数制造阶段,把手枪做出来。
第二个阶段:函数调用阶段,就是使用函数,运用手枪做事情。
对于库函数而言,只有第二个阶段,对于自定义函数,两个函数都需要。
2 到底如何确定形参?—— 手枪弹夹对于很多新手而言,函数定义阶段是难点。基本格式没有问题,具体代码也会写,只是这个形参要不要,要几个,什么类型,完全靠蒙。
01 形参的定义
什么是形参?这个问题需要弄明白。
先思考一个问题:手枪生产商在制造手枪时,会不会将子弹放在手枪里面?
一定不会。但是手枪生产商一定会为手枪配上一个东西——弹夹。
请问这个弹夹是用来做什么的?是用来在使用时装子弹用的。
弹夹是手枪的一部分,在生产手枪时,弹夹是没有子弹的,在使用手枪时,弹夹才会装进子弹。于是我们说:弹夹是为了使用手枪时装子弹预留的空间。
形参就是弹夹。形参就是为了使用函数时所预留的空间,形参就是为了使用函数时所预留的变量。
02 形参的确定
这是函数定义中最难的问题。
需不需要形参?需要几个形参?形参是什么类型?
这可以说是函数定义中的追命三连问。
为了解决这些问题,严Sir总结出一个总原则,只要按照这个总原则进行思考,所有问题迎刃而解。
形参思考总原则:
为了实现一个功能,必须知道,但是又不知道的条件,就应该定义成形参,有几个这样的条件,就定义几个形参,类型根据分析确定。定义成形参以后,在函数体当中就可以当作已知条件来使用。
接下来,我们通过具体的例子来分析。
例1:定义一个函数,返回三个整数当中的最大值。
形参确定思路:
1.这个函数的功能是什么?
返回三个整数当中的最大值。
2.要实现这个函数必须知道又不知道的条件是什么?
要得到三个整数的最大值,必须知道这三个整数,而现在这三个整数又不知道。
确定结果:需要三个整型的形参。
例2:定义一个函数,返回1~100的和。
形参确定思路:
1.这个函数的功能是什么?
返回1~100的和。
2.要实现这个函数必须知道又不知道的条件是什么?
不存在必须知道又不知道的条件。
确定结果:不需要形参。
例3:定义一个函数,返回1到整数n的和。
形参确定思路:
1.这个函数的功能是什么?
返回1~n的和。
2.要实现这个函数必须知道又不知道的条件是什么?
必须知道整数n,现在又不知道。
确定结果:需要一个整型的形参。
总结与思考
本文对于函数定义当中的难点问题进行解决,运用两个比喻让小伙伴们加深了思考。接下来请小伙伴们思考下面两个函数有什么不同,欢迎大家在留言区里讨论。
例1:实现一个函数,在屏幕上输出3行4列的星号图形。
例2:实现一个函数,在屏幕上输出n行m列的星号图形。