版权信息

Copyright

考试周刊杂志
  • 名称:考试周刊
  • CN:22-1381/G4
  • ISSN:1673-8918
  • 收录:中国知网 万方数据
  • 网址:www.kszktg.com

联系编辑

论文资源

当前位置:考试周刊杂志社 > 论文资源 >

浅析如何让中学生轻松学习算法

作者:考试周刊 字数:4000  点击:

作者:王辉
  摘 要:数据结构加算法等于程序,算法本身就难于理解,对于初学程序设计的学生,尤其在中学阶段,学生的理解能力有限,如何在难于理解较为繁杂的算法学习中找到一种适合中学生理解的方式,是在中学开展算法课程的关键。
  关键词:高精度;排序;递推;递归;搜索回溯;贪心;分治算法;广度优先搜索算法;动态规划
  算法有简单的,也有复杂的,我们学习任何一种新知识,都应该从简单的入手,算法在信息学奥赛这门课中,大致分为以下内容:高精度算法、数据排序、递推算法、递归算法、搜索与回溯算法、贪心算法、分治算法、广度优先搜索算法、动态规划。对于每一种类型的算法都应该循序渐进,而不应该一个内容学到底,然后在进入一个新的内容,算法的学习对于中学生来说,利用业余时间学习,需要数年的时间,学习算法前应该对一门语言有所了解,例如应该学习了数据类型、运算符、表达式、顺序结构、分支结构、循环、函数等。
  学习一种类型的算法应该设置不同的问题,而这些问题由浅入深,彼此间有联系,最后在抛出一个综合的问题,抽丝剥茧,分析问题,解决问题,很多学生在学习完了一种方法之后发现一讲就懂,做题就无从下手,我们应该分析学生为何出现这种情况,算法本身就比较抽象,每个学生理解的能力都不同,具体问题具体分析,我在平时授课之余,会在学生写算法,调试程序的过程中进行跟踪,发现学生的问题,才能找到学生哪里理解有问题,哪里吸收不到位,然后进行教学反思,重新设计课件,重新设计问题及思路引导,然后再重新讲解,发现效果好了很多。算法描述一般会使用自然语言、流程图、和伪代码。在很多程序设计书籍中都推荐使用流程图,但是我发现很多程序设计老师都是介绍下流程图,最后讲解复杂程序时都用的自然语言或伪代码,我个人也偏向自然语言,算法就是解决生活中实际问题的方法,我们在讲解算法时不应该将任何问题跟程序的代码相关联,很多同学在看到问题后,第一个闪现在脑中的画面就是用循环、还是分支、还是函数、还是递归,而不是想生活中我们如何去解决这些问题的,这就让学生陷入一种先去想我学了哪些程序设计工具,看看哪个工具合适,而不是先想问题求解方法,设计出方法,再考虑这些方法的可行性,可行性没问题,再考虑用程序设计如何解决。那这种问题我们一定要对学生进行糾正,养成良好的思考顺序和习惯,才能在算法中走得更远。
  下面我以在教学中的一些实例来进行说明阐述观点。
  一、 输入一个数,判断其是否为回文数
  其实这个问题并不难,学生已经学习了取余用“%”,也学习了取整用“/”,并且也练习了水仙花数的判断,就是将某一个3位整数的百位数、十位数、个位数取出来,然后判断每位数的3次方的和是否跟原数相等。学习了以上知识,会发现对于判断是否为回文数已经没有新知识了,把这个问题抛给学生,他们很难想出如何解决这个回文数问题。我们从实际问题出发,什么样的数为回文数,正读倒读都一样的整数为回文数,每位同学都知道,那么如何判断呢?如何取出一个整数的各个位数,大家都会,利用对10取余和取商操作即可将每位数拿出来,这个在以前学过的水仙花数中都学习过,那么取出来不是问题,如何判断呢?我们如果把它倒装回去,判断2个数的大小即可。那么看似问题解决了,仔细观察,不难发现,我们是任意输入一个整数,没有确定整数是几位数,前面学过的水仙花是固定的3位数,那么唯一的问题就是如何从一个不确定位数的整数中取出各个数,这个是以前没有讲过的,也是没有做过案例的,对于学生来说这就是一个没有学过的新知识,新知识必须新授课,需要老师引导讲解,不然几乎不可能让学生自己想出来,有效的思考是必要的,无用的思考浪费时间没有任何意义,所以我重新设计了授课方式,先从另一个问题入手,抛出另一个问题,输入一个整数n,输出每位数的和,即输入整数123,输出6。那么这个问题也是从一个不确定位数的整数中取数,然后将其累加,取数依然还是用%和/来取,这个问题相对简单,并且能将以前学过的水仙花和我们要解决的回文数联系起来,这个学生思考了几分钟之后,部分同学得出一个结论,先用整数n对10取余数,累加到s中,然后个位数的数字就可以舍去,例如123%10=3;3累加后就不再需要了,我们把123变成12,即n=n/10,在对10取余数,得到2,再次累加,如此反复,那么做到什么时候截止呢?当n>0时候做,当n为个位数时在对10取商则为0,问题解决。这个问题解决了,那我们在回头看看回文数,发现位数不确定的取数不是问题了,貌似问题解决,学生开始写算法,发现如何将取出来的数倒装呢?例如12321,最后一位取出来放到m中,如何将最后一位变成第一位,需要乘以10000,位数不确定我们不知道乘多少,乘完后还需要累加,所以我们将m初始化为0,并且将输入数n复制一份给num,每次我们都乘以10在累加,这样随着取数的过程,就可以累加出原数的倒装数,这个技巧也是以前没有过的,即while(n>0){m=m×10+n%10;n=n/10},最后我们判断num与m是否相等就可以判断输入数n是否为回文数。最后完成算法书写,程序调试。经典的算法是需要记忆的,,这个记忆是打引号的,我们应该记忆的是这些算法的特征,应该记忆的是完成某个特定功能的编程技巧,而不是生硬的代码,在编程学习的过程中,我就发现一些学生在讲授过程中听课很认真,也能跟老师很流畅的做交流,写代码的时候也很流畅,过几天之后同样的问题,重新做的时候发现有些无从下手的感觉,少部分同学仍然能够写出来,这就提示我们老师在教授学生的时候要注意总结,要提醒学生哪些是需要理解的记忆,而不是背代码,学生觉得自己并没有背代码,是因为刚讲完,凭着印象在书写,很容易完成,这道例题我在给学生总结时会提示学生我们需要记忆的是我们用取数倒装累加的方式来进行判断,需要记忆的技巧是乘10累加,整数位会往左依次移动。
  二、 高精度算法
  在高精度算法中,高精除法的算法模拟以高精除以单精为例的较多,高精除以单精中,还是利用取商符号/来进行,在得出商c数组及下一个除数时利用的技巧在上一个实例是一致的,即c[i]=(x×10+a[i])/b;x=(x×10+a[i])%b;这种经典的编程技巧我们需要记忆,需要熟练掌握,对于以后复杂的程序我们才会想起来如何处理。


浅析县级公共图书馆的现代化与人文化建设
图书资料如何做好动态管理
论如何强化基层党支部战斗堡垒作用
网络信息如何在图书馆中发挥更大的作用
浅析我国档案管理体制改革的重难点与建议
如何提高档案管理工作人员的素质
试论如何做好供电企业的照片档案管理
如何创新国企档案管理工作的若干思考
党校图书馆如何做好阅读推广
浅谈新闻宣传部门如何做好思想政治工作
如何提高警务技能训练水平
浅谈如何推进农业产业化进程
浅析医院女工管理工作的问题与对策
积极安乐死之合法化浅析
浅析网络环境下高校图书馆生存和发展策略

主管单位:吉林省新闻出版局舆林报刊发展中心 主办单位:吉林省新闻出版局舆林报刊发展中心

CN:22-1381/G4 ISSN:1673-8918 考试周刊杂志社

校园英语 好家长 网站地图