程序与程序设计教学设计

2024-06-22

程序与程序设计教学设计(精选8篇)

篇1:程序与程序设计教学设计

程序与程序设计教学设计

教学设计

一、学习者分析

对于初二的学生,经过第一册第一章的学习,对信息技术课程的学习已经形成了习惯,熟悉常见的应用软件和常规的教学环境,为进一步学习计算机程序设计打下了一定的基础。但由于程序设计本身的教学内容条理性、实践性、综合性强、需要学习者有较强的动手能力、逻辑思维能力并掌握程序设计的语言、熟悉问题的相关的背景知识,因此,就一般学生而言,学习的难度仍然很大,教师的引导、启发、点拨作用尤其重要。

二、教材内容分析

1、本节的主要内容及其在本章的地位:本节是本章的入门,引起学生的学习兴趣是关键,必须通过本节的学习,激发学生的学习兴趣,为进一步学习程序设计,了解程序打下基础。

2、教学重点难点教学重点:程序作用及学习程序设计的`意义和方法。教学难点:程序程序的概念;如何学习程序设计。

3、课时安排:一课时

三、教学目标

1、知识与技能

(1) 了解程序的概念及程序在计算机中的作用。

(2) 初步了解学习程序设计的意义和方法。

(3) 了解程序设计语言的种类及主要特点。

2、过程与方法

(1) 通过对游戏程序的运行初步体验程序在计算机中的作用。

(2) 通过观察由于修改程序的部分参数而引起程序运行结果的变化,感受程序解决问题的一般过程与方法。

3、情感态度价值观 运行游戏程序的运行中激发学生学习程序知识的兴趣,为初步学习程序设计打下基础。

四、教学理念和教学方法

程序的概念与计算机程序设计对于初中的学生来讲比较抽象,本节安排的学习内容较小,只要是让学生通过直观的体验,引导学生了解认识什么是计算机程序和程序设计对计算机应用的重要作用。在教学的过程中让学生初步了解冯.诺尔曼的“存储程序控制”思想。

五、教学过程设计

1、教学内容的组织与呈现方式:先通过游戏程序为切入口,说明什么是计算机程序;然后通过修改程序,让学生在活动中初步熟悉VB程序设计环境,激发学生学习程序知识的兴趣。

2、教学过程:

篇2:程序与程序设计教学设计

作者:赵濮民

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

篇3:极限程序的设计与开发

极限程序设计是一种轻量级的软件开发方法, 它不同于传统的重量级的开发方法。传统的重量级的开发方法严格定义了许多的规则、流程和相关的文档工作。灵巧的轻量级开发方法, 其规则和文档相对较少, 流程更加灵活, 实施起来相对较容易。

在软件工程概念出现以前, 程序员们按照自己喜欢的方式开发软件。程序的质量很难控制, 调试程序很繁琐, 程序员之间也很难读懂对方写的代码。1968年, Edsger Dijkstra给CACM写了一封题为GOTO Statement Considered Harmful的信, 软件工程的概念由此诞生。程序员们开始摒弃以前的做法, 转而使用更系统、更严格的开发方法。为了使控制软件开发和控制其它产品生产一样严格, 人们陆续制定了很多规则和做法, 发明了很多软件工程方法, 软件质量开始得到大幅度提高。随着遇到的问题更多, 规则和流程也越来越精细和复杂。

二、极限的概念及应用内涵

(一) 极限的含义。

“Extreme” (极限) 是指, 对比传统的项目开发方式, XP强调把它列出的每个方法和思想做到极限、做到最好;其它XP所不提倡的, 则一概忽略 (如开发前期的整体设计等) 。一个严格实施XP的项目, 其开发过程应该是平稳的、高效的和快速的, 能够做到一周40小时工作制而不拖延项目进度。

(二) 极限的设计。

从具体开发的角度来看, XP内层的过程是一个个基于测试驱动的开发 (Test Driven Development) 周期, 诸如计划和设计等外层的过程都是围绕这些展开的。每个开发周期都有很多相应的单元测试 (Unit Test) 。刚开始, 因为什么都没有实现, 所以所有的单元测试都是失败的;随着一个个小的需求模块的完成, 通过的单元测试也越来越多。通过这种方式, 客户和开发人员都很容易检验, 是否履行了对客户的承诺。XP提倡对于简单的设计 (Simple Design) , 就是用最简单的方式, 使得为每个简单的需求写出来的程序可以通过所有相关的单元测试。XP强调抛弃那种一揽子详细设计方式 (Big Design Up Front) , 因为这种设计中有很多内容是你现在或最近都根本不需要的。XP还大力提倡设计复核 (Review) 、代码复核以及重整和优化 (Refectory) , 所有的这些过程其实也是优化设计的过程;在这些过程中不断运行单元测试和功能测试, 可以保证经过重整和优化后的系统仍然符合所有需求。

(三) 极限的编程。

既然编程很重要, XP就提倡两个人一起写同一段程序 (Pair Programming) , 而且代码所有权是归于整个开发队伍 (Collective Code Ownership) 。程序员在写程序和重整优化程序的时候, 都要严格遵守编程规范。任何人都可以修改其他人写的程序, 修改后要确定新程序能通过单元测试。

(四) 极限的测试。

既然测试很重要, XP就提倡在开始写程序之前先写单元测试。开发人员应该经常把开发好的模块整合到一起 (Continuous Integration) , 每次整合后都要运行单元测试;做任何的代码复核和修改, 都要运行单元测试;发现了BUG, 就要增加相应的测试 (因此XP方法不需要BUG数据库) 。除了单元测试之外, 还有整合测试, 功能测试、负荷测试和系统测试等。所有这些测试, 是XP开发过程中最重要的文档之一, 也是最终交付给用户的内容之一。

三、XP和设计原则与理念

(一) 强调客户参与和测试。

客户寻求一个XP开发小组 (Team) 启动一个项目。团队成员要求客户在开发过程中与他们在一起。

项目的早期, 团队重点进行探索和发布计划;客户编写故事, 程序员对这些故事进行估算, 客户选择故事的开发顺序。然后, 则把重点放在编写代码上。团队反复的迭代工作:程序员编程的时候, 客户编写测试并回答程序的问题。如果情况变化了, 客户能及时地将变化情况通知XP团队并能成功地改变团队的方向。每隔两周提供一个可运行的迭代式的软件版本。由于测试的明显效果, 客户能够最快地了解项目的真实状态。

(二) 简单设计, Pair Programming, 测试驱动开发, 重整和优化。

XP程序员不但作为一个开发小组共同工作, 还以两个人为一个小开发单元编写同一个程序。开发人员们进行简单的设计, 编写单元测试后再编写符合测试要求的代码, 并在满足需求的前提下不断地优化设计。

1. 简单设计。

XP要求用最简单的办法实现每个小需求, 前提是按照这些简单设计开发出来的软件必须通过测试。这些设计只要能满足系统和客户在当下的需求就可以了, 不需要任何画蛇添足的设计, 而且所有这些设计都将在后续的开发过程中不断地重整和优化。

在XP中, 没有那种传统开发模式中一次性的、针对所有需求的总体设计。在XP中, 设计过程几乎一直贯穿着整个项目开发:从制订项目的计划, 到制订每个开发周期 (Iteration) 的计划, 到针对每个需求模块的简捷设计, 到设计的复核, 以及一直不间断的设计重整和优化。整个设计过程是个螺旋式的、不断前进和发展的过程。从这个角度看, XP是把设计做到了极致。

2. 测试驱动开发。

反馈是XP的四个基本的价值观之一———在软件开发中, 只有通过充分的测试才能获得充分的反馈。XP中提出的测试, 在其它软件开发方法中都可以见到, 比如功能测试、单元测试、系统测试和负荷测试等;与众不同的是, XP将测试结合到它独特的螺旋式增量型开发过程中, 测试随着项目的进展而不断积累。另外, 由于强调整个开发小组拥有代码, 测试也是由大家共同维护的。即, 任何人在往代码库中放程序 (Check In) 前, 都应该运行一遍所有的测试;任何人如果发现了一个BUG, 都应该立即为这个BUG增加一个测试, 而不是等待写那个程序的人来完成;任何人接手其他人的任务, 或者修改其他人的代码和设计, 改动完以后如果能通过所有测试, 就证明他的工作没有破坏原系统。这样, 测试才能真正起到帮助获得反馈的作用;而且, 通过不断的优先编写和累积, 测试应该可以基本覆盖全部的客户和开发需求, 因此开发人员和客户可以得到尽可能充足的反馈。

3. 重整和优化 (Refactoring) 。

XP强调简单的设计, 但简单的设计并不是没有设计的流水帐式的程序, 也不是没有结构、缺乏重用性的程序设计。开发人员虽然对每个USER STORY都进行简单设计, 但同时也在不断地对设计进行改进, 这个过程叫设计的重整和优化 (Refactoring) 。

四、结语

篇4:算法与程序设计教学初探

关键词:算法;程序设计;教学初探

中图分类号:G 434文献标识码:B文章编号:1673-8454(2007)11-0055-03

“算法与程序设计”是高中信息技术课程的选修模块之一。该模块旨在使学生进一步体验算法和程序设计在解决问题过程中的地位和作用。能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。[1] 但对于高中生来说,通常会有“学习本模块很难”的担心;对于老师来说,通常会有“学习本模块对逻辑思维有一定要求,学生又缺乏相应的知识背景,不好教”的看法。本文针对这些现象,谈谈本人在教学中的一些做法。

一、激发兴趣,树立信心

在教学工作中发现有这样的一种现象:很多学生表面上看对信息技术课非常感兴趣,特别希望到微机室上课,热情很高,但一到学习算法与程序设计这个模块时,却发现很难激发他们的兴趣,有的同学甚至觉得学习这个模块是一种负担,学习上也缺乏主动性,效果可想而知。分析其原因,我认为主要有三个方面:(1)很多同学之所以对计算机感兴趣,是因为他们热衷于上网、聊天、游戏等电脑娱乐方面,而对于算法与程序设计,他们认为要学好这个模块很困难,缺乏信心;(2)算法与程序设计本身比较枯燥、严谨,较难理解,学习本模块对逻辑思维有一定的要求,要求学生的注意力非常集中;(3)很多学生认为,学了这个模块也做不出什么有实际用途的程序来,所以渐渐对老师教授的内容失去了兴趣,学习也变成被老师牵着鼻子走。因此,如何激发学生的学习兴趣,帮助学生树立信心,使其顺利进入本模块的学习,是至关重要的。

首先,在开始学习该模块内容时,向他们展示前几届同学利用程序设计创作的一些经典作品以及在全省电脑作品大赛中获奖的作品,请他们试用,并就界面设计是否美观、功能设计是否合理等方面提出自己的看法,激发他们的求知欲,树立学习本模块的信心。在以后教学中,注意选择学生学习与生活中熟悉的实例作为学习活动的例子,使学生感到亲切,有利于学生顺利进入课程的学习。[2] 如数学、物理、生物等学科学习中的问题,日常生活中的实例。

其次,在教学中,对于学生比较难理解的知识,找一些学生生活中熟悉的例子进行类比,帮助学生理解。例如,交换两个变量值的问题。

老师提出问题:设整型变量A的值为5,B的值为6,如何交换它们的值?

学生:我不知道该怎么办,无从下手啊……

老师提示:如果有两个杯子,里面分别装了酱油和醋,请你把里面的东西对调,你会怎么办?

学生:找个空的容器呀!原来这么简单……

老师:要求用变量A、B、C来代表三个杯子,把操作的过程用VB语句表示出来。

经过这一类比,同学们毫不费力地就可以写出正确的代码。这样与生活的例子进行类比,不仅可以帮助学生理解算法,同时减少他们对算法设计的畏惧感,激发他们的学习兴趣。

第三,在教学中注意引导学生利用所学的知识去解决学习与生活中的一些实际的问题,使学生有一种成就感。例如,学校每年都要举行校园歌手大赛、中学生形象设计大赛等,这些比赛过程中都要统计选手的得分情况,以往学生都是用计算器来计算分数,人工找出一个最高分和一个最低分,去掉后再计算选手的最后得分,比较麻烦且易出错。

学了算法与程序设计后,我要求他们利用所学的知识设计一个程序去解决它,要求设计的程序能适用于评委人数不定的情况。这个问题的难度不是很大,学了选择和循环结构后就可以完成。

对于一些无法完成的同学,老师再稍加指点,能够完成的同学则引导他们怎么做得更好。试用后同学们都觉得有一种成就感,同时也改变了最初认为学习算法与程序设计无用的思想,进一步激发兴趣,树立信心。

这类问题可以由学生自己提出,也可以由老师提出,但要注意选择一些难度适中的问题或把一个大问题分解成几个部分,分别实现。问题太难,学生实现不了;问题太简单,没有挑战性,同学们会觉得没意思,也达不到目的。

二、实例感悟,螺旋学习

我校选用广东教育出版社《算法与程序设计》作为教材。书本首先介绍了计算机解决问题的过程、算法与程序等程序设计的基本概念,接着介绍数据类型、常量、变量、运算符、函数和表达式等概念,然后介绍语句和程序的三种结构。

在可视化编程的章节中,也是先介绍对象、属性、方法、事件等概念后,再介绍可视化编程的方法。这些概念对高中生来说都是比较抽象难懂的,学生要完全理解这些概念比较困难,若处理不好会使他们觉得这门课程很枯燥、难懂,打击他们学习这门课的积极性。

在教学中,我采用从介绍一个简单实例引入的方法,让学生先通过观察和动手做去感悟这些概念,然后再加以归纳总结。例如,在学习“VB可视化编程的概念”一节时,首先让同学们和我一起做如下操作:

(1)在当前窗体添加两个标签、两个文本框、三个命令按钮;

(2)按上表设置各对象的属性;

(3)分别双击三个命令按钮,输入代码(代码如下);

Private sub command1_click()

Const pi as single=3.14

Dim r as single,s as single

r=val(text1.text)

s=pi*r*r

Text2.text=s

End sub

Private sub command2_click()

Text1.text=””

Text2.text=””

End sub

Private sub command3_click()

End

End sub

通过前面章节的学习,同学们对“求半径为r的圆的面积”的程序代码都已很熟悉,这里只是增加了界面设计、对象属性设置,以及添加事件过程代码。同学们在操作的过程中很直观地就能感悟到什么是VB的对象、什么是对象的属性、如何在界面上添加对象、如何设置对象的属性、如何添加事件过程代码。在此基础上,老师再结合现实生活中同学们熟悉的实例和同学们一起归纳总结,阐明这些概念。

对于算法与程序设计中的一些概念,同学们可能一下无法完全理解,可以通过以后的每次教学活动让学生逐步加深理解并学会设计。例如,学生由于受常规习惯的影响,又没有经历编程的体验,对程序中的常量、变量、数据类型等概念的含义比较难理解,这时老师就是不断地重复讲解,效果也是不理想。本人在讲授这节内容时通过一些例子使学生对这些概念有初步的理解后,在以后的教学活动中都注意在每个程序实例中贯穿变量数据类型的定义分析,并让学生通过观察程序中的常量、变量的运行结果,比较常量、变量与数学概念的差异,掌握常量与变量的使用。此外,可以结合学生在以后学习中出现的错误加以引导,例如,有些同学一开始对数据类型中的整型变量、单精度变量、双精度变量的区别并不是完全理解,在学习循环结构时,老师要求编写程序“求d=1*2*3……*10的积”,很多同学会给出如下程序:

Dim i as integer

Dim d as integer

d=1

For i=1 to 10

d=d*i

Next i

Print d

以上程序好像没有错,但运行后发现并不能得出正确结果,而是出现“数据溢出”的提示,同学们百思不得其解,纷纷举手求助。这时我首先给他们解释“数据溢出”的含义及原因,然后与同学们一起寻找解决方法(只要将程序中变量d声明为单精度类型,问题就可以解决了),同时要求同学们将程序改成“求d=1*2*3……*100的积”,有些同学还会不加思索只把其中的“For i=1 to 10”改为“For i=1 to 100”,运行后又是“数据溢出”,但这次只有个别的同学举手求助,对这些同学,教师再适当加以提示直至问题解决。这样通过在学习新知识时再不断深化旧知识的螺旋式学习方式,慢慢地就掌握了前面一些较难理解的问题,学生的能力也在螺旋上升。

三、从模仿开始,加强实践

算法与程序设计是一门实践性很强的课程,实践练习是必不可少的环节。如何做好这个环节的教学也是十分关键的。

1. 模仿入手,逐步提高

学习某个知识点内容后,先设计一个与书本例子或老师讲解过的例子相类似的题目让学生去完成,在此基础上进行一些变化。例如,在学习“For……Next循环”时,教师举例分析“求S=1+2+3+……+100的值”后,请学生完成“求1到100之间的奇数和”。这一题目与老师分析的例子相似,只要将循环的步长改为2就可以实现,难度不大,多数同学很快就可以完成。接着要求同学们修改原程序,解决以下问题:

(1)输入n(n在100以内),求1到n之间的自然数和;

(2)求S=1+1/2+1/3+……+1/100的值;

(3)求S=1-1/2+1/3-……+1/99-1/100的值;

第(1)小题的变化在于将循环的终值改成用变量n来表示,需要在程序中增加一条定义变量n的语句和一条用inputbox()函数实现变量n的输入;第(2)小题变化在于要累加的项目变为“S=S+1/i”,同时要重新定义变量S的数据类型为单精度型;第(3)小题与第(2)小题相比变化在于每次被累加项的符号随着循环变量的变化而变化。通过这些变化,不仅帮助学生深刻理解“For……Next”语句,也训练了学生的综合应用能力。

2. 让学生进行一些“半成品”加工

信息技术课的练习大部分都是在课堂内完成,对于一些较难的题目,学生一时会无从下手,加上一些同学操作不是很熟练,结果无法完成任务。因此,教师在设计练习时要估计好学生能完成的情况,对于一些较难的题目,可以引导学生如何进行分析,如何入手,或由老师事先完成一部分,形成一个“半成品”,主要部分让学生去完成。

3. 设计多种形式的练习

练习的形式不能只有一种,应形式多样。在教学中设计多种形式的课内外活动,帮助学生理解程序,学习算法与程序设计。[3]可以采用以下几种形式的练习:

(1)分析问题,设计算法,画出流程图;

(2)给出问题算法分析与部分流程图,补充完善流程图与程序;

(3)阅读程序,写出程序运行结果,说明程序的功能,上机实践,理解程序;

(4)改正算法或程序中的错误,并上机调试。

参考文献:

[1] 中华人民共和国教育部.普通高中技术课程标准(实验)[M]. 北京:人民教育出版社,2003,(10).

[2]广东基础教育课程资源研究开发中心信息技术教材编写组.算法与程序设计教师教学用书[M].广州:广东教育出版社,2006,(12).

篇5:算法与程序设计教学反思

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<30000,还有学生写S<30000,我就很恼火了。语气也不再平淡,心里也暗骂他们笨还不愿意听讲。这与我之前想要努力做到的完全不符。之前我说的最多的一句是:听明白没有?还不清楚的话我再讲一遍。讲完再问同样的话:听明白没有,没有的话我再讲。再讲完还不明白?那我再讲一遍。直到他们很“无奈地”认真听一遍,弄明白,省得我“这么烦”。

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

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

第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语句时,由于是刚过年不久,个人想到了一个有关年货打折的案例,要求学生参考教材上的程序代码进行改写。在最近的复习课上,学生仍然对这个案例记得很清晰。再如上文所提到的“走楼梯”的算法、“韩信分油” 的算

篇6:算法与程序设计教案

一、教学目标

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

篇7:程序设计与算法语言课程设计题目

理学院数学系所开设的程序设计与算法语言课程设计是教学实践环节中一项重要内容,进行此课程设计的旨在:

1.提高和加强学生的计算机应用与软件开发能力,使学生由初学者向专业的程序员过渡。

2.培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。

3.学习和掌握C或C++程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础。

本次课程设计是以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,作出设计报告。

具体安排如下:

采用C或C++进行程序设计,设计以下系统,任意选一个题目。1.职工信息管理

职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,系统以菜单方式工作,使之能提供以下功能:  职工信息录入功能(职工信息用文件保存) 职工信息浏览功能

 查询和排序功能:按工资查询和按学历查询或按年龄等查询  职工信息删除、修改功能  统计功能 2.图书管理

图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,系统以菜单方式工作,使之能提供以下功能:  图书信息录入功能(图书信息用文件保存) 图书信息浏览功能

 查询和排序功能,按书名查询和按作者名查询或价格等查询  图书信息的删除与修改  统计功能 3.学生成绩管理

 数据输入:如果没有数据文件,从键盘输入学生数据(包括学生的学号、姓名、性别、年龄及五门功课的成绩),并保存到磁盘文件“*.txt”。如果有数据文件,则可向该文件写数据。

 数据查询:根据姓名或学号,查找相应学生的信息并在屏幕上显示。 修改数据:修改某名学生的某门课的成绩(注意修改的权限)。 统计数据:按学号升序显示全部学生的信息;

 按平均分降序打印全部学生的信息,并保存到磁盘文件“.txt”;  统计不及格课程学生的信息。 对上题的学生数据原型为:

99101

李强

99102

王丽

...........................4.作一个背单词的小程序

设计一背单词的小程序,程序以菜单方式工作,字典使用文本文件存放就可以了。使之能提供以下功能:  添加新词

 支持顺序测验和随即测验  记录没背过的词

 查找单词的汉语或英语意思(输入中文查对应的英语意思,输入英文查对应汉语意思)

5.宾馆客房管理

宾馆的客房信息包括客房号、客房类型、客房价格、空闲情况、客人姓名、客人身份证号、入住时间、退房时间,预付费用等信息。试设计一宾馆客房管理系统统,系统以菜单方式工作,使之能提供以下功能:  客房信息的录入功能  客人入住登记  客人退房结算

 客房信息浏览功能,浏览全部客房的信息

 客房信息查询:查询空房间情况、按姓名或房间号查询  客房信息的删除、修改功能 6.电脑报价

电脑各部件的信息包括:部件名、价格、分类号、型号,厂商、报价时间等。试设计一电脑报价系统,系统以菜单方式工作,使之能提供以下功能:  添加电脑各部件的信息功能(用文件保存) 查询功能,按类型、价格等查询  生成报价单

 电脑各部件的信息的删除与修改 7.工资管理

一高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。现要求编写程序来完成如下功能:

 职工工资的输入

 职工工资的删除和修改  查询和统计功能  输出显示。

其中工资的基本构成如下:

教师:基本工资(1000)+课时费(月工作量—24)X30; 实验员:基本工资(800)+实验室补助(150); 行政人员:基本工资(900)+行政补贴(250); 教师兼职实验员:基本工资(1000)+课时费[(月工作量—12)X30]+实验室补助(150); 行政人员兼职教师:基本工资(900)+行政补贴(210)+课时费(月工作量X30); 8.学生通讯系统

学生通信录信息包括:姓名、学号、年龄、性别、家庭住址、联系电话、寝室号等信息。现要求编写程序来完成如下功能:

 学生通信录信息的输入

 学生的通信录信息删除和修改  学生的通信录信息查询和统计功能  学生的通信录信息输出显示。9.模拟物体的自由落体

内容:模拟一个物体的自由落体过程。从“高空”释放一个物体,它在下降的过程中速度会越来越快,落地反弹后在上升的过程中它的速度会越来越慢。要求:联系判断和循环语句的使用,延迟函数的使用。

10.大整数阶乘新思路

内容:实现一个计算大整数阶乘的程序。通常使用递归来计算一个整数的阶乘。但是,应为计算本身能够表示的最大整数是有限的。所以能够计算的阶乘整数要受到限制。本程序用数组来存储足够大的数组就能计算任意大的整数。要求:巧用算数运算符和数组实现大整数的阶乘计算。

11.多样的立方体

在DOS环境下用C语言中的图像函数制作一系列立方体图,从一系列变化的立方体中抽选出几个,并且立方体的大小和位置在不断的变化,然后做了一系列正面不同填充的变化。要求:使用循环语句和制图函数。

12.简易时钟 内容:在DOS环境下用C语言中的图形函数制作一个简易时钟,这个时钟由圆和直线构成,时钟所取时间为系统的当前时间,并且每个1秒刷新一次图像。要求:使用宏定义、循环语句和制图函数。13.用柱状图表示学生成几个分段比率

内容:随机生成N个学生的成绩,并且计算每个分数段学生的人数,然后使用柱状图在屏幕上显示学生成绩的分布情况。要求:使用循环语句和制图函数。

14、简单图形处理系统

设某图形处理程序只考虑点、直线、圆三种基本图形。对于点,给出点的横纵坐标;对于直线,给出直线方程ax+by+c=0的三个系数a,b,c;对于圆,给出圆心坐标和半径。试说明图形的几何形状类型,并编写输入和输出图形数据、求两点矩离、求两直线交点、已知点和半径形成圆、已知两点形成直线等函数。

15、模拟时钟转动程序

要求: 能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。

16、皇后问题

在国际象棋中,能否在空棋盘上摆放八个皇后,并使其中任意两个皇后不能在同一行或同一列或同一对角线上,并编写完整的摆放八皇后问题的程序。要求:第一个皇后的起始位置由键盘输入,国际象棋的棋盘为8*8的方格。

17.红旗图案的制作

内容:在DOS环境下用C语言中的图形函数制作一个红旗。关键点是模拟出红旗的波浪形状。

要求:使用宏定义、循环语句和制图函数。

18、双向链表的排序

要求:输入一个双向链表,显示些双向链表并对此双向链表排序

19、学生籍贯信息记录簿

编制一个学生籍贯信息记录簿,每个学生信息包括:学号、姓名、籍贯。具体功能:

(1)创建信息链表并以磁盘文件保存;

(2)读取磁盘文件并显示输出所有学生的籍贯信息;

(3)按学号或姓名查询其籍贯;

(4)按籍贯查询并输出该籍贯的所有学生;(5)能添加、删除和修改学生的籍贯信息;

(6)显示输出四川籍和非四川籍学生的信息并可分别存盘。20、学生选修课程系统设计

假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能: 系统以菜单方式工作? 课程信息录入功能(课程信息用文件保存)--输入? 课程信息浏览功能--输出? 查询功能:(至少一种查询方式)--算法? 按学分查询? 按课程性质查询? 学生选修课程(可选项)? 21.设计一个简单计算器

要求: 在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。

22、编写一万年历系统

要求: 模仿现实生活中的挂历.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).当系统日期变到下一月时,系统自动翻页到下一月

23、成绩排序

假设某年级有4个班,每班有45名同学。本学期有5门课程考试,每门课程成绩是百分制。假定每个同学的成绩记录包含:学号、姓名各门课程的成绩共7项,其中学号是一个10位的字符串,每个学生都有唯一的学号,并且这4个班的成绩分别放在4个数组中,完成以下操作要求:

⑴ 编写一个成绩生成函数,使用随机数方法,利用随机函数生成学生的各门课程的成绩(每门课程的成绩都是0∽100之间的整数),通过调用该函数生成全部学生的成绩;

⑵ 编写一个平均成绩计算函数,计算每个同学的平均成绩并保存在成绩数组中; ⑶ 用冒泡排序法对4个班的成绩按每个同学的平均成绩的以非递增方式 进行班内排序;

⑷ 用选择排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进行班内排序;

⑸ 对已按平均成绩排好序的4个班的同学的构造一个所有按平均成绩的以非递增方式排列的新的单链表;

⑹ 设计一个菜单,至少具有上述操作要求的基本功能。

24、航班信息管理 问题描述:

飞机航班系统的数据包括两部分:

① 航班信息:航班号、最大载客数、起飞地点、起飞时间、降落地点、降落时间,单价;

② 乘客信息:航班号、身份证号码、姓名、性别、出生年月、座位号。乘客订票的主要方式是:乘客提出航班号、起飞地点、起飞时间、降落地点、订票数等订票要求,根据事先保存的航班数据决定乘客能否订票?只有全部满足了乘客的订票要求并且所订航班有足够的未订座位之后才能完成订票处理,并且修改该航班的未订座位数(每个航班的未订座位数的初始值就是该航班的最大载客数);否则,订票失败,并且给出不能订票的原因。

要求将航班数据保存在数据文件中,在处理时按航班的起飞地点建立不同的链表。

功能要求 :

⑴ 增加航班记录。将新的航班记录增加到原有的航班数据文件中。在进行处理时必须检查所要增加的航班记录是否存在,如果已经存在,应给出提示信息后停止增加;

⑵ 航班取消。如果某次航班的乘客数太少(已订票的少于本次航班最大载客数的10%),将取消该航班,但该航班的记录仍然保存在原有的航班数据文件中; ⑶ 航班查询。应该有以下几种基本的查询方式:按航班号、按起飞地点和起飞时间、按降落地点,按起飞地点和降落地点;

⑷ 航班订票。按上述问题描述中的乘客订票方式完成航班订票处理。⑸ 设计一个菜单,至少具有上述操作要求的基本功能。

25、猴子摘桃子 问题描述:

五只猴子一起摘了一堆桃子,因为太累,五只猴子决定先睡一觉再分。不久,其中一只猴子醒来了,它见别的猴子没有醒来,便将一堆桃子平均分成 5 份,结果多了一个,就将多的这个吃了,拿走其中的一份并离开。又不久,第二只猴子醒来了,它不知道有一个同伴已经拿走过桃子,便又将剩下的桃子平均分成 5 份,发现也多了一个,同样吃了这一个,拿走其中的一份。如此类推第3只,第4只,第5 只猴子都是这样分、吃、拿走。问这5只猴子至少摘了多少个桃子? 根据上述描述,编制程序解决问题。

26、运动会管理系统 问题描述:

校际运动会管理系统。设有n个学校参加校际运动会,共有男子竞赛项目数m,女子竞赛项目数w。每个学校可以参加所有竞赛项目,也可以只参加部分竞赛项目,每个学校对每个项目的参赛运动员不能超过4人,每个运动员最多只能参加3项单项比赛,团体赛不受限制。

各项目名次取法有如下几种:用户自定义:(各名次权值由用户指定)

① 参赛人数超过6人,取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1;

②参赛人数不超过6人,取前3名:第1名得分 5,第2名得分 3,第3名得分2;

③ 团体项目的名次取法和上面相同,但分数加倍。功能要求 :

⑴ 运动员报名登记,以学校为单位进行运动员报名登记,登记的限制要求按问题描述的要求;

⑵ 参赛信息查询,查看参赛学校信息和比赛项目信息; ⑶ 竞赛检录,每项比赛开始前完成参赛运动员的检录; ⑷ 竞赛成绩登记,填写比赛名次,然后根据竞赛检录的运动员人数和上述的记分方式自动完成各学校的成绩登记并实时生成各学校的团体总分;

⑸ 比赛成绩查询,可以按竞赛项目、参赛学校、参赛运动员查看比赛成绩; ⑹ 竞赛成绩排序,以学校为单位,按总成绩的高低,分别排序输出每个学校的总成绩、男子总成绩、女子总成绩;

⑺ 设计一个菜单,至少具有上述操作要求的基本功能。

27、集合运算

设有两个用单链表表示的集合A、B,其元素类型是int且以非递减方式存储,其头结点分别为a、b。要求下面各问题中的结果集合同样以非递减方式存储,结果集合不影响原集合。实现要求:

⑴ 编写集合元素测试函数IN_SET,如果元素已经在集合中返回0,否则返回1; ⑵ 编写集合元素输入并插入到单链表中的函数INSERT_SET,保证所输入的集合中的元素是唯一且以非递减方式存储在单链表中;

⑶ 编写集合元素输出函数,对建立的集合链表按非递增方式输出; ⑷ 编写求集合A、B的交C=A∩B的函数,并输出集合C的元素; ⑸ 编写求集合A、B的并D=A∪B的函数,并输出集合D的元素;

⑹ 求集合A与B的对称差E=(A-B)∪(B-A)的函数,并输出集合D的元素; ⑺ 设计一个菜单,具有输入集合元素、求集合A、B的交C、求集合A、B的并D、求集合A与B的对称差E、退出等基本的功能。

篇8:通用升级程序设计与实现

1.1 安全性

安全性分为两个部分, 即服务端安全性和客户安全性。服务端安全性主要由服务主机安全性决定, 由于服务主机将存放原始版数据, 因此必须确保本类数据不被窃取。

客户端安全主要防止同一许可证多用及泄露情况。对于同一许可证, 为了防止多用户采用, 升级服务程序将采用一次一密的服务方式, 即本次升级时将下次升级密钥进行约定, 保证每个密钥只能使用一次。

为了防止泄露情况, 对每个客户端发送的数据将进行处理, 即在数据部分采用对无关数据进行水印方式, 有效保证每个客户端所获得的数据功能上无差异, 但可以根据最后生成的样本等进行有效的区分。

1.2 分离性

分离性主要分为两部分, 即不同产品的分离以及不同用户等级的分离。不同产品的分离将通过对不同的目录进行区分来实现, 即用户将首先进行验证, 验证成功后, 升级程序根据数据库保存内容, 对相应的目录进行处理, 与用户通讯并分离。

不同用户等级的分离原理类似不同产品的分离, 有着不同等级的用户可以针对不同目录进行区分。

1.3 通用性

通用性主要指升级服务程序可以对所有产品进行升级服务。这部分功能将由具体设计进行保证, 使之适用于所有情况的升级服务。

2 升级程序的设计

2.1 服务器端工作流程

(1) 服务器护进程监听8167端口。

(2) 有用户连接时, 创建线程进行处理。

(3) 进行身份验证, 查询数据库与用户提供密码是否一致。

(4) 通过验证后, 生成一个新密码, 更新数据库并发送给用户 (*) 。

(5) 确认用户产品和身份, 寻找对应的目录。

(6) 确认用户更新日期。

(7) 遍历目录下所有的文件, 依次发送文件名 (*) 。

(8) 用户确认是否存在此文件, 如否, 转 (11) (*) 。

(9) 发送此文件MD5, 用户确认是否一致, 如否, 转 (11) (*) 。

(10) 转 (7) 。

(11) 发送此文件内容 (*) 。

(12) 转 (7) 直至文件更新结束。

(13) 更新数据库中用户相关信息。

其中, 所有带 (*) 号的步骤均为DES加密传送数据。

2.2 管理程序的设计

管理程序主要负责进行客户数据管理及日志查询、回溯等功能。

(1) 日志查询。

查询当日日志, 本周日志, 本月日志。查询用户登陆情况。查询指定用户名的更新情况。可以查询指定产品更新情况。

(2) 用户管理。

进行用户添加、删除、修改管理。手工重置用户的密码。

(3) 产品管理。

对产品进行添加、删除、发布时间修改等管理。指定产品对应的目录。

3 升级程序的实现

3.1 服务器端的实现

服务器端启用WSAAsyncSelect模型对客户端的请求进行相关响应, 接收FD_ACCEPT连接通知, 代码如下:

接收到客户端请求, 开启FD_READ, FD_WRITE, 客户端传送数据过来时, 接收到FD_READ通知, 开启线程ThreadProc, 与客户端进行数据验证及交互。

3.1.1 版本比较

为了确实软件产品是否需要更新, 服务器端需要接收客户端发送的升级信息。本程序将系统当前版本的信息以一定的格式写入文件, 存放于升级服务器中。同时客户端也存在相同类型的文件以记录客户端的版本信息。当客户端连接到升级服务器以后, 首先将客户端升级信息发送到服务器端, 与服务器端的版本信息进行比较, 然后分析出当前版本是否需要升级。

3.1.2 数据传输的安全性

为了保证服务器端相关程序不被窃取, 本程序采用了一次一密的加密方式, 即当用户第一次更新时, 会发送公司指定的用户名密码至服务器, 此时客户端程序同时会获取用户所用机器的硬件数据 (机器特征值) , 发送到服务器端。用户再次需要升级时, 会验证用户名密码以及机器的特征是否正确后才能完成升级服务。每次用户提交给服务器的验证结构体如下定义:

对于文件数据的传输, 为避免数据泄露, 均在客户采用DES加密后进行传送, 服务器端收到数据解密后写文件。

3.1.3 获取更新文件列表

客户端将产品路径中的文件中各文件信息发送到客户端, 每个文件的结构体定义如下:

md5hash变量取文件的md5值, 客户端产品路径中的各文件的路径及md5值与服务器端的此结构体数组进行比较, 由于相同的文件具有相同的md5值, 得出需要更新的文件信息。

3.2 客户端的实现

客户端是独立于产品的工具, 默认设置为开机自动运行的, 也可以进行手动升级。如服务器开启, 客户端连接升级服务器, 并将升级服务器的版本文件与本机的版本文件相比较, 若有新版本, 则将服务器传送的文件下载到本地临时目录下, 再进行升级安装。如果不需要升级, 则提示后自行退出。升级服务器支持端点续传功能, 在客户端下载时, 将下载文件和服务器端的文件进行大小比较, 对余下的数据进行传送。

摘要:在阐述了软件在线自动升级的功能特点的基础上, 详细地介绍了通用升级程序的设计以及实现原理。该系统采用了I/O网络模型以及加密技术, 能够自动、及时、准确地对客户使用产品进行稳定的升级。

关键词:自动升级,多线程,I/O模型

参考文献

[1]刘伟, 耿英三.软件自动升级系统的研制与开发[J].计算机工程与应用, 2002, (15) .

上一篇:美国签证拒签的主要原因是什么下一篇:关于动物园野趣作文400字