论文部分内容阅读
摘 要:本文通过对几个算法案例的分析,阐述算法教学中应该要注意的几个问题,从而更好地理解算法的意义及其本质.
关键词:算法含义;选择结构;循环结构
高中教材引进算法内容已经四个年头了. 纵观近几年的高考试题,基本上都是只考一道选择题或填充题. 因此许多教师都错误地认为算法的教学可以简单些,只需要教给学生一个简单的思路就可以了,从而对教材的内容研究不到位,以致于面对学生提出的一些问题解释不清,教师和学生就这么稀里糊涂地学过去了. 其实,引进算法的必要性在于教给学生认识问题、解决问题的思想方法. 试想如果连知识的内涵都没搞清楚,那么即便能做出一道高考题,那又有多大的意义呢?本文试撷取笔者在教学中遇到的几个问题,谈谈其认识以及处理方法.?摇
对算法含义的理解
教材(苏教版,下同)中关于算法的含义是:对一类问题的机械的、统一的求解方法. 该定义中“一类”应该怎么理解呢?“求解方法”又该怎么理解呢?
案例1 已知数字序列2,5,7,8,15,32,18,12,52,8,写出从该序列搜索18的一个算法.
这是一次作业中的一道题目. 作业交上来后,一个学生是这样写的:输出18.
上课时,笔者问这个学生你为什么这样写,他说我直接看出来的,故我就这样写了. 笔者接着问:假如有很多个数,而且这很多个数中有不止一个“18”这样的数,那你还能一眼看出来吗?这个学生一时语塞.
实际上,出现这种情况还是归结到如何理解算法的定义的问题. 在此情况下,我们必须寻找一个“机械的、统一的”的解决方法,这个方法能让我们按既定的方法,逐一把“18”这样的数找出来. 显然运用观察的方法,虽可行但超过了合理的限度,因而不再是个有效的算法了.
下面的算法就可以把从任意给定的一些数中把数“18”找出来.
S1 输入实数a;S2 若a=18,则转S3;否则转S1;
S3 输出a=18.
案例2 写出求3,5,7,11,15的平均值的一个算法.
有学生是这样写的:
S1 m=;S2 输出m.
还有学生是这样写的:
S1 输入a,b,c,d,e;S2 m=;S3 输出m.
应该说这两种写法均正确. 第一种算法是针对某一个具体问题而设计的,而第二种算法的设计更具备一般性,真正体现了算法是针对“一类问题的求解”的方法.
对选择结构的理解
选择结构是指先根据条件作出判断,再决定执行哪一种操作的结构. 如图1所示,虚线框内是一个选择结构,它包含一个判断框,当条件p成立(或称为“真”)时执行A,否则执行B.
从选择结构的形式可以看出:无论条件p是否成立,都只能执行A框或B框之一,不可能既执行A框又执行B框,也不可能两个框的内容都不执行. 无论走哪一条路径,在执行完A或B之后,脱离本选择结构. A或B两个框中,可以有一个是空的,即不执行任何操作.
案例3 写出判断函数f(x)=奇偶性的一个算法.
笔者在教学的时候画出了如下的流程图(图2),写出后让大家进行讨论.
经过一番讨论后,形成了两种意见. 一是在得出f(x)的定义域为R或关于原点对称后,由于f(-x)与f(x)的关系可能有f(-x)= ±f(x)或f(-x)≠±f(x),因此需要三重选择结构的嵌套. 更一般地,对函数y=f(x)的奇偶性的判断更需要四重选择结构的嵌套.二是对于函数f(x)=,由于其奇偶性只有一种,f(x)是奇函数,因此只需要输出“f(x)是奇函数”就可以,是否需要输出“f(x)不是奇函数”这样的结果无关紧要.
应该说这两种意见都正确,只不过就本题而言,后一种意见更简洁、更直接.
一般情况下,对任意一个对象进行判断,只有两个结果:“是”或“不是”. 但有时我们只需关心其中的一个结果,而对另一个结果不加注意,这就是第二种意见所体现的意图,这也就不难理解选择结构中B框为什么可以是空的了,同时这也有助于理解基本算法语句中的“行IF语句”了.
对循环结构的准确把握
循环结构有两种常见的结构,即直到型循环和当型循环(图3).
1. 循环结构中判断条件p是否成立
在循环背景下,如何判定给定的条件p是否成立呢?在教学中,为了突破这个问题,笔者设计了这样的案例.
案例4 问题1:等差数列{an}中,a1=22,公差d=-2,那么数列{an}中从第几项开始每一项都小于0?
问题抛出后,很多学生都这样求解:数列{an}的通项公式an=24-2n,令an<0,即24-2n<0,n>12,故数列{an}从第13项开始每一项都小于0.
应该说结论是正确的,那么是否也可以说成是从第14(或15等)项开始每一项都小于0呢?这里涉及对问题的准确理解和定位. 不难看出数列{an}是递减数列,本问题的实质是需要确定从哪一项(且只能是从这一项)开始每一项都小于0,因此应考虑建立不等式组an≥0an+1<0 来确定.由24-2n≥024-2(n+1)<0 得n≤12n>11 ,n=12,故数列{an}从第13项开始每一项都小于0.
问题2 按下列流程图(图4)运算:
规定:程序运行到“判断结果是否大于244”为1次运算. 若x=5,则运算进行____次才停止;若运算进行k(k∈N*)次才停止,则x的取值范围是________.
学生很快得到当x=5时,由于5×3-2=13,13×3-2=37,37×3-2=109,109×3-2=325>244,故只需要运行4次即停止.
对于第二个问题,由于有问题1的铺垫,学生也很快得出下面的解法.
由于运算进行k(k∈N*)次停止,因此若k=1,则3x-2>244,x>82;当k≥2时,第k-1次时仍然不满足条件,故有3k-1x-2(3k-2+3k-3+…+3+1)≤244,3kx-2(3k-1+3k-2+…+3+1)>244,解得1+35-k 这样的处理思路也有助于学生理解循环的次数可以与输入的初始值有关.
2. 循环结构中的循环体
循环结构中反复进行操作的部分称为循环体. 它涉及具体的循环操作的内容,以及输出的结果.
案例5 如图5,下列程序运行后输出的结果是________.
答案应是1×2ו••×6=720. 这道题在课堂上让学生思考后,有相当部分的学生认为结果是1+1×2+1×2×3+1×2×3×4+1×2×3×4×5+1×2×3×4×5×6=873. 为什么会出现这种情况呢?
分析一下这个语句的结构.这是两个循环语句的嵌套问题,但在两个循环语句之间又插入了另外两个语句. “S←0”和“a←1”,这就意味着当变量K从2至I循环结束后虽得到S的值,但在变量I再取下一个值时,变量S却已经清空为0了,它并不是将上次循环的结果再带入下一次的循环. 因此,就本题而言,实际上只需要考虑变量I取6时所对应的结果就可以了.
事实上,当I=6时,变量K从2至6,循环后输出的结果是a=1×2ו••×6=720,因此该程序运行后输出的结果是720.
3. “For语句”循环的结束问题
案例6?摇如图6,下列程序中,最后输出k和i的值分别是____和____.
教材中关于循环语句内容的安排顺序是这样的,先介绍与当型结构所对应的“While语句”以及与直到型结构所对应的“Do-Until语句”,然后再介绍“For语句”,但对“For语句”的介绍,包括书中所配的例题,都只是强调在循环的次数已经确定的情况下,重复进行的步骤可以利用“For语句”来实现. 教师在教学时,也同样是强调几次循环后就退出,至于什么时候、什么条件退出,却没有讲清楚,这也许是教材内容安排的某种缺失,但笔者更愿意相信这是教师在理解把握教材内容方面的缺失. 就本题而言,许多教师和学生就这样认为:变量i的值从1到20,其步长是3,因此循环的次数是7,变量i最多取到19,因此就有学生认为:由于在整个循环的过程中变量k的值每循环一次就加1,故最后输出k和i的值分别是7和19.
事实上,正确的答案应该是7和22. 因为变量i在整个循环过程中的取值分别是1,4,7,10,13,16,19,又由于步长是3,所以当变量i等于22时,才退出循环,直接输出结果. 显然,这个过程用“While语句”表示更明显,如图7.
关键词:算法含义;选择结构;循环结构
高中教材引进算法内容已经四个年头了. 纵观近几年的高考试题,基本上都是只考一道选择题或填充题. 因此许多教师都错误地认为算法的教学可以简单些,只需要教给学生一个简单的思路就可以了,从而对教材的内容研究不到位,以致于面对学生提出的一些问题解释不清,教师和学生就这么稀里糊涂地学过去了. 其实,引进算法的必要性在于教给学生认识问题、解决问题的思想方法. 试想如果连知识的内涵都没搞清楚,那么即便能做出一道高考题,那又有多大的意义呢?本文试撷取笔者在教学中遇到的几个问题,谈谈其认识以及处理方法.?摇
对算法含义的理解
教材(苏教版,下同)中关于算法的含义是:对一类问题的机械的、统一的求解方法. 该定义中“一类”应该怎么理解呢?“求解方法”又该怎么理解呢?
案例1 已知数字序列2,5,7,8,15,32,18,12,52,8,写出从该序列搜索18的一个算法.
这是一次作业中的一道题目. 作业交上来后,一个学生是这样写的:输出18.
上课时,笔者问这个学生你为什么这样写,他说我直接看出来的,故我就这样写了. 笔者接着问:假如有很多个数,而且这很多个数中有不止一个“18”这样的数,那你还能一眼看出来吗?这个学生一时语塞.
实际上,出现这种情况还是归结到如何理解算法的定义的问题. 在此情况下,我们必须寻找一个“机械的、统一的”的解决方法,这个方法能让我们按既定的方法,逐一把“18”这样的数找出来. 显然运用观察的方法,虽可行但超过了合理的限度,因而不再是个有效的算法了.
下面的算法就可以把从任意给定的一些数中把数“18”找出来.
S1 输入实数a;S2 若a=18,则转S3;否则转S1;
S3 输出a=18.
案例2 写出求3,5,7,11,15的平均值的一个算法.
有学生是这样写的:
S1 m=;S2 输出m.
还有学生是这样写的:
S1 输入a,b,c,d,e;S2 m=;S3 输出m.
应该说这两种写法均正确. 第一种算法是针对某一个具体问题而设计的,而第二种算法的设计更具备一般性,真正体现了算法是针对“一类问题的求解”的方法.
对选择结构的理解
选择结构是指先根据条件作出判断,再决定执行哪一种操作的结构. 如图1所示,虚线框内是一个选择结构,它包含一个判断框,当条件p成立(或称为“真”)时执行A,否则执行B.
从选择结构的形式可以看出:无论条件p是否成立,都只能执行A框或B框之一,不可能既执行A框又执行B框,也不可能两个框的内容都不执行. 无论走哪一条路径,在执行完A或B之后,脱离本选择结构. A或B两个框中,可以有一个是空的,即不执行任何操作.
案例3 写出判断函数f(x)=奇偶性的一个算法.
笔者在教学的时候画出了如下的流程图(图2),写出后让大家进行讨论.
经过一番讨论后,形成了两种意见. 一是在得出f(x)的定义域为R或关于原点对称后,由于f(-x)与f(x)的关系可能有f(-x)= ±f(x)或f(-x)≠±f(x),因此需要三重选择结构的嵌套. 更一般地,对函数y=f(x)的奇偶性的判断更需要四重选择结构的嵌套.二是对于函数f(x)=,由于其奇偶性只有一种,f(x)是奇函数,因此只需要输出“f(x)是奇函数”就可以,是否需要输出“f(x)不是奇函数”这样的结果无关紧要.
应该说这两种意见都正确,只不过就本题而言,后一种意见更简洁、更直接.
一般情况下,对任意一个对象进行判断,只有两个结果:“是”或“不是”. 但有时我们只需关心其中的一个结果,而对另一个结果不加注意,这就是第二种意见所体现的意图,这也就不难理解选择结构中B框为什么可以是空的了,同时这也有助于理解基本算法语句中的“行IF语句”了.
对循环结构的准确把握
循环结构有两种常见的结构,即直到型循环和当型循环(图3).
1. 循环结构中判断条件p是否成立
在循环背景下,如何判定给定的条件p是否成立呢?在教学中,为了突破这个问题,笔者设计了这样的案例.
案例4 问题1:等差数列{an}中,a1=22,公差d=-2,那么数列{an}中从第几项开始每一项都小于0?
问题抛出后,很多学生都这样求解:数列{an}的通项公式an=24-2n,令an<0,即24-2n<0,n>12,故数列{an}从第13项开始每一项都小于0.
应该说结论是正确的,那么是否也可以说成是从第14(或15等)项开始每一项都小于0呢?这里涉及对问题的准确理解和定位. 不难看出数列{an}是递减数列,本问题的实质是需要确定从哪一项(且只能是从这一项)开始每一项都小于0,因此应考虑建立不等式组an≥0an+1<0 来确定.由24-2n≥024-2(n+1)<0 得n≤12n>11 ,n=12,故数列{an}从第13项开始每一项都小于0.
问题2 按下列流程图(图4)运算:
规定:程序运行到“判断结果是否大于244”为1次运算. 若x=5,则运算进行____次才停止;若运算进行k(k∈N*)次才停止,则x的取值范围是________.
学生很快得到当x=5时,由于5×3-2=13,13×3-2=37,37×3-2=109,109×3-2=325>244,故只需要运行4次即停止.
对于第二个问题,由于有问题1的铺垫,学生也很快得出下面的解法.
由于运算进行k(k∈N*)次停止,因此若k=1,则3x-2>244,x>82;当k≥2时,第k-1次时仍然不满足条件,故有3k-1x-2(3k-2+3k-3+…+3+1)≤244,3kx-2(3k-1+3k-2+…+3+1)>244,解得1+35-k
2. 循环结构中的循环体
循环结构中反复进行操作的部分称为循环体. 它涉及具体的循环操作的内容,以及输出的结果.
案例5 如图5,下列程序运行后输出的结果是________.
答案应是1×2ו••×6=720. 这道题在课堂上让学生思考后,有相当部分的学生认为结果是1+1×2+1×2×3+1×2×3×4+1×2×3×4×5+1×2×3×4×5×6=873. 为什么会出现这种情况呢?
分析一下这个语句的结构.这是两个循环语句的嵌套问题,但在两个循环语句之间又插入了另外两个语句. “S←0”和“a←1”,这就意味着当变量K从2至I循环结束后虽得到S的值,但在变量I再取下一个值时,变量S却已经清空为0了,它并不是将上次循环的结果再带入下一次的循环. 因此,就本题而言,实际上只需要考虑变量I取6时所对应的结果就可以了.
事实上,当I=6时,变量K从2至6,循环后输出的结果是a=1×2ו••×6=720,因此该程序运行后输出的结果是720.
3. “For语句”循环的结束问题
案例6?摇如图6,下列程序中,最后输出k和i的值分别是____和____.
教材中关于循环语句内容的安排顺序是这样的,先介绍与当型结构所对应的“While语句”以及与直到型结构所对应的“Do-Until语句”,然后再介绍“For语句”,但对“For语句”的介绍,包括书中所配的例题,都只是强调在循环的次数已经确定的情况下,重复进行的步骤可以利用“For语句”来实现. 教师在教学时,也同样是强调几次循环后就退出,至于什么时候、什么条件退出,却没有讲清楚,这也许是教材内容安排的某种缺失,但笔者更愿意相信这是教师在理解把握教材内容方面的缺失. 就本题而言,许多教师和学生就这样认为:变量i的值从1到20,其步长是3,因此循环的次数是7,变量i最多取到19,因此就有学生认为:由于在整个循环的过程中变量k的值每循环一次就加1,故最后输出k和i的值分别是7和19.
事实上,正确的答案应该是7和22. 因为变量i在整个循环过程中的取值分别是1,4,7,10,13,16,19,又由于步长是3,所以当变量i等于22时,才退出循环,直接输出结果. 显然,这个过程用“While语句”表示更明显,如图7.