高一上册信息技术 可以复用的代码——自定义函数 逐字稿-3,929字
师:同学们好,今天我们学习第二章第四节的内容。在编写程序代码时,常遇到相同或相似的程序段,此时可采用代码复用的方法。这一讲,我们就来学习复用代码的一种方式——自定义函数。
相信同学们都见过火柴,通过改变火柴造型,能锻炼动手计算和逻辑能力。大家身边有火柴吗?来拼拼看,用满6根火柴,能拼出的最大数是多少?
同学们有答案了吗?我们一起来拼拼。数字0需要6根火柴,数字1需要2根火柴,数字2需要5根火柴,自然数0 - 9每个数字所用火柴根数固定。那用满6根火柴能表示的最大数是多少呢?是99吗?数字9用6根火柴,99就需要12根火柴,不符合要求。是123吗?123需要2 + 5 + 5 = 12根火柴,也不符合。从图中可看出,数字0 - 9里数字1所用火柴数最少,2根火柴可表示1,那么6根火柴能表示3个1,也就是6根火柴表示的最大数是111,大家觉得对吗?
从图中还能看出,用满6根火柴还可表示数字0、6、9。那用满6根火柴还能表示哪些数呢?这节课我们就来找找用满6根火柴所表示的所有数,要求用满6根火柴棒摆出哪些自然数。
首先分析这个问题,刚刚算出6根火柴能表示的最大数是111,这表明6根火柴所能表示的所有数都在0到111之间。那我们只需将0到111之间每个自然数所使用的火柴数求出来,判断是否等于6 ,等于6就是我们要找的自然数。用手工摆出所有自然数没问题,但很费时间,用计算机解决更方便。
根据分析,我们可以画出解决这个问题的流程图。可以用穷举法穷举0 - 111之间的每个自然数i,计算每一个自然数i所使用的火柴数Asin,接着判断Asin是否为6,如果等于6就是我们要找的数,如果不是,就进行下一次计算和判断。从流程图能看出,要求用满6根火柴棒表示自然数,核心问题就是求摆出任意一个自然数所需的火柴数。那怎么求呢?
如果这个自然数是一位数,比如是6,那它所用火柴数就是6;如果是3,所用火柴数就是5 。也就是说,一位数可按表查出所用火柴数。假如这个自然数是多位数,该怎么求呢?其实只需要将这个自然数每个数位上的数字所对应的火柴数求出来,求出个位、十位、百位等数位上数字所用火柴数,然后相加就行。那现在问题就转化为,怎样将一个自然数每个数位上的数字分离出来?换言之,怎样让一个自然数num每个数位上的数字分离呢?请同学们拿出纸笔演算一下。
将一个自然数每个数位上的数字分离的方法有很多。老师提供一个方法,我们一般用十进制数表示自然数,任意一个自然数除以10所得的余数就是这个自然数的尾数,即个位数。除以10以后所得的整数商就是这个自然数除个位数以外,其他数位上数字组成的数。基于此,我们可以先求出这个自然数的尾数、个位数,然后去掉个位数,剩下的数就是除以10的整数商。接着再求剩下这个数的个位数,如此不断取尾数、去尾数,就能将一个自然数所有数位上的数字都分离出来。
有的同学会问,在Python语言中怎么求两个数的余数?Python语言中有专门的运算符,取模运算可求余数,取整运算可求商。举个例子,要求258这个自然数每个数位上的数字,让258对10取模,可得到它的尾数8 ,再让258对10取整,去掉尾数8,剩下25 ,这样就完成一次取尾数8、去尾数8的操作,为下一次取尾数做准备。下一次让25对10取模,分离出25的尾数5 ,再让25对10取整,去掉尾数5,剩下2 。然后让2对10取模,分离出尾数2 ,再让2对10取整,去掉尾数2,剩下0 。通过这样的操作,就把258各个数位上的数字分别取出来了。
由此可写出通项公式:num对10取模,得到num的尾数x ,num对10取整,去掉尾数x 。相信同学们对这个问题的求解方法比较清晰了。请同学们梳理一下求摆出一个自然数num所使用的火柴数的过程,并将流程图绘制在书本第41页上。
同学们都画好了吧,我们一起来看看。在这个流程图中要注意一些细节,当自然数本身为0时,这个自然数所使用的火柴数就是数字0所使用的火柴数。通过这个流程,我们解决了求一个自然数num所使用火柴数的核心问题。但别忘了,我们整个问题是用满6根火柴棒可以表示哪些数。下面看看问题求解的全部流程图。
我们列举出0 - 111之间的每个自然数,计算每个自然数i所使用的火柴数,具体方法也列出来了。计算完任意一个自然数所使用的火柴数,就要判断是否为6,如果是6就输出,如果不是6,就进行下一次计算判断。在这个流程图中,计算和判断过程要执行多少次呢?联想0 - 111,每个自然数都要进行计算判断,所以这个过程要执行112次。
根据这两张流程图,我们可以直接写出代码,并且计算任意一个自然数所使用火柴数的代码可直接插入到主程序的循环语句中。但看右边,这是求解具体问题的过程,是求任意一个自然数所使用火柴数的流程。以后解决其他问题,如果也需要求一个自然数所使用的火柴数,完全可以直接用这段程序,所以建议大家把它设计为一个自定义函数。