• 热点
  • 图片
  • 科技
  • 娱乐
  • 游戏
  • 体育
  • 汽车
  • 财经
  • 搞笑
  • 军事
  • 国际
  • 时尚
  • 旅游
  • 探索
  • 育儿
  • 养生
  • 美文
  • 历史
  • 美食
  • 当前位置: 小苹果范文网 > 科技 > 正文

    算法与程序设计教学工作总结

    时间:2020-12-28 20:14:49 来源:小苹果范文网 本文已影响 小苹果范文网手机站

    1.1计算机解决问题的过程 课堂教学反思

    2011年01月07日 10:58:52 来源:隆德县第二中学【字体:大 中 小】 “1.1计算机解决问题的过程”课堂教学反思

    本节是对用计算机程序解决问题的基本过程的入门介绍,是体验计算机程序,体验并理解用计算机程序解决问题的基本过程。这个过程包含以下环节:分析问题,设计算法,编写程序,调试运行,检测结果。

    学情分析:

    1、高中学生已具备了较丰富的计算机使用经验,但接触的多是文字处理、媒体表达等常用工具软件及网络应用等,对于计算机程序只有极少的学生接触过,许多学生只是听说,对于计算机程序的工作过程、设计过程知之甚少。

    2、高中学生具有很强的逻辑思维能力,也掌握了较高的数学知识水平,对于初步了解计算机程序困难不很大。

    我设计了这样一个问题“农夫带着狼、羊、白菜从河的左岸到河的右岸,农夫每次只能带一样东西多河,而且,没有农夫看管,狼会吃羊,羊会吃白菜。”让同学们设计一解决这个问题的方案,大家立刻讨论起来,不一会儿提出了两种不同的方案,问题解决了,通过这个问题的引入,调动了学生的积极性很自然的引入这节课的内容,起到了比较好的作用。紧接着“韩信点兵问题的设计”学生很自然的想到应用计算机解决,成功地引领学生走进了程序设计的殿堂,让他们有兴趣、有意识地进行更多的实践与探索。这种引导,正是本课的重点,也是本课最成功之处。

    本节课的目的是通过激发学生的兴趣,吸引学生自主地体验程序,感受程序解决问题的过程,理解程序的概念,从教学效果来看,学生从一开始就被深深吸引,很主动地投入到教学活动过程中探究体验程序的运行过程。

    本节课比较困难的是如何向没有任何程序概念、从未接触过程序语句的学生讲述程序及其作用,如何突破这个难点是本节课的关键。为此设计了先让学生体验“100!”的程序,学生体验到计算机的计算能力和运算速度,并且懂得了程序是由一系列语句组成,运行程序计算机会自动按语句执行。

    巧妙设计教学任务,采用任务驱动式的教学过程,学生能够体验到应用计算机解决问题的过程,实现本节课的教学目标。

    2008年2月20日上午第4节在高一(4)班上了第一节课《1.1 计算机解决问题的过程》。本节主要结合教材上的“华南太阳能设备厂生产方案选择”的实例讲解和体验计算机解决问题的过程。师姐前去听了课。总体来讲效果不是很好。最大的问题在于没有调动学生的学习积极性。从而导致学生没有跟着我一起思考问题,没有理解透彻例题。练习时虽然布置的任务很简单但做出的人不多。课后师姐对本节课进行了点评。现将得到的启示列举如下:

    启示一:要重视学生的课堂反应。关注教学中的学生这个要素。教学最终是为了让学生学到知识,提高能力,而不是为了完成教学进度和任务。当学生对提问反应不热烈,只有个别学生回答时,要考虑放慢节奏,让学生把一个环节搞清楚再进入下一个环节。否则也影响学生的学习积极性。

    启示二:批评学生要讲究技巧。本节课学生的纪律没有前几个班好,于是我直接作对比说道:我们四班的纪律没有另外几个班好,这样非常容易引起学生反感,既容易对学生的学习积极性产生消极影响又可能影响课堂满意率。所以尽量不要作班之间的对比批评。对比表扬学生倒是很受用。本节课的批评可以改为这样说:“我们班在新的学期表现出了较好的风貌,没有同学迟到,在课堂上玩其他的也没有,这很好。如果在课堂纪律上再加强一点老师就满意了。这一点以后一定要注意。”这样先褒奖再提要求,同时措辞比较委婉可能学生更容易接受。

    启示三:提高学生学习积极性的一点。设置简单的、能出成果的课堂练习。让学生觉得学有所得,这样积极性才能提高,才不会厌学。

    程序模块的教学很有难度,要认真备好课,想办法激发学生的学习兴趣,让课堂活跃化。才能获得较好的教学效果及课堂满意率。

    2008年2月22日在高一(2)班上了本学期第二节课《1.2 算法和算法的描述》。本节课主要讲授算法的概念、三种描述算法的方法、算法的特征,后面要求学生通过猴子吃桃的课后练习巩固流程图描述算法的方法。总体感觉比较好。学生能跟着一起思考问题,同时保持了较好的课堂纪律。王国汉老师前去听了课,并给予了较高评价。以下是评价要点:

    本堂课的优点:多次运用对比,联系前后的知识点及例子,瞻前顾后,显得课堂紧促条理;
    分总结合,注意对所讲知识点进行小结,再进行下面的环节,可以帮助学生梳理知识点;
    善于运用课堂激励,不断夸奖和鼓励学生,激起他们的学习动力。

    缺点:练习题难度较大,具体问题的算法层面没有讲清楚,部分学生不理解解题步骤,自然无法顺利画出流程图。导致这样的原因是部分学生(优生)讲出了解题思路,于是作为教师我没有细致分析解题思路,学生在这里花费了过多时间。

    启示如下:其一,教学要面向绝大多数学生,有时甚至是全体学生,不能被部分优生左右了教学进度。要兼顾大家,考虑大多数学生的情况。其二,继续发扬“捧”、“扬”、“夸”的课堂激励机制,学生在轻松夸奖的气氛下思维会更活跃,同时积极性更高,更愿意配合教学。

    要“捧”出好的教学效果,“捧”出高课堂满意率。

    保持好的心情去上课。记得——微笑。

    2008年2月25日在高一(3)班上了本学期第三节课《1.3程序与程序设计》。本节课主要讲授程序的概念及特征、程序的三种基本结构、程序设计语言的发展及高级语言的分类。彭敏老师前去听了课。本节课讲的比较一般,其中课堂练习的设置也不合理:完成课后的第一章扼要回顾及一道已知三角形三边求其面积的题目。

    本节内容以理论为主,基本没有涉及实际操作。学生听课兴趣不大。彭敏的意思是略过不讲,因为学生一节课下来学不到东西,文绉绉的理论学生不可能去记,三种基本结构这个本节课的重点内容在教材后面的章节还要继续学习。有一定的道理。

    后面上课的班级课堂练习只布置了已知三角形三边求其面积,画算法流程图这样一道题目,且略去了对能否构成三角形的判断,大多数学生能够当堂完成。

    启示:要合理安排教学内容,不能按教材按部就班;
    要分析学情,力争让他们每节课都有长进,从他们的角度分析课堂的价值。

    后上课的班级,要在前面上过的基础上反思,以改进。

    第三节 程序和程序设计语言

    教学过程:通过浏览“求三角形面积”源文件,认识程序并理解算法和程序之间的对应关系。通过单步运行“点到直线的距离”、“求绝对值问题”、“0到20之间奇数之和”三个程序,理解程序的三种基本结构。

    教学反思:本节课在备课时,基本上是按照教材上的活动顺序来设计导学案,只是把活动一中的“个人理财”程序改为水平考试题“求三角形面积”,和活动二中的程序改为“0到20之间奇数之和”。我觉得这此课设计思路较好,通过引导学生分析程序和单步运行程序,并完成导学案上相应的任务,通过将笔记本电脑连到班通上讲课,使学生比较直观的理解了顺序结构、选择结构和循环结构程序,为以后学习程序设计打下了很好的基础,避免了在机房上课学生思想不集中,用班班通操作VB不方便,直接讲课又不直观的缺点。从已经上过的两个来看效果比较好。

    这一节上下来,最大的感触就是对讲课的重点突出有了更深的理解。本节内容很多,涉及VB语言的特点、程序的基本构成、数据类型、常量变量、运算符函数表达式及可视化编程环境。什么是重点?数据类型中的整型和单精度实数以及可视化编程环境。其他的都只能是附带讲一下。因为你想,如果你是学生,一节课下来你能学到多少,全部都细讲等于什么都没讲,学生无法接收消化。后面的练习也要围绕重点,求实用。

    有时候上课,换位思考学生的感受,很重要。

    2008年3月3日在高一(1)班上了本学期第五节课《2.2程序的顺序结构》。本节课主要讲授顺序结构的执行方式、赋值语句、输入数据的函数InputBox、输出Print和msgbox。讲到赋值,同学们觉得难以理解,特别是实现两个变量值的交换。我灵机一动借助讲台上三个喝水的瓶子,说明了交换过程的三个步骤的含义,学生就理解了。

    讲到输入时文本框内的默认值,还渗透语文,讲了“默认”和“缺省”两个词的含义。

    后来为了为循环结构埋伏笔,还讲了以“s=s+p,p=p*2”为循环体的循环语句执行方式和结果(s=s+p+ 2p+4p+„)。这两个小环节都没有体现在事先的教学设计中。

    启示:

    1、讲的东西一定要保证绝大部分学生完全理解,不理解就要反复讲。不关注效果的讲课是失败的。

    2、要善于运用其他的教学媒体和教学方式,换思维方式讲解。

    3、课堂是活的,要把握好,同时根据需要生成一些事先没有准备的环节或其他东西,有时能起到好的效果。

    2008年3月7日在高一(1)班、高一(2)班上了本学期第六节课《2.3程序的选择结构——条件格式》。本节由标准体型的判断引入,内容比较多,涉及条件格式的单行完整模式、单行省略模式、多行模式、关系运算和逻辑运算及其运算顺序等。使用了彭老师的课件。该课件制作精美,原课件流程环节较多,自制资源丰富,是他参加青年教师教学基本功大赛的课件。两个班的课堂都比较沉闷。2班怎么都没办法调动起来,1班稍好一点。连一班都这样让我觉得很不正常。深究其原因,竟然是天气使人困乏,同时适逢三八降至,下午第八节学校组织女儿节活动,大家有一部分心思早跑了。

    课堂沉闷,没办法我想尽办法调节。说到标准体型不忘一顿自夸“像我这样就是很标准的啦”,部分学生不认真听讲我说道“有些同学的课堂行为很不利于师生关系和谐”,逻辑运算我还说到了与或非跟数学的交集并集、乘和加,物理中的并联与串联电路的相似之处,可谓旁征博引。但都效果一般。学生有的直接说没有学习的动力。怎么办?程序设计的确是不容易让学生产生学习动力的一个模块。

    从一下几个方面努力吧,我想:

    1、激励。让学生做出东西。多练。增加成就感。

    2、调节。一定要想办法调节到满意的课堂气氛再讲,学生精神好了讲一遍比精神不好讲多少遍都管用。所谓磨刀不误砍柴功,刀磨利了再砍不迟。

    3、鼓励班干部做好表率。

    路漫漫其修远兮,我将上下而求索。

    2008年3月12日下午第八节在高一(1)班上了本学期第八节课《2.4程序的循环结构——FOR循环语句》。本节课是我为参加学校青年教师教学基本功大赛上课比赛精心准备的一堂课。从“国际象棋棋盘上的麦粒”案例引入教学,让学生分析实际问题,经历补充程序、程序挑错、阅读程序最终做到独立编写For语句循环结构的程序。环节设计循序渐进,环环相扣。吴和发副校长(历史)、卢昭琼老师(历史科长)、谢黎川老师(语文科长)、明长杰老师(历史)、杨玉蓉老师(综合科长)、欧阳少英老师(物理科长、特级)、王国汉老师(以上为评委)、赵旭华老师、师姐等参加听课。教学效果:吴校长课后对我笑着说了句“可以”,珊姐评价较好,课堂上的编程练习第一题大部分学生编出来了,第二题也有部分学生编出来。学生在课后围上来说听懂了,“上得这么好”。而且还有学生围上来问没弄明白的地方,这在以前没有发生过,好几个男生还不愿意离开电脑室,不过这次的原因可不是想上网玩,而是继续调试VB程序,令我很开心。

    成功的总结:

    一、多问,这堂课上课前我问了老爸,一位有近三十年教龄的中学教师,问了师姐,他们都对课的设计及实施提出了很多好的建议,也鼓励我放开讲,要相信自己,极大地鼓舞了我的自信心。妹妹(慧)也电话鼓励我放开讲就好。这样我上课时不再紧张,发挥比较正常。

    二、学生比较配合,前面的课中渗透了一些本节课的思想和方法,学生聪明,接受这一部分知识较快,学习效果较好。

    三、过程经过了精心设计,课前的一天脑子里冒出几个好的与教学相关的幽默素材,用上效果较好。怎么讲也在其他班试过多次,虽然过程和教学方法不尽相同。

    四、本身教学具备一定的经验,课堂调控还行。

    启示:

    1、要充分自信。要充分相信我的学生,好学生。

    2、增加一些幽默素材调节气氛。

    3、要完全放开。轻松上阵。不背包袱,不要有负担。

    4、有激情点。掌控好时间。

    不足:

    1、有学生课堂嚼口香糖。要注意并加强课堂管理。

    2、课堂纪律感觉没有上学期的公开课好。

    3、备课还没有充分备学生。教学设计还有可改进的地方。

    记住:自信。我很棒!

    微笑。用微笑征服世界。

    幽默。大家都笑了。

    激情。年轻人的本色。

    2008年3月21日下午第6节在高一(2)班上了本学期第九节课《2.4程序的循环结构——DO循环语句》。本节课设计为先复习FOR语句,进行一个程序填空的练习:编程求1000以内的正奇数和。然后结合教材“种树”的案例,分析DO循环的特点及语句格式。最后进行练习巩固,完成教材上的实践1:求使累加和S小于30000的最大正整数N。内容少且相对简单,教学效果却并不是很好。

    这里要总结的并不是教学设计和实施方面。我发现我在教师素质上还有待进一步提高,我做不到诲人不倦。讲了多次的“循环终止条件要从两个方面分析,一是不能一开始就满足了,如果一开始就满足那么将不进行任何一次循环,二是要在循环体内让循环终止条件逐渐趋向于满足,否则可能一直循环造成死循环。直到后来,我明确提出循环终止条件不是S

    突然想起一句话:没有学不会,只有教不会。没有学不好,只有教不好。反思一下,我还是做得不够。信息技术作为一个不参加高考的科目,学生不可能像语文数学一样去学。这是客观事实。那么我要做的应该是想方设法调动他们的学习积极性,吸引他们参与到教学活动中来。而不是严要求,看到与预期差距大的结果就心里不舒服。

    作为信息技术教师,大家都一样。心要宽。要提高素质,提高修养,练好脾气。这样才能做一个合格的教师。

    第7节课在高一(1)又不一样了,只要题目给出来,何浩彬就立马能给出答案。甚至比我还快。重点班的学生思维还是活一点。我想另一方面也得益于师生关系的和谐。

    最后说一说具体教学内容的两点注意:一是教材上关于种树的累加和分析Tree=Tree+Tree+1这个是有问题的。这样事实上曲解题意为每一年种的树都比前面种的所有树数目多一。程序中Tree=Tree+Age-14则是正确的。二,本节课的练习,教材P54实践1求使累加和S小于30000的最大正整数N,直接将循环终止条件写为S>=30000是不符合题目要求的,此处本来就将N多算了一,如果循环体中N=N+1再放在S=S+N的下面,最后输出应该写为print n-2。

    程序为:

    Private Sub Command1_Click() s = 0 n = 1 Do s = s + n n = n + 1 Loop Until s >= 30000 Print n1 End Sub

    《算法与程序设计》的教学反思 标签:
    楼梯 案例 算法 结构 教材 分类:
    教育随笔 2010-11-05 10:44

    在新课程实施过程中,教学反思被视为促进教师专业发展和自我成长的核心要素,学校也倡导教师写教学反思。本人就本学期的教学实践过程中的一些反思小结如下。

    1、关于教材

    个人认为,新课程标准是进行教学设计的出发点,而教材是进行教学设计的主要依据,也是学生课堂学习的主要依据。

    本学期信息技术的选修模块我们学校选择的是教育科学出版社的《算法与程序设计》,当时选择这个模块是考虑到算法与程序设计和老教材衔接的比较紧,一是教师容易上手,二是学校无须添加其它机房设备,第三是为了学生的可持续发展,为今后大学的计算机学习打下基础,为通过计算机二级考试而打下铺垫。

    从整体章节结构上来看,本套教材还是符合新课程标准的,但是教材上有一些案例和教材的知识结构在课堂教学活动中还是存在一些问题。

    (1)难度大

    例如第一堂课讲解的有关“韩信点兵”的案例。按理,这个案例可以极大的调动学生的求知欲,是一个好的例题,但是证明这个定理的难度太大了。尽管在集体备课时大家充分讨论了这个问题的证明方法,甚至还请教了数学教师,但是在课堂教学中还是被学生发现了定理证明过程中的一个漏洞。

    漏洞如下:被

    5、7整除,而被3除余1的最小整数是70,由此推导出被

    5、7整除,而被3除余2的最小整数是70×2;
    事实上被

    5、7整除,而被3除余2的最小整数应该是35。所以需要将前提中的“最小”去掉,变为被

    5、7整除,而被3除余1的整数是70。但是前提改了之后定理的证明就不是那么严谨了。

    再回过头来看这个案例在课堂中所起的作用,其实是为了说明人脑解决问题的过程,因此个人认为这个案例完全可以不讲,让学生上网去查找有关证明的资料。课堂上讲解一个学生同样感兴趣,也同样能够说明问题的案例,比如说“韩信分油”的问题。

    (2)跨度大

    例如第二章一开始就要求学生上机编写一个打字测试程序。在此之前,学生仅仅了解了VB的设计界面,刚刚完成了一个简单程序的编写。而打字测试程序中所涉及到的窗体、控件以及对象的属性、方法、事件,包括VB的事件驱动原理,学生在头脑里是空白的。再加上那么多的程序代码,教师看了也会头疼的。学生一下子要感受这么多的新鲜事物,似乎步子太快了,不符合知识迁移的客观规律。

    继续回过头来看这个案例在课堂教学中所起的作用,其实是为了让学生初步了解VB程序建立与运行的一般步骤。老教材在说明这个问题的时候就比较容易让学生上手。案例可以改成学生所熟悉的“求圆的周长和面积”或者是“求物体的位移”,明确给出程序建立与运行的五个步骤,一步一步让学生实践、探索,从而完成这方面的知识建构。

    (3)知识结构有不合理的地方

    最明显的就是教材第三章和第四章的顺序问题。第三章介绍具体的算法,这是教材的重点,包括五种常用算法,解决了“怎么样”的问题。第四章讲程序设计的思想,介绍VB面向对象的程序设计思想,主要是让学生掌握对象的三要素以及VB的事件驱动原理,解决了“为什么”的问题。知识结构不合理在哪?首先,从第二章的内容来看,第二章介绍的是VB的语言规则(语法)和程序的三种基本结构,解决了“是什么”的问题。从人的认知规律来说,了解了“是什么”之后需要了解“为什么”,最后才是“怎么样”。其次,从第三章具体的内容来看,每一种算法的程序实现都需要涉及到对象的三要素以及VB的事件驱动原理,每一个程序都要修改对象的属性,程序代码的编写也都涉及到VB的事件驱动原理。所以,个人认为第三章和第四章在教学过程中需要灵活的调整两者的顺序。

    2、关于学生

    个人认为,学生能够学好这门课是教师进行教学活动的最终目的。相对于其它选修模块,算法与程序设计稍显枯燥。如何培养学生的兴趣,进而使学生认真学好这门“副课”,这是个人一直考虑的问题。

    (1)就算法与程序设计而言,学生处在同一起跑线上,以前都没有学过。尤其是对一些在其它课程学习中有困难的学生来说,这是一次让他们找回自信的机会。个人一直感到很遗憾,没有在第一节课的时候向学生介绍比尔·盖茨,包括国内的许多IT人物的的传奇经历,让他们一开始就拉近与这门课的距离。

    (2)要让学生重视这门“副课”,教师先要重视你的学生。如何让学生感受到呢?个人做了一些尝试,但感觉远远不够。比如在学生进入机房之前,帮他们开好电脑,一方面确保学生的电脑使用正常,另一方面可以让学生心里知道,教师在这里等着他们;
    需要经常抽查学生的笔记,看看是否写的认真;
    每一份学案都作详细的批阅,等等。个人也存在这样的想法,是否每个礼拜都可以安排半个小时的作业量?

    (3)活跃课堂气氛,拉近教师与学生的距离。是否在课堂上拉着学生的思路跟着教师走,个人认为课堂气氛是否活跃是一个标志。在讲VB语法的两节课上,学生倒是安安静静的在记笔记,个人却觉得站在讲台上毫无激情,当然这跟教学的内容有一定的关系,但个人觉得这堂课很失败。也有灵光一闪的时候,在讲“走楼梯”的算法时,个人随口说道班里的某某同学在走楼梯时如何如何,问某某同学走完n阶楼梯共有多少种走法时,突然课堂里一下子热闹了起来,个人知道,学生在思考了。

    (4)有时惩罚是必要的。一次,下午第一节课,全班集体迟到超过了5分钟,问原因,午觉睡过头了,还有学生甚至说教学任务完不成,索性让他们上网。个人当即回答:做梦!最后教学任务完成了,拖课10分钟。

    3、关于教学过程

    (1)重视知识的最近发展区理论。一个例题或者一个案例不能涉及过多的新概念。例题或案例的呈现需要有一个循序渐进的过程。

    比如在介绍循环结构语句时,因为循环结构语句相对来说比较复杂,是学生在算法与程序设计中遇到的第一个难点,因此学生理解起来也比较困难,如何克服这个学习障碍呢?首先教师要讲明白循环结构语句的格式,然后通过一个最简单的例题,比如说求s=1+2+3+„„+99+100,详细讲解循环的各个步骤,接着再举相似的例题进行反复,比如说求s=1+1/2+1/3+„„+1/99+1/100,最后解决求s=1-1/2+1/3-1/4+„„+1/99-1/100的问题。这三个例题都可以套用同一种循环结构,但是前两个例题重点在于循环结构的讲解,而第三个例题是在学生初步掌握循环结构的基础上加以一定的提高:循环体用到了前一节课所学的if语句。

    又如在介绍双重循环结构语句时,由于双重循环结构语句是后面具体算法(解析、穷举、查找、排序、递归)的程序结构基础,因此必须要求学生掌握。个人也有体会,掌握起来难度颇大。在教学过程中如何实现由易到难,由简单到复杂呢?个人设计了一个打印图形的五步区:第一步,打印矩形,教师主导,力求讲的清晰明了,学生易于理解;
    第二步,打印直角三角形,教师修改前一个程序,启发学生,让学生尝试写出程序运行的结果;
    第三步,打印倒直角三角形,继续启发学生,此时学生为主体,让学生修改程序;
    第四步,打印奇数行直角三角形,继续启发学生,让学生修改程序;
    第五步,打印等腰三角形,教师给出提示,让学生参与程序的修改。五个图形环环相扣,程序代码短小精悍,所有代码都套用同一种双重循环结构语句,修改起来较为方便。

    (2)尊重学生的思维方式。课堂上需要允许或者鼓励学生发表自己的见解,有时需要对学生意想不到的发现而喝彩。

    比如上文所提到的求s=1-1/2+1/3-1/4+„„+1/99-1/100的问题,在教学设计时没有考虑到可以用分支结构语句来实现它,而是这样一段代码:s = s + (1 / i) * (-1) ^ (i + 1);
    幸运的是一开始没有给出以上代码,而是让学生来填写这条循环体代码。结果就有学生给出了分支结构的循环体代码:if int(i/2)=i/2 then s=s-1/i else s=s+1/i;
    个人思考了五秒钟,立即对这种解法给予了充分的肯定,课堂上讲解的内容进行了及时的调整。课后想了想,确实是学生的解法更符合他们的思维习惯,通过条件判断解决正负号的问题,所用的代码正是上一个课时所教授的if语句。个人思考,教学相长,是有道理的。

    (3)让枯燥的程序算法转变为贴近生活、有趣味性的实际中来。例如在讲解分支结构的select case语句时,由于是刚过年不久,个人想到了一个有关年货打折的案例,要求学生参考教材上的程序代码进行改写。在最近的复习课上,学生仍然对这个案例记得很清晰。再如上文所提到的“走楼梯”的算法、“韩信分油” 的算

    算法与程序设计作为信息技术课程中的选修模块,其内容在广度和深度上都具有较高的要求。课标中对本模块的教学目标表述为“体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;
    能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。”这一表述包含了两方面的要求,即知识目标与能力目标,同时也是两种不同层次的要求。显然,“体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用”是知识目标也就是第一层次的目标,强调的是“体验”和“了解”。“能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题”是能力目标也就是第二层次的目标,强调的是“应用”和解决问题的能力。从课标的行文表述中可以看出,第二层次的目标即能力目标才是本模块教学的落脚点和最终目标。但以个人的教学经验来看,我们的教学大多还徘徊在第一层次上,极少能达到第二层次的高度。作为选修模块的教学,这样的情况是值得我们深思的。

    算法与程序设计教学探究

    【摘要】:《算法与程序设计》是普通高中信息技术课程的选修模块,也是高中信息技术教学的重点和难点,其教学内容相对枯燥,因此教学难度较大。如何在教学过程中选择适当的教学方法以激发和维持学生学习兴趣,对于引导学生学好本课程十分重要。本文结合笔者几年来的教学实践对高中《算法与程序设计》的教学进行探究。

    【关键词】:算法,程序设计,教学方法,学习兴趣

    一、教学实践中遇到的问题

    1、学生差异问题

    首先高中学生的起点水平参差不齐。很多学生在升入高中前,并未接触过算法与程序设计的相关知识。我曾做过粗略统计,每班大约都有百分之九十多的学生在高中阶段以前未曾接触过程序设计这方面的内容,因此,学生学习程序设计语言的基础较差。其次,编写程序还涉及到本身的理科基础,特别是数学思维能力,每个学生的思维能力、理解能力是因人而异的。像实验班与普通班、文科班与理科班,他们的接受能力就不同;
    而同一个班的学生,他们中有的思维敏捷能很快接受新的知识,有的却还需要反复讲解才能接受。现在我们教学要面向全体学生,让全体学生都接受有些困难。

    2、内容多,时间紧,教学目标不能很好地完成

    《算法与程序设计》模块中包括两大块内容,一是算法部分,一是VB程序设计基础部分,基本上涵盖了程序设计中用到的所有知识,有大量的概念、数据、语句以及其它的过程和函数,这些理论知识学生都必须掌握并能在VB中熟练应用,因此老师需要详细的讲解以及让学生做大量的练习。《算法与程序设计》模块的学时要求是36学时,但是一般信息技术课程最多每周两节课,有的学校甚至每周一节课,加上考试、放假等原因也会耽误一些学时,真正可以上课的课时不多,要学生全面理解算法并学会编程,教学难度可想而知。

    3、学习内容比较枯燥乏味,缺乏趣味性,学生兴趣不高

    《算法与程序设计》难教、难学是困扰师生的突出问题。对于学生而言,这部分学习内容的理论性和知识性都比较强,并且在编写程序的过程中,需要不断调试、修改程序。这个过程相比起学习一些应用软件而能制作出各种各样

    1 有声有色的作品,就显得枯燥乏味,因此学生对于这个模块的学习兴趣不高。对于教师而言,由于算法及编程知识相对枯燥且学生接受能力有差别,不易引发其学习兴趣,这就对教学的推进产生了一定的困难。

    二、教学中的实践尝试

    面对上述种种问题与困惑,如何在有限时间内合理运用教材,采取恰当的教学方法,激发学生的学习兴趣, 也就是如何提高《算法与程序设计》课堂教学的有效性,我们不妨从以下几个方面去解决:

    1、创设情境,激发学生兴趣,提高学生学习信心

    兴趣是学习的关键,兴趣决定了教学效果的好坏。在程序设计教学中要从学生的兴趣入手,利用学生对事物的好奇心,选择一些有趣的、有实际意义的程序,激发学生的学习兴趣。为了激发学生的兴趣,在程序设计中的第一课,我采用“游戏导入”方法,选定“猜数游戏”(见图1)作为切入点,对游戏与教学进行了有益的尝试。以教电脑玩“猜数游戏”作为主线,通过生生之间,人机之间相互玩猜数游戏的活动,将计算机拟人化,激发学生学习程序设计的兴趣。

    图1 在第一课的教学中,学生对猜数游戏有了浓厚的兴趣,也有了一试身手的欲望。教师还可以再演示一些由学生自己编写的、有趣的程序,从而吸引学生,并告诉他们学习了《算法与程序设计》的内容后,大家都能够编出这些有趣的小程序。

    2、与其他学科相结合,加深学生对知识点的理解,提高教学效果

    2 算法初步是高中新课程数学科目中的一项新增内容,在高一第二学期学习,《算法与程序设计》模块与数学课程算法初步部分内容相衔接,而且数学中很多问题都可以用程序设计的思维方法来解决。因此信息技术教师可以从同学们在数学课上已经熟悉的知识点入手,在教学中多举一些这方面的事例,不仅可以提高学生的学习兴趣,而且还能提高学生研究问题、解决问题的能力。

    比如,对于著名的“百钱百鸡”的数学问题,大多数学生在解题时,只能利用已知条件,列出两个三元一次方程组,成为“无解”方程。但在讲“穷举”算法时,这个问题就能轻而易举地解决。它的分析过程是:由于100钱最多只能买20只公鸡,因此公鸡数应该在0~20之间;
    同理可得母鸡数应该在0~33之间;
    小鸡数应该在0~100之间。这样,利用循环分别对公鸡、母鸡和小鸡进行枚举,可得出题目的解。

    这样的事例还有很多,如数学中解二元一次方程的问题,三角形面积计算问题,物理中平抛运动和球做反弹运动问题等。以数学或物理题讲授解析法,用经典的“百钱买百鸡”问题讲授穷举法,教学效果更为显著。

    3、采用分层策略设计教学任务

    分层教学承认学生的差异,是符合教学中可接受原则和因材施教的原则。分层教学面向全体学生,使教学适合每个学生的发展需要和实际水平,这也符合学生的心理要求,激发他们学习的自信和兴趣,提高他们的学习主动性和积极性。为了使学生乐于编程并学有所得,教师在设臵教学任务时,应改变以往硬性规定、呆板单一的做法,可将任务分为必做任务和自主任务两个层次。必做任务一般为基础问题,主要用于基础知识和基本技能的训练,一般每个同学都基本能够完成,所以要求每个同学必须完成。自主任务则是课堂相关知识的拓展延伸或创新,每个同学可视自己的学习基础量力而为,自主选择是否完成或者完成多少。

    例如,在学习完程序设计的三种基本结构后,布臵“编写一个程序求出100以内所有的偶数“这个必做任务外,还可以布臵两道自主任务让学生自由选做:①编程求出1900-2008年之间的闰年。③在数学课本上选一道题,编程解决它。实践证明基础薄弱的学生基本都完成了必做任务,心里也比较满足,而学有余力的学生对自主任务很感兴趣,有些学生不仅编写出求数学问题的程序,还把物理中的问题用程序实现求解。他们的好奇心理更加激发了探究的欲望。

    4、打破课本原有的知识结构体系

    《算法与程序设计》教材的安排基本是按照“先理论后实践,先语句再程序”的顺序,这就容易导致教师在上课时,先讲基础理论部分,象算法的概念、流程图的画法,再将具体的算法程序,由于大多数学生以前没有接触算法,使得他们学习很茫然,不知道学这些理论有什么用,从而丧失学习兴趣。我们可以改变这种体系,从程序设计学习一开始就应让学生接触功能简单结构清晰的程序,以建立对程序和语句的整体概念,体会各种语句的格式功能,了解语言的有关规定,理解计算机解决问题的一般过程。

    5、重视实践教学,培养学生实际动手能力

    VB 是一门实践性很强的课程,如果只注重理论知识的学习,纸上谈兵,不注重实际操作,上机练习,是不可能真正学好VB的。在程序设计的实践教学中,选取教学案例时尽可能做到:①贴近生活,或者数学课本上的一些典型例题;
    ②案例还要有趣味性,一个故事、一段相声、一则奇闻等等;
    ③案例问题本身要简单,但包含要学习的算法思想。例如在学习选择程序设计结构时用“猜数”游戏作为案例,就可以调动学生起的浓厚的兴趣,教学效果明显。

    巧设情境,布臵任务。在教学过程中设臵一个情景,让学生融入进去,有利于激发学习主动性。在学习随机函数时,我们创设了世界杯足球比赛掷硬币的情景,利用随机函数模拟掷硬币,让他们思考如何编写程序。类似这样的情景是学生们比较熟悉的,而且能引起他们的兴趣。通过学生的上机操作,培养他们的实际动手能力。

    三、结束语

    通过几年的摸索,笔者对于高中算法和程序设计的教学有了较大的提高,但仍存在若干不足之处。本文提出以上见解,以期起到抛砖引玉的作用。笔者将在今后的教学中,更加注重教学、教法的探究,在实践中不断提高算法和教学设计这么课程的教学能力。

    【参考文献】:

    [1] 张义兵.算法与程序设计(选修).教育科学出版社.2004 [2] 张义兵.算法与程序设计(选修)教师教学用书.教育科学出版社.2004 [3]《〈算法与程序设计〉模块的教学策略》 李娟

    《算法与程序设计》教学中实施研究性学习探步

    作者:赵濮民

    摘要:研究性学习是教育科研领域中一个崭新的课题。信息技术教学作为以培养创新精神、研究能力和实践能力为目标取向的必修课程,它强调让学生通过研究性学习,提出问题,收集材料,对研究性课题进行探索、分析、研究,最后基于问题解决模式,在实践操作中培养学生科学的态度和价值观以及创新精神、创新思维、创造能力,并学会解决生活中与信息技术学习有关的实际问题。职业学校的学生,不仅应具有独立接受知识的能力,更应具有独立探索知识的能力,由“研究性学习”补充原有的“接受式学习”,使学习方式更趋完善,只有当这两种学习方式结合起来,优势互补,才能使基础教育适应时代对人才培养的要求。

    关键词:程序设计;
    研究性学习;
    求真;
    求全;
    求变;
    求新;
    优势互补

    《算法与程序设计》是职业学校信息技术教学中的一个重点,也是难点。传统的程序设计教学以老师讲授型为主,由于算法与程序设计的内容逻辑性强,普遍认为在程序设计教学中难以实施研究性学习。

    研究性学习是以“培养学生具有永不满足、追求卓越的态度,培养学生发现问题、提出问题、从而解决问题的能力”为基本目标,以学生从学习中获得作品设计与制作方法的困惑为方向,以在提出问题和解决问题的全过程中学习到算法与程序设计为学习方法的课程。经过反复研究,我们认为研究性学习可以应用于程序设计教学中。实施研究性学习的关键是要确定一个目标,要鼓励学生主动地发现问题,并且通过探究或实践活动去试图解决问题。在课题研究的过程中采用分组交流讨论、查阅资料、协作探究、归纳总结等方式,一步步引领学生深刻掌握算法与程序设计的精髓。

    一、通过研究性学习,重构算法知识体系,要求真 研究性学习是学生在老师的指导下,结合真实生活,选定主题,然后搜集相关材料,对材料进行归纳、加工处理、分析、总结,得到相应结论的学习活动。在《算法与程序设计》教学中,根据教学内容,经过反复研究,确定了研究主题《搜索算法的应用研究》和《动态规划算法的解题应用研究》,并根据学生的自愿报名成立了两个研究小组。然后各小组根据自己研究的算法,重新整理相应的知识,对知识进行认知、归纳、总结。如《搜索算法的应用研究》小组,对搜索算法从以下几方面进行整理:

    1、搜索算法的算法思想、分类;

    2、深度优先搜索的算法思想与算法结构;

    3、广度优先搜索的算法思想与算法结构;

    4、深度优先搜索的优先策略;

    5、广度优先搜索的优化策略;

    6、深度优先搜索与广度优先搜索的异同。学生通过对搜索算法知识进行整理、分类、小结,加深了对搜索算法的理性理解与感性认知。

    二、通过研究性学习,同学之间取长补短,要求全

    每个学生都有所长,也有所短,研究性学习一个重要的特点就是:分工合作,共同讨论,共同提高,使参与的学生全面发展。我们的“搜索算法的应用研究”小组共有五个成员,根椐学生的特点、特长,对他们进行分工,每位学生研究上述其中一个问题,然后整个小组一起讨论,每位学生介绍自己的研究情况、研究成果,然后其他同学进行补充,发表自己的见解,这样每个同学都使自己的研究内容得到补充,同时也学习到了其他同学研究方面的知识,可以取长补短,共同提高,得到全面发展。

    三、通过研究性学习,总结算法的应用规律,要求变

    研究性学习的目的,是要求学生搜集与主题有关的资料,归纳整理相关资料,根据相关材料和知识,对主题进行研究,提出自己的观点或结论。我们在程序设计教学中进行算法专题研究也是这样,除要求学生归纳、整理专题算法知识外,还要总结出算法的应用规律、应用算法解题的步骤和算法的框架,能根据实际情况,随机应变。如在“动态规划的应用研究”中,学生总结出:动规划是解符合“无后效性原则”的最优问题的一种算法思想;
    用动态规划解题的一般步骤是:(1)判断题目是否为求最优问题,是否符合“无后效性原则”;
    (2)确定如果划分阶段;
    (3)确定每个阶段有几种状态;
    (4)找出状态转移方程和边界条件;
    (5)用算法语言实现算法过程。又如在“搜索算法的应用研究”中,研究小组的同学总结出:(1)广度优先搜索算法通常应用于解最少步数问题,而深度优先搜索算法则通常用来解所有路径问题;
    (2)深度优先搜索和广度优先搜索都是搜索算法,前者时间复杂度较大,而后者则占用的内存较大;
    (3)深度优先搜索在实现时用递归或用堆栈来实现,而广度优先搜索是用队列来实现,实现两种算法所用的数据结构不同;
    (4)深度优先搜索和广度优先搜索都是搜索算法,但两者的算法结构有较大的不同。学生通过自己对算法应用规律的总结,对算法的应用得到升华,进一步提高算法的应用能力和程序设计能力。

    四、通过研究性学习,提高分析、归纳和综合能力,要求新

    对算法的专题研究,不仅要对算法理论进行总结,算法应用的研究也是很重要的一方面,通过算法的解题应用,既提高了学生分析问题的能力,也加深了学生对算法的理解,提高了学生的算法应用能力,进而得到对学生创新能力的培养。另外,我们在算法研究过程中,要求学生透切理解算法内容,用算法语言准确描述算法,通过这种途径,进一步加深学生对算法的理解,同时也提高了学生的算法表达能力和归纳、总结的能力。

    通过对算法进行专题研究,可以进一步加深学生对算法知识的理解,也可以提高学生的算法应用能力和程序设计能力。实践告诉我们:在整个研究过程中要注意以下几个问题:

    1、课题不宜太大。研究课题的确定是研究性学习实施过程中重要的一环,课题选择恰当与否,直接关系到整个课题研究的成败。在程序设计教学中进行研究性学习活动,选题要遵循下面的原则:(1)课题的范围不宜太大;
    (2)有一定的应用价值;
    (3)结合学生的实际。一个好的开始是成功的一半,在研究性学习活动中也是如此。

    2、要理论研究与算法应用相结合。对算法的专题研究,算法应用是重点。在算法知识归纳总结的基础上,重点应研究算法应用的一般规律、算法结构、应用算法解题的一般步骤等。不应该只是对算法理论的空洞论述,否则效果不好、意义也不大。

    3、充分发挥教师的引导作用、学生的主体作用。在算法研究活动中,应充分发挥教师的引导和指导作用,既不能放任自由,也不能包办代替,要充分发挥学生的主体作用。当学生遇到问题和困难时,老师应当引导和启发学生,让学生去探索和研究,而不是直接告诉学生答案,老师始终是学生的引导者,学生是真正的参与者,使学生通过算法研究,加深对算法的理解,提高算法应用能力和程序设计能力。

    职业学校的学生,不仅应具有独立接受知识的能力,更应具有独立探索知识的能力,由“研究性学习”补充原有的“接受式学习”,使学习方式更趋完善,只有当这两种学习方式结合起来,优势互补,才能使基础教育适应时代对人才培养的要求。

    C程序设计算法总结举例

    1.顺序结构举例

    (该类题目,通常输入一些数据,再通过使用一个或几个数学公式求解,通过赋值表达式得到结果,并输出。包括求三角形面积,相关物体体积,求温度,解二元一次方程组、一元二次方程等)

    1-1.求温度转换 华氏-摄氏温度转换公式:c=5/9(f-32) #include main() { float c, f; scanf("%f", &f); c = 5.0 / 9 *(fi + 1 ); //pow(x,y)计算x的y次方 } ...3-5.求 s=a+aa+aaa+aaaa+a...a(n个a),a,n由键盘输入!。

    如输入a=3 n=5 则 s=3+33+333+3333+33333 ……

    k = s = a; for ( i = 1; i = 0; j-- ) { printf( "%c", "A" + j ); } printf( "\\\\n" );

    } }

    #include main() { int i, j, n; scanf( "%d", &n ); for ( i = 0; i

    } }

    4.数组

    包括:排序、查找、字符串长度、字符串大小写转换、比较字符串大小、字符串连接、字符串拷贝、数列前n项、统计字符串中单词个数、求数组元素最值、二维数组输入、输出、转置、数字(字符串)逆序输出。数组中统计奇数偶数,二维数组对角线元素,行列元素的相关处理。

    4-1排序(选择法、冒泡法) 冒泡法

    (1)冒泡法排序算法

    将一个数字序列存放在数组中,相邻的两个数进行比较,若前一个数大则交换,...一趟下来最大数必然在最后,然后对于剩下元素反复执行上面操作 #include main() { int a[10], i, j, x; for ( i = 0; i a[j + 1] ) { x = a[j]; a[j] = a[j + 1]; a[j + 1] = x; } printf( "\\\\n" ); for ( i = 0; i

    编写自定义函数,实现冒泡法排序

    #include main() { void qipao( int a[] ); int a[10], i; for ( i = 0; i a[j + 1] )

    {

    x = a[j];

    a[j] = a[j + 1];

    a[j + 1] = x; } } (3)选择排序算法

    将一个数字序列存放在数组中,假设“剩下的序列中第一个元素”为最小值,将其与数组中其它元素进行比较,找到最小值,将该最小值与“剩下的序列中第一个元素”进行交换,最小元素放到剩下序列的第一个位置,反复做这个操作……

    #include main() { int a[10], i, j, m, x; for ( i = 0; i a[j] ) m = j; x = a[m]; a[m] = a[i]; a[i] = x; } printf( "\\\\n" ); for ( i = 0; i

    #include main() { void xuanze( int a[] ); int a[10], i, j; for ( i = 0; i

    void xuanze( int a[] ) { int i, j, x, m; for ( i = 0; i a[j] ) m = j; x = a[m]; a[m] = a[i]; a[i] = x; } } 4-2查找

    顺序查找:数字序列放到数组中,不要求数组元素本身有序,查找x是否在数列中:
    ……

    for(i=0;i

    折半查找:1.要求数列必须有序的;
    2.比较数列中间元素;
    3.缩小范围,重复2…… 4-3数列前n项

    若已知 f1=1,f2=2,f3=3, fn=fn-1+3fn-2+fn-3 n>=4,用数组的方法求数列前n项(n由键盘输入)及前n项和。

    #include main() { int f[100], n, i, s; scanf( "%d", &n); f[1] = 1, f[2] = 2, f[3] = 3; s = f[1] + f[2] + f[3]; for ( i = 4; i

    //输出所有列下标大于行下标的数组元素 for ( i = 0; i i ) { printf( "\\\\n行标: %d,列标: %d,元素: %d", i, j, a[i][j]); } //数组f里元素均初始化为0 for ( i = 0; i

    //求所有能被2,3,5整除的数组元素的平方和 for ( i = 0; i

    //将二维数组赋值给一维数组,并输出 n = 0; for ( i = 0; i

    #include #include main() { char a[100], b[30], c[4][100]; int i, j, k; //编程序实现gets函数功能如下:
    puts( "请输入字符串a:\\\\n" ); i = 0; while (( a[i] = getchar()) != "\\\\n" ) { i++; } a[i] = "\\\\0"; puts( "输入的字符串是:\\\\n" ); printf( "%s", a );

    //编程序实现strlen函数的功能:
    i = 0; while ( a[i] != "\\\\0" ) { i++; } printf( "%s", "输入的字符串长度是:\\\\n" ); printf( "%d\\\\n", i );

    //编程序实现strcat函数的功能:
    i = j = 0; puts( "请输入字符串b:\\\\n" ); gets( b ); while ( a[i] != "\\\\0" ) { i++; } while ( b[j] != "\\\\0" ) { a[i] = b[j]; i++; j++; } a[i] = "\\\\0"; puts( "连接后字符串为:\\\\n" ); puts( a );

    //编程序实现strcmp函数功能:
    i = 0; k = 0; puts( "\\\\n请重新输入两个字符串:\\\\n" ); gets( a ); gets( b ); while ( a[i] != "\\\\0" || b[i] != "\\\\0" ) { if ( a[i] > b[i] ) { k = 1; break; } if ( a[i]

    5-5编程序实现函数strcat(str1,str2)函数的功能:该函数实现将两个字符串(分别存放于str1,str2中)连接。

    #include void scat( char a[], char b[] ) { int i, j; i = j = 0; while ( a[i] != "\\\\0" ) //定位字符串a的结尾 i++; } while ( b[j] != "\\\\0" ) //实现字符串连接 { a[i] = b[j]; i++; j++; } a[i] = "\\\\0"; //连接产生的新字符串末尾添加字符串结束标识 }

    main() { char a[100], b[30]; puts( "请输入字符串a,b:\\\\n" ); gets( a ); gets( b ); scat( a, b ); //函数名做为参数 puts( "连接后字符串为:\\\\n" ); puts( a ); } 5-6编写函数实现:输入一维数组求数组中元素的最大值,输入a,b,c,d求最小值 #include //此例子中求最值分别采用条件表达式和选择结构实现,请仔细比较二者使用方式 int f1( int a, int b ) { return a > b ? a : b; }

    int f2( int a, int b ) { int c; if ( a

    main() { int a, b, c, d, s[10], i, max, min; scanf( "%d,%d,%d,%d", &a, &b, &c, &d ); for ( i = 0; i

    max = f1( f1( f1( a, b ), c ), d ); min = s[0]; //假设min是数组中任意元素 for ( i = 0; i

    5-7函数要求掌握的算法实现:

    排序、查找、字符串求长度,连接,复制,比较大小,输入,输出,以及前面讲过的各种算法通过函数调用实现,求素数,求闰年,最大公约、最小公倍数等等。

    5-8变量的作用域和生存期

    变量的作用域分为:局部变量和全局变量函数。局部变量作用范围是定义它的函数内,全局变量作用范围是从定义点开始到程序结束。

    #include int s = 3; //s全局变量 int a( int x ) { int c = 1, s = 2; //c,s,x局部变量 return c + s + x; //t不起作用 }

    int t = 6; //t全局变量 main() { int x, y; //y,x局部变量 x = 5; y = a( x ); printf( "%2d,%2d,%2d", s, y, t ); }

    变量的生存期:静态变量和动态变量

    #include int a( int x ) { static int c = 0; //c静态变量,始终存在;
    c=0 仅仅执行一次 ,其值保留上次运行结果

    int i = 1; //i动态变量,每次调用分配内存空间,每次都重新赋初始值1 c++; i++; return c + i + x; } main() { int x, y = 0; for ( x = 1; x

    y=c+i+x y=(1+2+1)+(2+2+2)+(3+2+3)+(4+2+4)+(5+2+5).....+(10+2+10)=130

    6编译预处理命令

    #include #define n 5+3

    ....printf("%5d",n*n); 其结果是?

    答案 23 理由:纯粹置换! n*n---5+3*5+3

    第一课 初识算法与程序设计

    一、教学目标

    1、知识与技能

    (1)理解算法的概念,培养学生自我探索信息,高效获取信息的能力;

    ( 2)能初步利用算法解决简单的问题,培养学生的理论联系实际能力和动手操作能力。

    2、情感、态度、价值观

    学生在学习过程中,通过亲身经历体验获得对此算法的感性认识,培养学生自我获取信息、分析评价信息、表达呈现信息的能力,进一步提高其信息素养。

    二、教学重点难点

    重点:算法概念的理解

    难点:如何科学合理的选择和设计算法。

    三、教学策略与手段

    以趣味性问题设置情境,激发学生探索解决问题的兴趣,与学生进行互动探讨,通过Flash演示材料,比较直观地把抽象的问题简单化,使学生的思考逐步深入,从而总结出算法的概念,学会如何设计和选择算法,培养学生自主探究学习的能力。

    四、教学过程(1课时)

    (一)我们来共同寻找下面一些生活中比较现实的问题的解决方法。 【问题一】天下真的有“不要钱的午餐”吗?

    某一餐馆门口海报上写着“不要钱的午餐”, 规则如下:在三个月内,来宾必须凑够五个人,五人每次来就餐必须按照不同的顺序坐,直到把所有可能的顺序都坐一遍,以后来吃饭就可永远免费” 。于是有人想,这太容易了,每人每次坐不同的位置,吃五次不就行了?于是他就叫上自己的朋友参加这项活动,可是,吃了十次之后,还没有吃上免费午餐,这是怎么回事呢?

    学生们感觉非常有意思,很快以小组为单位进行热烈的讨论并得出了破解问题的步骤:①第一个座位5个人都有坐的机会②第二个座位只有4个人中的任一个有坐的机会(一个人不能同时坐两个座位)③第三个座位只有3个人中的任一个有坐的机会④第四个座位只有2个人中的任一个有坐的机会⑤第五个座位只有1个人有坐的机会⑥计算:5×4×3×2×1=120⑦得出结论:需要吃120次才有可能吃上免费午餐。

    【问题二】有三个和尚和三个妖怪过河,只有一条能装下两个人的船,在河的任何一方或者船上,如果妖怪的人数大于和尚的人数,那么和尚就会有被吃掉的危险。你能不能找出一种安全的渡河方法呢?请写一写你的渡河方案。

    学生:学生讨论回答。

    〖展示步骤〗

    ①两个妖怪先过河,一个妖怪回来;

    ②再两个妖怪过河,一个妖怪回来;

    ③两个和尚过河,一个妖怪和一个和尚回来;

    ④两个和尚过河,一个妖怪回来;

    ⑤两个妖怪过河,一个妖怪回来;

    ⑥两个妖怪过河。

    【Flash动画展示】通过讨论和动画展示,我们可以知道,计算机解决问题和人解决问题一样需要有清晰的解题步骤。算法就是解决问题的程序或步骤。

    (二)【课件展示】算法的概念:

    1、广义的算法是指完成某项工作的方法和步骤,在我们日常生活中也经常使用算法,只是没意识到罢了。如:洗衣机的使用说明书是操作洗衣机的算法,菜谱是做菜的算法等等。

    2、在数学中,现代意义的算法是指可以用计算机来解决的某一类问题的程序和步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成。

    【小试身手】按照这样的理解,我们可以设计出很多由具体数学问题解决一类数学问题的算

    法.下面看一个例子:(要求学生自己考虑并写出具体的算法)

    鸡兔同笼问题。一个笼子里有鸡和兔,现在只知道里面一共有17个头,48只脚,鸡和兔各有多少只?试设计一个求解的算法。

    【设计意图】求解鸡兔的问题简单直观,却包含着深刻的算法思想。应用解二元一次方程组的方法来求解鸡兔同笼问题。

    第一步:设有小鸡x只,小兔y只,则有

    第二步:将方程组中的第一个方程两边乘-2加到第二个方程中去,得到 ,得到y=7;

    第三步:将y=7代入(1)得x=10。

    【变一变】在笼中有鸡、兔若干,已知有头a个,有脚b只,求各有多少只鸡和兔。

    【师生合作】老师带领学生共同书写规范的算法的具体步骤,最后引出算法使用的范围:能解决一类问题,并且能重复使用。

    (三)【课件展示】算法的基本特征

    ①有穷性 ②确定性 ③不唯一性 ④有效性(逻辑性)

    1、有穷性:一个算法应该包含有限个操作步骤,而不能是无限的。

    2、确定性:算法的每个步骤都应该是明确无误的,不能含义模糊,使执行者无所适从。

    3、有零个或者多个输入,有一个或者多个输出

    4、有效性:算法中的每一步都应该能有效地执行,执行算法最后应该能得到确定的结果。

    【教学总结】

    1、本节课通过一些生活中看似简单问题的解决方法和步骤,使学生比较轻松的接受了生活算法的概念,进一步理解了计算机算法的概念。

    2、课堂教学的效益取决于学生对所学知识理解了多少,能否用所学知识来解决一些实际问题。本节课的设计突出讲与练的结合,培养学生的动手能力,并且引出学生对下一节课的内容的思考,比较顺利的完成了本节课的教学任务。

    3、如何优化算法,找到算法的形式和用算法解决问题的效益的最佳结合点,还尚需探讨。

    《算法与程序设计思想》教学案例1

    一、教学目标 1.知识与技能:

    求一批数据中最大值的算法设计思想,并将算法的设计思想用流程图表示出来。

    2.过程与方法:

    利用现实生活中比较身高的活动,以及对武术比赛中“打擂台”流程的逐步梳理,让学生学会从此类生活实际中提炼出求最大值的思想方法,即算法思想。

    培养学生分析问题、解决问题的能力,让学生学会在面对问题时能梳理出解决问题的清晰思路,进而设计出解决某个特定问题的有限步骤,从而理解计算机是如何解决、处理某种问题的。

    3.情感、态度与价值观:

    让学生全身心地投入到教学活动中,积极与同伴合作交流,进行探索活动。培养学生良好的思维品质,发展他们的创新思维,并养成积极的学习态度和良好的学习习惯。

    创设情境,以激发学生的学习兴趣。努力营造一个可以接纳的、支持性的、宽容的课堂学习环境,让学生置身于民主和愉悦的课堂氛围中放飞思维、潜心研究、快乐创造。

    二、教学重点、难点 教学重点:建立求一批数据中最大值的算法设计思想,并将此算法设计思想用流程图表示出来。

    教学难点:上述重点问题同样是本课教学的难点。另外,如何把人解决问题的思路、步骤用计算机语言描述出来也是本课的难点之一。

    三、教学对象分析

    高一年级的学生。他们已具备了一定的观察、思考、分析和解决问题能力,也已有了顺序结构、分支结构、循环结构等知识的储备。因此,对于如何将解决问题的思路画成流程图,学生已有一定的基础,但可能还不很熟练,尤其对刚学过的循环结构,教师在课堂上要注意引导。

    四、教学策略及教法设计

    利用现实生活中比较一组学生身高这一事件,引导学生去发现求最大值的一种方法。

    如何设计求一批数据中最大值的算法?我认为让学生自己去经历整个探究过程,要比直接把现成的算法告诉学生有意义得多。它能迅速、有效地帮助学生建立程序设计思想。在完成这个任务的过程中,教师的循循善诱起到了非常关键的作用。找出一批数据中的最大者,从表面上来看是一个很简单的问题。在比较数的过程中,人因为动用了眼睛,比较大小的思维过程一闪而过,所以能很快求出一批数据中的最大值。而计算机与人不同,它对这些数据看不见、摸不着,怎么来完成这一任务呢?其实,计算机解决问题的关键,就是要把人解决问题的思维过程用计算机语言描述出来,即为大脑思维的每一步“拍照”。这是计算机程序设计教学的一个重点,也是一个难点,需要教师在教学过程中逐步引导和训练学生,使学生逐渐学会分析问题,寻求解决问题的方法和步骤。本案例运用生活中“打擂台”的实例引导学生分析求最大值的方法,通过对这一现象的分析,逐步引出求最大值的算法设计思想。

    1 孙朝霞.从生活中探究和建立程序设计思想——《算法与程序设计思想》教学案例.中小学信息技术教育,2005(12)

    五、教学过程 1.情境创设 师(提问):
    今天在第一排就座的有10 多位同学,谁是我们第一排在座各位中的最高者呢?

    师(引导):
    大家思考,通常这个任务我们是怎样去完成的? 教师根据学生对问题的回答进行分析。引导学生往古时候比武时常常采用的“打擂台”的方式上想,提示学生可参考电视上经常播放的“挑战主持人”节目。

    师生:
    打擂的过程可以描述为:

    (1) 确定一个擂主(讨论第一个擂主是如何确定的);

    (2) 挑战者上台;

    (3) 擂主和挑战者比较;

    (4) 挑战者胜的话,挑战者做擂主,否则擂主卫冕;

    (5) 重复执行(2)~(4) 步骤,直到最后一个挑战者。

    师:
    在打擂的过程中,我们看到(2)~(4) 步骤是要重复做的,所以我们该怎么办呢?

    生:
    需要循环结构来实现。

    师:
    这几个步骤序列重复到什么时候结束呢?由学生讨论结束的办法,很显然,需要在最后加上一个能判断什么时候结束的判断框。

    根据讨论的步骤,最后师生共同得出打擂台的算法和流程图(如图1 )。

    2.求一般情况下的最大值的算法 师(引导):
    如果我们面对的是一堆数据,现在希望我们求出这一堆数据中的最大值该怎么办?通过教师和学生的共同分析,把问题进一步细化为:

    (1) 从第一个数据开始看起;

    (2) 把第一个数据的值在变量中记下来;

    (3) 再取一个数据;

    (4) 比较这个数据与变量中记下的数据的值;

    (5) 如果这个数据的值比记下的数据的值大,则去掉变量中原来那个数据,记下新数据的值;

    (6) 重复执行(2)~(4), 继续比较,直到最后一个数据。

    也就是说,计算机的变量始终记着当前比较过数据中的最大者(我们不妨用X 表示它), 当取完最后一个数据时,X 中留下的也就是最大值了。

    求最大值的算法设计思想用图2 表示。

    注意:

    a.再次让学生讨论变量的意义,弄清赋值语句的意义。

    b.一些物理量用变量表达的意义。如X 表示最大值,X 表示输入的一个值,且每次循环时都用同一个变量X 。

    c.为了控制循环结束,必须加入一个控制循环次数的计数器I, 当I 达到一定的次数后,循环工作结束。

    3. 回顾小结

    师生共同总结算法设计的过程,就是将大脑思维的每一步都记录下来,并且用计算机能达到的功能来实现人解决问题的思路。

    3.4算法及其表示 智能吸尘器算法简单分析

    【教材分析】 本节教材的地位、作用等分析。

    本节教材位于高中信息技术必修模块第三章中:“算法及其实现”部分内容,本节课的学习目的是使学生体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;
    体验信息技术中算法的魅力,为学生选修算法模块奠定基础。

    【学情分析】

    算法是我们信息技术基础模块的最难的一块内容,课时又少,只有两课时,如果初中信息技术正常开展,那么这个内容也容易开展。

    【教学目标】

    1.知识与技能

    理解算法的含义,体会算法在程序设计中的地位;

    培养用计算机编程解决现实问题的能力。

    2.过程与方法

    能通过观察吸尘器的工作来分析其算法,培养学生用程序设计的思想来思考产品。

    3.情感态度与价值观

    引导学生了解程序设计的更多知识,体验信息技术的强大魅力;

    激发学生对计算机编程解决现实问题的学习欲望,提高学习兴趣。

    渗透人文教育,懂得感恩。

    【重点难点】

    教学重点:算法的特征;
    算法的表示 教学难点:对算法的理解, 流程图

    【设计思想】

    新课标强调要“培养解决问题的能力,倡导运用信息技术进行创新实践”,以前教学中我一直从面到点,先讲算法的定义和特点,再举例,效果不是很好,学生印象不深,往往到学期结束的时候,对算法印象全无。

    因此,这次在设计本节内容的时候,在选择实例的时候,我从两点考虑:一是生活化,选择的例子尽可能贴近生活,既要达到吸引学生的目的,又能体现技术的真实内涵(现在的学生,生活自理能力太差了);
    二是通过把抽象的问题分析成为具体步骤或方法,从而形成算法,让学生理解计算机解决问题的基本过程。

    我在选择实例的时候,尽量让这个例子能贯穿整堂课,把一个问题分析透,印象会深刻。

    【教学流程】

    导入

    师:喜欢干家务吗? 生:不喜欢

    师:可是有一个人就是无怨无悔的做着家务(渗透人文教育,懂得感恩) 生:谁?

    师:“马大嫂”,你们认识“马大嫂”吗?每个家庭都有。

    生:领悟

    师:
    “马大嫂”在我们同学们的年纪时,也是不喜欢干家务的,是什么让他们无怨无悔的干着家务?作为他们的孩子,我们有没有想过替他们分担一点?或者当我们长到“马大嫂”的年龄,我们能不能让家庭生活轻松一些?

    生:讨论

    师:家庭的智能化脚步离我们越来越近,我们的生活里随处可见,比如有定时功能的家电,洗衣机、洗碗机,今天我给大家推荐一款“买汰扫”的扫:智能吸尘器。(引导学生用计算机编程来解决现实问题)

    首先声明,我不是搞推销的,而是带领大家去设计生产产品的。今天我们一起来分析、设计一款智能吸尘器。

    首先,我们分析一下原始的手工操作吸尘器的工作需要几步? 新课(先把复杂的问题简单化,得出大的方向,然后逐步细化) 生:三步,打开电源、开始工作、关闭电源

    师:看来你们都是宋丹丹的徒弟,其实这也是我们用计算机解决实际问题的思维:先设计算法、再编制程序来实现算法。

    师:什么是算法呢?算法是解决问题的方法和步骤,同学们用的是自然语言描述的算法,我是用流程图来描述算法。

    算法描述的方法和步骤应该是有限的,有开必有关;
    有Begin必有End;

    同学们是不是有被忽悠的感觉?有,就说明了我们的同学想的更远了,是啊,我这个算什么算法,跟本没解决什么问题,对了,算法还有一个定义,解题方法的精确描述,

    我这个算法的步骤有了,但不够精确描述,所以我们要自顶向下 ,逐步求精。

    师:你们说哪个步骤需要细化? 生:第二步

    师:那你们觉得吸尘器要体现智能,应该从哪些方面考虑? 生:讨论

    归结你们的观点,主要有三个:设定清洁路线模块,躲避障碍物模块,自动充电程序 设定清洁路线模块

    师:你们拖过地吗?如果让你来拖地,你会选择怎样的路线既能减少重复路线,又能全部覆盖? 好,我们模拟一下,(用flash 规定几个相同的区域,然后计时擦除)把橡皮擦当成我们的吸尘器,擦除前景颜色并计时,……通过大家的实践,我们可以看出几种方案比较科学,通过这个试验,我们知道解决问题的方法有很多,生活中也一样,关键是要选择合适的一种,达到既快又好.这是我们在最优环境下的情况,没有考虑实际情况。

    我们看看具体的设计

    前面同学们提到躲避障碍物是设计的关键。

    躲避障碍物模块

    师:躲避障碍物模块是体现吸尘器智能的关键一点,我们先分析碰到墙壁怎么处理,只要碰到墙壁能处理,其他的是不是也是一个道理?

    现在我请同学们描述一下碰到墙壁这个算法。

    真了不起,你们用自然语言描述了这个算法,我习惯用流程图来描述。

    请看我的算法

    这个算法同样比较粗糙,我们一起把它修正一下,首先要确定哪些地方需要细化,对了,是怎样判断“有没有碰到墙壁?”,这是核心,你们认为怎样判断好?请大家在纸上设计设计

    还有没有其它需要修正的?对了,怎样“转变方向”也要细化,你们认为怎样改变方向好?

    就这个流程图本身,还有什么地方需要修正的吗?Y和N线路里有相同的语句,我们可以把

    它提出来,放在合并后的线路中.好,我们把经过大家修改后的算法称为智能清扫模块

    自动充电程序

    我们还少了一个关键模块,地没扫完,电没了怎么办?

    现在请同学们参考智能清扫模块的流程图,画一画碰到电不足了那一刻怎么处理的算法。

    学生上台画流程图,根据学生的流程图修正,得到循环结构。

    回顾小结

    现在我们回顾一下我们设计智能吸尘器的过程:首先我们把复杂的问题简单化,设计了一个三步走的算法,然后,选择了一个最优路线,再设计了一个具有智能的障碍物躲避模块和自动充电模块,在第一个流程图里我们提出了算法要有开始和结束,即算法的有限性;
    最优路线里我们得出了最优算法;
    障碍物躲避模块我们提出了可行性和没有二义性。

    针对以上算法,从开始到结束都离不开这三种情况,就像我们的生活,有可能一路直行、也有可能碰到分叉口、还有就是回到原路,还有没有其他的可能?这就如同我们的算法,所以这三种我们就称为基本结构,由这些基本结构组合成大的程序。

    拓展

    有了算法,程序实现就容易了,经过我们一起设计的第一代机器人初具模型,请看我们的作品(展示物体碰撞的动画),再看看我写的代码,一些简单的语句你们也看得懂,比如我们的核心模块„„

    我们用一节课的时间就已经设计出这样的产品,如果学了一本书,读了四年的大学,你们的产品不知要好到哪里,到时候别忘了给全班同学发一个哦。

    课外作业

    研究了智能吸尘器,你们有什么启发?那么我们就一起设计一下自己未来的家庭生活吧?

    只有想不到的,没有做不到的。想法高于一切,这个想法就是我们今天讲的算法,它不单单存在于我们的计算机行业,生活中处处可见,希望大家做个有心人,好好设计自己未来的生活,设计不好,继续马大嫂的生活。

    算法与程序设计教案模板

    程序设计教学设计

    操作系统课程设计编程序模拟银行家算法

    小学算术运算测试程序JAVA课程设计报告

    算法 教学设计

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网