算法与程序·程序框图

2024-08-05

算法与程序·程序框图(精选十篇)

算法与程序·程序框图 篇1

一、明确教学目标

新课标指出:“算法部分旨在使学生进一步体验算法思想,了解算法在解决问题过程中的地位和作用,并能从简单问题出发,设计解决问题的算法。”递归算法的教学目标是学会用递归算法的思想分析问题。为了实现该目标,很多教师从递归函数代码的理解出发带领学生学习递归算法,而代码的反复调用很容易给学生理解造成困难。笔者认为指导学生利用递归思想来分析问题是最重要的,理解了递归思想以后,代码的编写就变得相对容易了。

二、学生知识准备

所有的知识都不是空中楼阁,必须有一定的前期知识准备。学生开始学习递归算法前应该已经熟练掌握了顺序结构、分支结构、循环结构,对程序设计语言有了一定的了解,能解决一些有一定难度的程序,有一定的分析问题的能力。而且,学生应该已经掌握了自定义函数,包括函数名、函数参数、函数参数之间的传递等知识。

三、理解递归过程

兴趣是最好的老师,越难理解的知识点越需要抓住学生的兴趣点。对于递归算法的学习,我们可以先让学生玩“汉诺塔”游戏。让他们把塔盘从少到多慢慢增加,一边玩一边总结游戏攻略。通过老师的引导及动画课件,学生应该可以总结出“N个塔盘从A移动到C”的问题可以转换成三个小问题:1.把N-1个塔盘从A移动到B;2.把第N个塔盘从A移动到C;3.把N-1个塔盘从B移动到C。教师只要适时地加以总结:“要想解决复杂问题,可以先把复杂问题转化成简单问题,把问题化解到最小,简单问题解决了,那复杂问题也随之解决。”并给出递归算法的概念:“直接或间接调用本身的算法”,以及递归算法的核心思想:递归分为两个部分,一是递推:大事化小;二是回归:由小及大。当然,教师也可以用“从前有座山”这个大家耳熟能详的故事加以补充说明。

四、把握分析思路

在学生初步了解递归思想后,教师不应急着进入代码的讲解,可以引导学生用递归思想来分析问题,从简单到复杂,从具体到一般。可以从分析求5!开始,分析并总结出求N!的方法。在讲解的过程中,教师可以借助黑板来板书分析思路。(如图)

当分析完5!的求解过程以后,教师可以让学生分析讨论出数学模型,其中包括:递归公式和边界条件

这是一个典型的双分支选择结构语句,可以用IF语句来实现。

五、结合分析完成代码

在学生分析透彻以后,可以让学生试着根据以往的函数知识完成代码的编写。这时可以利用“半成品”的形式,主要是让学生填写递归函数的主体(判断语句)。然后,教师结合代码再次说出递归的过程,学生的印象就很深刻了。这里学生可能会在两个地方出错:1.写成fac (n)=fac (n-1)*n,解释:函数的调用只能在表达式中,而等号是赋值语句,左边只能是变量而不能是表达式。2.函数数据类型和接受返回值的变量数据类型不符,解释:赋值语句等号左右两边数据类型必须相同。

六、适时巩固知识

N!数学模型讨论出以后,学生和教师一起经历了问题分析的过程。这时教师可以适当小结递归概念、递归核心思想、递归边界条件,来帮助学生巩固所学知识。

然后,学生可以用斐波那契数列来进行练习。之所以用斐波那契数列来练习,是因为这个数列学生能很快找到规律,但又因为有两处调用,有一定的难度提高。

当然还是采用从具体到一般的方法,先在学案上分析第5项的数的求法,同时请两位学生到黑板上来分析。再根据分析讨论出递归公式和边界条件(右图为笔者上课时学生书写的学案)。对这道题目的板书分析,以后在总结递归的缺点(重复调用)时也是可以利用的。

七、适当提高应用

在信息技术学科中,学生的能力存在较大差异。而递归算法又在理解上有一定的难度,自然学生达到学习目标的情况也会有所差异。英国现代教育学家沛·西能在《教育原理》中说:“一切教育努力的根本目的应该是帮助学生尽可能达到最高的个人发展。”所以,分层教学在信息技术中会经常运用到。本课内容可以采用难度稍高一点的递归题目作为提高题。笔者在教学的时候采用的是小球自由落体作为分层教学中的提高部分,同时采用小组讨论的形式完成该题的分析。有些教师会让学生编写“汉诺塔”程序,笔者觉得难度太大,会把学生难住,造成学生产生排斥心理。

总之,递归法的教学重点必须落在“算法”上而不是“代码”上。只要学生会用递归算法分析问题,那递归算法的代码就很容易写出来。而只有当学生会用算法的思想分析问题,他们才能真正地体验到算法的魅力,进而爱上《算法与程序设计》这门课。

参考文献

[1]算法与程序设计.教育科学出版社.

高二数学算法与程序框图教学计划的 篇2

教学要求:掌握程序框图的概念;

会用通用的图形符号表示算法,掌握算法的三个基本逻辑结构.

掌握画程序框图的基本规则,能正确画出程序框图.

通过模仿、操作、探索,经历通过设计程序框图表达解决问题的过程;

学会灵活、正确地画程序框图.

教学重点:程序框图的基本概念、基本图形符号和3种基本逻辑结构.

教学难点:综合运用框图知识正确地画出程序框图

教学过程:

一、复习准备:

1. 写出算法:给定一个正整数n,判定n是否偶数.

2. 用二分法设计一个求方程的近似根的算法.

二、讲授新课:

1. 教学程序框图的认识:

① 讨论:如何形象直观的表示算法? →图形方法.

教师给出一个流程图(上面1题),学生说说理解的算法步骤.

② 定义程序框图:程序框图又称流程图,是一种用规定的图形、指向线及文字说明来准确、直观地表示算法的图形.

③基本的程序框和它们各自表示的功能:

程序框

名称

功能

终端框

(起止框)

表示一个算法的`起始和结束

输入、输出框

表示一个算法输入和输出的信息

处理(执行)框

赋值、计算

判断框

判断一个条件是否成立

流程线

连接程序框

④ 阅读教材P5的程序框图. → 讨论:输入35后,框图的运行流程,讨论:最大的I值.

2. 教学算法的基本逻辑结构:

① 讨论:P5的程序框图,感觉上可以如何大致分块?流程再现出一些什么结构特征?

→ 教师指出:顺序结构、条件结构、循环结构.

② 试用一般的框图表示三种逻辑结构.

③ 出示例3:已知一个三角形的三边分别为4,5,6,利用海伦公式设计一个算法,求出它的面积,并画出算法的程序框图. (学生用自然语言表示算法→师生共写程序框图→讨论:结构特征)

④ 出示例4:任意给定3个正实数,设计一个算法,判断分别以这3个数为三边边长的三角形是否存在.画出这个算法的程序框图. (学生分析算法→写出程序框图→试验结果→讨论结构)

⑤ 出示例5:设计一个计算1+2+3+...+1000的值的算法,并画出程序框图.

(学生分析算法→写出程序框图→给出另一种循环结构的框图→对比两种循环结构)

3. 小结:

程序框图的基本知识;三种基本逻辑结构;画程序框图要注意:流程线的前头;判断框后边的流程线应根据情况标注“是”或“否”;循环结构中要设计合理的计数或累加变量等.

三、巩固练习:

练习:把复习准备题②的算法写成框图.

四、课后作业

第37讲 算法与程序框图 篇3

本讲考试的重点在三种基本逻辑结构,而循环结构则是重中之重.算法初步的考纲要求和它在教材中的地位,决定了只能在小题中考查它,而且考查的重点是循环结构,有时也有条件结构.以循环结构为载体,可以结合数列、函数、概率与统计等进行综合命题.考试说明中要求的第一条就是“对数学基本知识的考查,既全面又突出重点,注重学科的内在联系和知识的综合”.算法的含义、算法的思想不需要单独命题考查,以框图为载体,里面就承载了算法的含义和算法的思想.

命题特点

算法和程序框图的核心是程序框图是三种基本逻辑结构,它与其他知识,如函数、方程、不等式、数列等有密切的联系,应用非常广泛.

从最近几年各省份的高考信息统计可以看出,命题会呈现出以下特点:

1.考查题型以选择、填空题为主,分值约点5分左右,基本属于容易题.

2.重点考查程序框图的应用和基本算法语句,如条件结构、循环结构,以及它们相对应的基本算法语句,注重程序框图和基本算法语句的应用及判别.

3.预计本讲在今后的高考中仍将在程序框图和算法语句处命题,且更加注重考查学生的识图能力、分析问题和解决问题的能力.

1. 考查基本的逻辑结构

例1 (1)阅读下图(1)所示的程序框图,运行相应的程序,输出的结果是 ( )

[①][②]

A.[3] B.[11] C.[38] D.[123]

(2)已知函数[y=log2x,2-x,x≥2,x<2,]如图(2)表示的是给定[x]的值,求其对应的函数值[y]的程序框图.

①处应填写________;②处应填写________.

解析 (1)[a=1<10],[a=12+2=3<10],

[a=32+2=11>10]. 故输出结果为[11].

(2)由框图可知只要满足①中的条件则对应的函数解析式为[y=2-x],故此处应填写[x<2],则②处应填写[y=log2x].

答案 (1)B (2)①[x<2?] ②[y=log2x]

点拨 对于循环结构,依次写出每一次运行的过程,对照判断框的输出条件,一般能得到正确结果;对于条件结构,写出分段函数即可.解决问题的关键在于正确识别框图表示的逻辑结构,针对不同的逻辑结构,制定相应的解题策略.

2. 考查程序框图的识别及应用

例2 如图是求[x1,x2,…,x10]的乘积[S]的程序框图,图中空白框中应填入的内容为 ( )

A.[S=S?n+1] B.[S=S?xn+1]

C.[S=S?n] D.[S=S?xn]

解析 由题意可知,输出的是10个数的乘积,故循环体应为[S=S*xn],所以选D.

答案 D

点拨 对于程序框图中某一步语句的确定问题,涉及到的多为判断框与直行框语句的填写,需要仔细分析每一步运行的过程与输出结果.若要确定判断框语句,通常要写出每一次运行的过程,结合输出结果,就能得到正确答案;若要确定执行框语句,通常要根据输出结果分析出数列的递推关系.

3. 考查其它知识时融入算法与程序框图

例3 某篮球队6名主力队员在最近三场比赛中投进的三分球个数如下表所示:

[队员[i]\&1\&2\&3\&4\&5\&6\&三分球个数\&[a1]\&[a2]\&[a3]\&[a4]\&[a5]\&[a6]\&]

如图是统计该6名队员在最近三场比赛中投进的三分球总数的程序框图,则图中判断框应填______,输出的[S=]______.

解析 由题意可知,程序框图是要统计6名队员投进的三分球的总数,由程序框图的循环逻辑知识可知,判断框应填[i<7?]或[i≤6?],输出的结果就是6名队员投进的三分球的总数,而6名队员投进的三分球数分别为[a1,a2,a3,a4,a5,a6],故输出的[S=a1+a2+a3+a4+a5+a6].

答案 [i<7?i≤6?] [a1+a2+a3+a4+a5+a6].

点拨 算法问题与各个数学分支都可以很好地结合,可以侧重考查算法问题,亦可以重点考查其它数学知识.算法问题与其它数学分支结合时,若程序框图实际上是其它知识的另类呈现方式,重点考查的是其它知识,则要通过分析确定程序框图所反应的情境及意图.

备考指南

1. 本讲主要考查算法的含义和程序框图的理解和应用.

2. 本部分在高考题中以选择、填空为主,属于中档题.(1)解决实际生活问题时,首先要认真分析,联系解决此类问题的数学方法,综合考虑此类问题中可能涉及的问题,明确选择合适的算法逻辑结构来画出程序框图.(2)在算法中,遇到不同形式的选择问题,需要考虑利用条件结构,对式子呈现一定规律且计算项较多时,需要考虑利用循环结构,要注意第一次循环和最后一次循环的结果,以免多算或漏算.

限时训练

1. 阅读右边的程序框图,若输入[N=100],则输出的结果为 ( )

A.[50] B.[1012]

C. [51] D.[1032]

2. 给出如图的程序框图,若输出的结果[y>1],则输入的[x]的取值范围是 ( )

A.[(-1,1)] B.[-1,+∞]

C.[-∞,-2?1,+∞] D.[-∞,0?1,+∞]

3. 某程序框图如图所示,则该程序运行后的输出结果是 ( )

A.[1112] B.[16] C.[34] D.[2524]

4. 某程序框图如图所示,该程序运行后输出[S]的值是 ( )

A.[10] B.[12] C.[100] D.[102]

5. 如图,运行该程序框图后输出的[S]值为 ( )

A.[66] B.[55] C.[11] D.[10]

6. 执行如图所示的程序框图,若输出的结果为[63],则判断框中应填 ( )

A. [n≤7?] B. [n>7?]

C. [n≤6?] D. [n>6?]

7. 执行如图所示的程序框图,输出的[S]值为 ( )

A. [2] B. [4] C. [8] D. [16]

8. 如图所示,程序框图(算法流程图)的输出结果是 ( )

A. [3] B. [4] C. [5] D. [8]

9. 阅读右边的程序框图,运行相应的程序,当输入[x]的值为[-25]时,输出[x]的值为 ( )

A. [-1] B. [1] C. [3] D. [9]

10. 执行如图所示的程序框图,则输出的[S]的值是 ( )

A. [-1] B. [23] C. [32] D. [4]

11. 如图程序框图,其作用是输入[x]的值,输出相应的[y]值,若要使输入的[x]值与输出的[y]值相等, 则这样的[x]值有______ 个.

12. 若某程序框图如图所示,则该程序运行后输出的值是____.

13.若框图所给的程序运行结果为[S=90],那么判断框中应填入的关于[k]的条件是____________.

14. 如果执行如图所示的程序框图,输入[x=-1,n=3.]求输出结果.

15. 若某程序框图如图所示,求该程序运行后输出的值.

16. 阅读如图所示的程序框图,求输出结果.

17. 执行如图所示的程序框图,若输入[n]的值为[8],求输出结果.

算法与程序·程序框图 篇4

一、当前的困惑

针对“算法与程序设计”模块教学现状, 笔者通过问卷调查、座谈等多种方式了解该模块开设率偏低的原因。同时查阅专业数据库, 综合全国其他教师的观点, 归纳出了当前开展“算法”模块教学存在的主要困难。

从学生角度来看, 开展“算法”模块教学主要有以下困难:1) 学习心理上有障碍, 学习内容实用性不强。教材上的案例多为数学问题, 一类为一眼就能看出答案的问题, 对这类例题学生产生的疑问是:“这么简单的问题为什么要这么麻烦, 要计算机来解决。”另一类是数学课上怎么都弄不明白的问题, 信息技术教师又在不停地重复着这些难题。2) 理论课枯燥, 没有联系实际生活, 趣味性不强, 难于激发学习兴趣。3) 没时间做作业, 头脑中的知识衔接出现断点[2]。

从教师角度来看, 开展“算法”模块教学的困难主要体现在以下几点:1) 难以激发学生学习程序设计的兴趣。教师大多采用传统的先讲后演示、学生先听后编程的教学方式。学生在听或者看的过程中往往注意力难以集中, 到实践编程时自然就无从下手。2) 基础知识与理论内容多, 不讲学生不明白, 讲多了学生没有耐心听。3) 课时少, 内容多, 课时安排时间间隔长, 遗忘率高。模块中包括大量的数据、语句、过程以及函数等基础知识, 需要教师详细地讲解, 学生在课堂上通过大量地训练才能熟练应用。讲解一个完整的算法往往需要一两节课时间, 而要让绝大多数的学生真正能自主编写, 甚至需要投入更多的时间, 要学生全面理解算法并学会编程难度偏大。

二、课程的核心价值

信息技术课程的发展经历了程序设计文化论、工具论、信息素养论等几个不同的阶段。社会发展与需求的变化推动信息技术日新月异地发展。作为信息技术学科的一线教师, 笔者也时常在想:“‘算法与程序设计’模块作为信息技术课程的一部分, 教学目标是什么?它的核心价值在哪里?究竟培养学生什么能力?能否挖掘一些该模块特有的东西?”

笔者结合多年的教学实践, 将本模块的教学目标定位于:打造程序设计文化, 培养计算思维以及算法思维。一线教师应站在更高的角度去审视课程, 不仅要教会学生编程及其他技巧, 还要通过编程将计算思维、算法思维等渗透于教学中, 充实和完善信息技术学科的价值。

信息技术, 尤其是程序设计, 在人类文化中占有一席之地。首先, 人类生存要运用工具, 特别是要运用工具来解决问题。计算机是大脑的延伸, 如何让人和计算机进行沟通, 就产生了计算机语言。而如何把人类的语言告诉计算机, 就产了程序设计语言, 也就是人们所说的程序设计文化。从最原始的计算的能力到人的自然思考方式, 再到机器语言、汇编语言、高级语言的出现, 以至现在的让计算机理解人们思想的自然语言, 程序设计语言的每一次发展都对人类产生了重大的影响。其次, 在工作生活与学习中, 很多时候解决问题需要有一种计算思维。比如有一首诗的内容为“白日依山尽, 黄河入海流。欲穷千里目, 更上一层楼”, 如果用计算思维的观点来看, 其实就是在六千多个汉字中选取20个汉字进行排列。六千多个汉字如果让计算机来排的话, 有很多种可能, 有些排列可能人类穷极一生都无法想到。但是诗人很容易地找出了20个汉字, 并且排列开来, 这就是诗人的一种灵性和智慧, 这是计算机所不具备的。这种情况下如何促进人与计算机的交流呢?这就需要人具备计算思维来告诉计算机该怎么做。最后, 人具备计算思维, 而如何用计算机的语言把它呈现出来, 就需要算法思想的指导。这种算法思想就是人的思维和计算机沟通的一种途径与方法。

三、教学策略及方法

1.深度挖掘课程思想

传统意义上对程序设计的理解是:用计算机编写程序解决问题, 经历分析问题、设计算法、编写程序、调试运行与检验结果等过程。在这种观念里, “程序”是低于“算法”的存在, 是具象的, 是由给定语言环境中的若干条代码组成的代码群。而“算法”则是高于“程序”的, 是相对抽象的。“算法”超越了具体语言, 是程序设计的灵魂, 因而更加贴近程序设计的本质。

但是, 学生对“算法”概念感觉生涩, 对“算法”的认知依然有许多困难。因为“算法”概念并不是最贴近学生生活经验的东西, 学生从生活经验中提取“算法”并将其迁移到真正的“算法”概念上来, 需要经历一个艰难的过程。显然, 基于“算法”概念走进程序设计, 不能算得上是一条令人满意的途径。

程序设计的本质是什么?程序设计无非是使用一组预设功能的指令集去完成特定的任务, 所谓的“一组预设功能的指令集”, 就是一套为了实现特定功能的人机对话, 而给出的一套人工语言。在“人机对话”这个意义上, “指令-程序-任务执行”更能彰显程序设计的本质, “算法”无非是建立在“指令-程序-任务执行”基础上并服务于具体任务的方法而已。需要注意的是, 这里的所谓“程序”已非前述“程序”, 前“程序”指的是一组代码, 此“程序”指的是解决问题的过程[3]。

或许教师要换一种思路开展程序设计的教学。在程序设计学习之初, 教师可以为学生提供一个需要解决的生活中的具体任务, 让学生分析解决该问题需要几步, 设计出解决问题的过程, 得到这个“程序”, 而后再引导学生提取其中的指令, 得到一组“指令集”。例如, 设计一个“抽签器”程序。教师提出问题之后, 首先分析设计程序界面, 有哪些对象, 需要哪些控件, 每个控件的功能是什么, 如何实现这些功能, 最终应用相应的代码来实现功能, 形成“指令集”, 整个过程完全没有涉及“算法”。

在此基础上, 教师可以让学生结合生活中的实例反复训练, 从而提高“指令集”的复杂程度。譬如先让学生在VB环境中进行问题解决, 分析需要经历哪些步骤, 其中的指令有哪些。并逐渐涉及分支、循环等结构, 得到功能逐渐强大的指令集。用这种方法学习到的“程序设计”, 是把握住通过人机对话实现问题解决的程序设计, 是将问题解决方法 (工具) 和问题解决过程融为一体的程序设计, 是面向贴近生活经验的问题解决的程序设计。

教师在开展“算法与程序设计”模块教学工作中, 遵循“提出问题-解决问题的过程-指令实现”这样一条线索, “解决问题的过程”即“程序”, 其中涵括算法。因而, “算法”变成位于“程序”之下的概念, 属于方法层面, 而“程序”在层次上则反超“算法”。这种教学策略不需要译码, 更贴近学生生活经验及学生的认知起点, 有利于启发学生的学习。

2.整合重组信息技术课堂

信息技术学科存在课时少、内容多、巩固难等实际困难。而《普通高中技术课程标准 (实验) 》中提出的“信息技术和数学课程内容的整合”为指导课堂教学提供了全新的理念。如, 人民教育出版社出版的高中《数学》第三册 (必修) 第一章“算法初步”介绍了算法与程序框图、基本算法语句以及算法案例等内容, 基本涵括了“算法与程序设计”模块中的程序设计基础知识。因此, 教师合理的做法是调整模块教学内容的次序, 将“可视化编程的概念与方法”移到模块最前面, 这样学生在学习初期就可以利用可视化编程动手解决一些小问题, 初步具备可视化编程的能力。当数学课堂完成“算法”教学内容之后, 教师再来讲述编程的基础知识, 自然就有事半功倍的效果。

在课时的安排方面, 目前大体有两种情况:一种为1周1课时的情况, 一个学年完成一个模块的教学工作;另一种为1周2课时, 一个学期完成一个模块的教学工作。不过, 绝大多数学校的2课时都是分开来排课的, 譬如星期二1节、星期五1节等。但是, 程序设计课作为实践性极强的一门课程, 1节课的时间既要学习新知识, 又要实践巩固它, 难以取得满意的效果。较好的做法就是两堂课连排, 共计80分钟, 教师大概用20多分钟精讲新知识, 剩下时间让学生动手编程实践, 深层理解, 巩固新知识, 避免出现知识衔接的断点。

针对各章节的基础知识及算法等精讲内容, 教师可以适度地开发一些微视频, 建立微课网站, 用于学生课前预习或课后复习巩固, 把有限的课堂时间更多地让位于师生讨论、交流与探究等活动。

传统教学过程是, 教师每讲完一个新知识, 随后布置任务让学生编程实现。学生往往觉得教师布置的任务并不是自身想要做的, 难以体现编程的价值, 久而久之学习编程的兴趣下降。比较恰当的做法是, 教师可设计开放式的实践任务, 要求任务主题明确, 有个性、有创意、内容积极向上即可。然后, 教师将整个班级分为若干个学习小组, 每小组4人, 从学生的生活与学习出发, 由小组的4个同学讨论确立小组任务的主题。主题确立之后, 通过小组交流、探究、合作互助等方式, 共同完成实践任务。设置开放性的任务, 不仅训练了学生编程的技巧, 更在开放的学习过程当中, 将学生的思维培养与能力培养更好地融入实践任务中[4]。

3.激发学生学习的兴趣

目前, 信息技术课的教学目标定位于:培养学生的信息素养, 即信息时代应具备的获取信息、处理信息、加工信息、交流评价信息的素养, 其着力点在于培养学生的技术素养。

技术素养是信息技术有别于其他学科的明显特征。哪些技术是深受学生欢迎和喜爱的呢?毫无疑问是实用性技术, 即能够帮助学生解决现实生活中的实际问题的技术。例如, 在讲授“可视化编程的概念与方法”这节内容时, 教师可以让学生编写一个倒计时程序, 用于班级辩论会等活动。学生会感觉到程序是有用的, 体验到成功的快乐, 获得学有所得的满足感, 学习积极性与主动性自然就高。

生活是取之不尽的教学源泉, 学生熟悉的日常生活经验对其学习和能力的培养具有持久而深刻的影响。因此, 教师在教学过程中要善于建立程序与生活实际的联系, 创设出贴近学生生活实际的问题情境, 把生活中喜闻乐见的问题逐步提升为编程思想, 从而激发学生的学习兴趣, 创造学生主动参与的学习氛围, 充分调动学生的积极性和主动性[5]。

如在讲述“穷举法”时, 教师可以首先通过猜密码来导入教学, 然后揭示QQ密码被破解之谜, 进而提出思考问题:如何防范密码被破解?从现场教学效果来看, 学生热情非常高。这样的教学情境引入法, 非常贴近学生的生活, 情境和任务的设计思路也非常贴近吻合, 所以很自然就将穷举的算法思想展现出来。

游戏教学法也是经常使用的教学技巧。游戏教学法就是在教学中尽可能将枯燥的语言现象转变为学生乐于接受的、生动有趣的游戏形式, 为学生创设良好的学习氛围, 使学生在玩中学, 在学中玩[6]。游戏教学法可以大大调动学生的学习兴趣和求知欲望, 培养学生的动手能力, 帮助学生深刻理解理论知识, 有助于学生的互助式学习。

在讲述“算法与算法描述”章节内容时, 学生对“什么是算法”、“算法的特征”等问题感到晦涩难懂, 教师可采取如下教学方法, 如在情境导入环节引入一个1-100之间的猜数字游戏, 看谁用最短的时间猜出结果, 继而剖析猜数字程序的算法实现过程, 学生对算法的理解肯定更加深刻。在讲述穷举、排序、递归等算法时, 适当地开发一些小游戏, 展示算法实现的全过程, 效果肯定比教师在课堂上干巴巴的讲授要好。

另外, 信息技术学科不是高考科目, 学生的学习主动性往往不足。针对这种情况, 教师需要适时地对学生进行教学评价, 及时进行教学反馈, 教师还可以通过评价激发学生的竞争意识, 营造出竞争的学习氛围。

4.半成品加工策略或程序填空

鉴于有限的教学时间、有限的教学空间和参差不齐的学生基础, “半成品加工”策略是很好的教学突破口。“半成品加工”提供了相对完整的作品, 只是对教学的内容某部分“留空白”, 让学生在短时间内体会到技术操作的方法和信息素养的内涵, 提高了讲解、理解和实践的效率, 并且优化学习的情景与练习的环境[7]。

“半成品加工”策略主要应用于课堂教学的演示。在教学中, 它可以配合讲解基本的方法与过程, 突出教学的重点。同时, 学生通过阅读程序, 了解别人的编程思路以及实现算法, 有利于培养算法思维。

应用“半成品加工”策略, 可以为学生提供学习情景, 回避技术盲点。所以提供的半成品往往是大半的成品, 只差一点就完成了。比如, 在“算法”模块教学初期, 由于学生尚不具备系统的编程知识, 动手编写完整的程序存在困难, 教师针对教学内容在程序某部分“留白”, 学生填空解决关键问题, 大大提高了课堂的效率。

5.恰当运用项目教学法

项目教学法就是在教师的指导下, 将一个相对独立的项目交由学生自己处理的方法。信息的收集、方案的设计、项目实施及最终评价, 都由学生自己负责, 学生通过处理该项目, 了解并掌握了整个过程及每一个环节中的基本要求[8]。

教学实践中, 我选取了高一年级2个平行班作为实验班, 运用项目教学法, 让学生设计项目, 应用VB技术, 完成教学内容“数据库管理软件的开发”。通过对比教学, 我发现实验班的学生对数据库管理系统的开发流程理解非常深刻, 对程序设计基础知识和VB可视化编程的概念和方法也有更深入的认识。其间通过笔试和上机考试考核学生的学习情况, 结果显示, 实验班大部分学生的基础知识理解、上机操作、界面设计、解决问题能力等都比非实验班有了明显的提高, 平均分比非实验班高出近10分。

项目教学法的关键, 在于设计和制定一个合适的项目, 项目既要适合教学目标的实现, 又要具备可操作性。项目开发中要进行有效分工, 每位学生根据自己的能力负责相应的子任务, 因此项目教学法的一个很大的优势就是能让不同层次的学生都参与到项目的开发过程中, 体现了分层教学的思想。

当前, 在开展“算法”模块教学过程中存在着一些困难, 但困难只是暂时的。因为“算法”模块本身具有无穷的魅力, 学生通过编写程序解决一个个鲜活的问题, 会给他们带来无限的学习动力。教无定法, 只要结合当地的学情, 有针对性地找到适合学生自身的教学策略与方法, “算法”模块定能焕发其应有的生命力。

参考文献

[1]顾建军, 李艺, 董玉琦, 等.普通高中技术课程 (实验) 解读[M].武汉:湖北教育出版社, 2004.

[2]曹雪丽.高中“算法与程序设计”教学四部曲[J].中小学信息技术教育, 2012 (7) .

[3]李艺, 朱彩兰.信息技术课程思想梳理思路简议[J].电化教育研究, 2014 (4) .

[4]周以真, 王荣良, 李冬梅, 等.信息技术课程的反思与计算思维教育的必要性[J].中国信息技术教育, 2013 (6) .

[5]喻文喜.“程序生活化”的误区及其反思[J].中小学电教, 2009 (12) .

[6]祝智庭, 邓鹏, 孙莅文.娱教技术:教育技术的新领地[J].中国电化教育, 2005 (5) .

[7]王爱胜.“半成品加工”策略“加工”啥?[N].中国教育报, 2005-6-13 (6) .

算法与程序·程序框图 篇5

各位老师:

大家好!我叫周婷婷,来自湖南科技大学。我说课的题目是《程序框图》,内容选自于新课程人教A版必修3第一章第一节,课时安排为三个课时,本节课内容为第一课时。下面我将从教材分析、教学目标分析、教学方法与手段分析、教学过程分析等四大方面来阐述我对这节课的分析和设计:

一、教材分析

1.教材所处的地位和作用

通过上节学习我们知道,算法就是解决问题的步骤,在我们利用计算机解决问题的时候,首先我们要设计计算机程序,在设计计算机程序时我们首先要画出程序运行的流程图,使整个程序的执行过程直观化,使抽象的问题十分清晰和具体。有了这个流程图,再去设计程序就有了依据,从而就可以把整个程序用机器语言表述出来,因此程序框图是我们设计程序的基本和开端,也是使用计算机处理问题前的一个必要的步骤。

2.教学的重点和难点

重点:程序框图的基本概念、基本图形符号和3种基本逻辑结构

难点:能综合运用这些知识正确地画出程序框图。

二、教学目标分析

1.知识与技能:掌握程序框图的概念;会用通用的图形符号表示算法,掌握算法的三个基本逻辑结构;掌握画程序框图的基本规则,能正确画出程序框图。

2.过程与方法:通过模仿、操作、探索,经历通过设计程序框图表达解决问题的过程;学会灵活、正确地画程序框图。

3.情感态度与价值观:通过本节的学习,使我们对程序框图有一个基本的了解;掌握算法语言的三种基本逻辑结构,明确程序框图的基本要求;认识到学习程序框图是我们学习计算机的一个基本步骤,也是我们学习计算机语言的必经之路。

三、教学方法与手段分析

1.教学方法:采用“问题探究式”教学法,让学生主动发现问题、分析问题、解决问题,培养学生的探究论证、逻辑思维能力以及实际解决问题的能力。

2.教学手段:利用多媒体辅助教学,体现在计算机和图形计算器的使用,利用它们来演示程序的设计过程,让学生们能很清楚直观地看到整个经过,并激起他们学习程序设计的兴趣。

四、教学过程分析

1.复习回顾,导入新课(约5分钟)

回顾前面我们如何用自然语言来描述算法,然后向学生们提出问题:用自然语言描述算法有什么缺陷性?是不是不够直观清楚地让我们看到整个算法的程序和步骤?我们平时一般为了能让一个过程呈现得更加直观,我们一般会选择如何解决?解决方法就是作图。通过这几个问题,然后引出我们今天所要学习的内容,那就是为了能更形象直观地让我们看到算法的整个程序和步骤,我们选择用一种新的描述方式来描述算法——程序框图。

2.启发诱导,探索新知(约20分钟)

⑴认识基本图形符号:认识程序框图里出现的基本图形符号,并且能很好地掌握他们,是接下来学习程序框图的前提,所以在学习用程序框图来描述算法之前,我们必须先了解这些符号所代表的意义,那样才能让我们接下来的学习更加顺利。在学习这部分知识的时候,要掌握各个图形的形状、作用及使用规则。

⑵应用符号描述算法:根据刚刚学习的图形符号知识,尝试用程序框图来描述在第一节里我们已经学习过的判定一个数是否为质数的算法的程序。这部分内容主要是在老师的引导下,启发学生一步一步根据所学知识画出程序框图。这样可以使学生们对前面知识的理解有着一定的促进作用,同时培养他们的逻辑思维能力以及动手能力,同时为程序框图的定义的得出打下基础。

⑶概括定义加深理解:根据刚刚的.作图步骤,让学生们积极思考并回答,然后在老师的引导下归纳得出程序框图的定义。在得出定义之后,要引导学生注意定义里的关键字,然后通过举例进一步向学生们解释这些关键字,以达到更好的掌握效果。

⑷初步认识逻辑结构:根据刚刚所作的判定一个数是否为质数的算法的程序框图总结出程序框图的三种不同的逻辑结构,初步向学生们介绍在程序框图里存在的三种不同的基本逻辑结构。由于这部分知识是学生新接触到的内容,所以主要由老师引导学生一同找出图中存在的三种不同的逻辑结构,根据它们各自所呈现的不同特点总结出它们的特征,之后由老师说出它们的名称。这里对逻辑结构的初步认识,也是为后面对它们的深入探究打下基础。

3.结合例题,深入认识(约10分钟)

在这一环节我只为学生们准备了1道例题,由于一节课的时间有限,所以这里我只能就上面学习的三种基本逻辑结构里面的最简单的顺序结构,结合例题作更深层次的理解,剩下的两种逻辑结构将是我们下节课学习的主要内容。

例题选自课本的例3它针对的就是顺序结构,在题目里涉及到一个学生不熟悉的概念,那就是海伦公式,所以首先要让学生们了解那是什么,否则将无从解题。之后就引导学生分析算法,这个过程可以培养学生积极思考的能力。然后由学生们自己作出这道题的程序框图,锻炼学生的动手能力,加深理解。

4.课堂小结

⑴程序框图的基本概念

⑵程序框图的几种常用的图形符号(要明确它们的形状、作用及使用规则)

⑶程序框图的三种基本逻辑结构(要初步认识它们的基本特征)

5.布置作业

⑴已知x=4,y=2,画出计算w=3x+4y的值的程序框图。(这是一道要求作出具有顺序结构的程序框图题,很基础,一般的学生都能独立完成)

⑵由于这节课我们已经初步接触了另外两种逻辑结构,所以我要求学生们能在课后将书上的例4和例5好好思考一下,为下节课的学习做好准备。

[设计意图]课后作业的布置是为了检验学生对本节课内容的理解和运用程度以及实际接受情况,并促使学生进一步巩固和掌握所学内容。

探讨程序与程序框图的互化问题 篇6

一、根据程序框图设计程序

根据程序框图设计程序的一般步骤:(1)理解题意,确定程序框图的结构(顺序结构、条件结构、循环结构);(2)明确各程序框的含义,并且写出对应的程序代码;(3)在有条件的情况下,进行上机运行.

例1 请写出下面的程序框图描述的程序.

[x<1?] [开始 ] [否][是][结束] [输出y] [输入x] [x<10?] [是] [否]

分析 通过观察,此程序框图为条件结构,而条件结构的程序为:

[IF 条件 THEN

语句体1

ELSE

语句体2

END IF]

解 所求算法的程序为: [INPUT x

IF x<1 THEN

y = x^2

ELSE

IF x<10 THEN

y = 2*x+1

ELSE

y = 3*x-11

END IF

END IF

PRINT y

END]

点拨 (1)在本程序中,IF-THEN语句中嵌入了另一个IF-THEN语句,在每个语句结束时都要写END IF; (2)程序中的符号都要用专用符号,例如:乘号、幂等.

例2 请写出下面的程序框图描述的程序.

[开始 ] [否][结束] [输出S] [k>50?][是]

分析 通过观察,此程序框图是循环结构,程序设计语言中有直到型和当型两种循环结构. 直到型循环结构对应的UNTIL语句是:

[DO

循环体

LOOP UNTIL 条件]

当型循环结构对应的WHILE语句是:

[WHILE 条件

循环体

WEND]

通过进一步分析我们发现,此循环结构用当型和直到型循环结构的语句都符合程序框图.

解法一 UNTIL语句编写计算机程序:

[k=1

S=0

DO

S=S+1/k

k=k+1

LOOP UNTIL k>50

PRINT S

END]

解法二 WHILE语句编写计算机程序:

[k=1

S=0

WHILE k<=50

S=S+1/k

k=k+1

WEND

PRINT S

END]

二、根据程序画出程序框图

根据程序画程序框图的一般步骤:(1)理解题意,确定程序的结构语句(条件语句、循环语句);(2)明确各函数的含义,一步一步转化为程序框图;(3)最后合成整个程序的程序框图. 在画程序框图的过程中,要注意所有的细节,例如各种语句所对应的框的特征,不要忘记起止框等.

例3 请根据给出的算法程序画出程序框图.

[INPUT “x=”; x

b = x MOD 2

IF b = 0 THEN

PRINT “it is even”

ELSE

PRINT “it is odd”

END IF

END]

分析 先读懂题意,先找出关键语句(条件语句,循环语句),此题为条件结构,然后发现程序中“MOD”语句,意味着需要取余数. 这里[b]等于[x]除以2的余数,即判断[x]是否为偶数,最后写出程序框图.

解 此程序的程序框图为:

[开始 ] [否][结束] [输出“x是偶数”] [b=0?][是] [b等于x除以2的余数] [输入x][输出“x是奇数”]

例4 请根据给出的算法程序画出程序框图.

[INPUT “x=”;x

k = 0

DO

x = 10*x+9

k = k+1

LOOP UNTIL x>2014

PRINT k

END]

分析 由题意,很容易发现此程序为直到型循环结构,再加上一些基本的赋值语句.

解 此程序的程序框图为:

[开始 ] [否][结束] [输出k] [x>2014?][是] [输入x]

通过以上例题分析,我们可以发现,只要掌握了程序框图的几种结构(顺序结构、条件结构、循环结构)和各种框的功能,知道程序框图的一般画法,掌握了程序的算法语句(输入、输出语句,条件语句、循环语句),并且能把程序框图的结构与程序的语句一一对应,那么我们就可以非常轻松、方便地解决程序与程序框图的互化问题.

程序与程序框图是描述算法的两种重要语言,它们各有优势. 程序框图具有直观、形象的特点,我们可以迅速地理解某一算法,但计算机无法理解它,程序虽复杂,但计算机可以执行,方便计算. 所以我们在学习算法这一章时,应该熟练掌握,灵活运用.

[练习]

1. 根据程序框图写出程序.

[开始 ] [否][结束] [输出S] [是] [输入a,b]

2. 根据程序框图写出程序.

[开始 ] [否][结束] [输出y] [是] [输入x]

3. 请根据下面的程序,画出程序框图. [INPUT “n=”;n

i = 1

S = 0

WHILE i<=n

S = S +(i+1)/i

i=i+1

WEND

PRINT “S=”;S

END]

[参考答案]

1.

[INPUT [a,b]

IF [a+b<1] THEN

[S=2*a+b]

ELSE

[S=1]

END IF

PRINT [S]

END]

2.

[INPUT “x=”;x

DO

y = x/3+2

x = y

LOOP UNTIL ABS(y-x)<1

PRINT y

END]

3.

算法与程序·程序框图 篇7

一、创设情境, 激发学生的学习主动性

在教学中, 利用趣味图片引出递归, 让学生通过日常生活事例了解递归的含义和条件。

算法与程序设计 (VB) 的教学显得枯燥。如何激发学生的学习兴趣, 培养学生学习的主动性非常重要。心理学研究表明:“兴趣是学生最好的老师。”兴趣能使学生在愉悦的气氛中学习, 唤起学生强烈的求知欲望, 是教学成功的关键。在上课前, 教师给出下列图片, 这些图片有效地吸引了学生的注意力, 每一位同学在观察图片过程中都有自己的想法, 学生有一个直观的感受。

下下面面的的活活动动着着重重让让学学生生初初步步形形成成、建建立立递递归归算算法法的的概概念, 当学生发现在日常的生活学习中能找到递归算法的现实例子, 就降低学生学习递归算法的畏难情绪, 提高了学习兴趣。

例如, 排队报数。让一排数量不清学生排队, 教师要求学生通过报数得到学生的总数。一是正常报数, 从1报到最后一个, 最后得到学生总数。二是逆序报数, 前面的学生都询问其后面一个学生的号数, 逆序依次询问, 当问到最后一个学生时, 最后的学生报数为1, 其他学生加上1后依次回报, 最后开始的学生所报的数就是总数。这个例子形象具体地表现了递推和递归两过程, 学生极易接受。

二、解决递归问题的经典题型, 多样化分析递归过程

例:一只猴子摘了一堆桃子, 它每天吃掉当天剩余桃子数的一半, 每次又忍不住多吃一个, 这样到了第十天就剩下一个桃子了。问小猴子第一天共摘下了多少个桃子?

师:以小组为单位, 讨论此题应该如何解决?

学生口述此题的解决方法。

建立数学模型:

师:假设第n天 (n<10) 的桃子数为Tz (n) , 那么当n<10时, 就有Tz (n) =?

生: (Tz (n+1) +1) *2

师:此题的出口是什么?

生:第10天的桃子数是1个。

幻灯片出示自定义函数Tz的代码:

Function Tz (By Val n As Integer) As Integer

If n=10 Then

Tz=1

Else

Tz= (Tz (n+1) +1) *2

End If

End Function

【阶乘】VB中一个最常用的计算例子。如用递归函数实现计算N阶乘的求解。

建立数学模型:

师:假设N的阶乘为S (n) , 那么S (n) =?

生:S (n-1) *n。

师:此题的出口是什么?

生:1的阶乘是1。

学生尝试在上一题的基础上进行编程。

代码如下:

从上述分析中, 可以认为, 看问题能否用递归算法, 先不要考虑具体的执行过程, 只要满足上述构成递归的条件即可。在VB程序设计中使用递归时还应注意, 在定义递归函数或递归过程时, 一般先使用If语句进行递归测试, 找到递归结束的条件, 然后再进行递归调用。

讲课时以游戏的方式引入, 让学生初步明白“递归算法”。通过“猴子吃桃”问题, 运用游戏的思维引导学生掌握“递归算法”的解题过程, 再通过N!这个简单的数学问题, 使学生掌握了用“递归算法”解决此类题的方法。

学生在面对递归问题时, 很多时候是从心理上惧怕它。实际上, 关于递归的问题, 普通高中的信息技术课程中要求并不太高, 教师在讲解递归算法时切不可用太深奥的问题来引入, 这样会适得其反。运用递归算法解决问题时, 如果由浅入深来解决的话, 学生一般还是能够理解掌握的。

参考文献

[1]李艺.信息技术课程与教学[M].北京:高等教育出版社, 2006 (6) .

算法与程序·程序框图 篇8

●在“算法与程序设计”教学中如何培养学生的计算思维

1. 设置问题,引导学生发现和解决问题

作为教师,不仅要传授给学生知识,更重要的是应该为学生提供足够的发展空间,指导学生发现问题,激发他们解决问题的兴趣,进而引导他们运用学会的知识去解决问题。

例如,笔者在讲《程序的顺序结构》一课时,给学生设置了如下问题。

两个没有刻度的杯子A、B,容积分别为7升和5升,是否能量出1升?如果能,怎样量出1升?

学生亲手操作,找出解决方案,再通过分析给出算法。大多数学生可能通过尝试的方法来解决,但不是最少的步骤,那么怎样用最少的步骤量出1升?运用计算思维和逆向思维的思维方式,能帮助学生找到答案。

如果7升的杯子最后成功地量出了1升,逆序的过程应该如下:

分析一:两个杯子,容积为7升和5升,如何量出1升?(如果A为6,B为空,A杯倒满B杯,A杯剩余即为1)

分析二:两个杯子,容积为7升和5升,如何量出6升?(如果B为4,A满杯倒满B杯,A杯剩余即为6)

分析三:两个杯子,容积为7升和5升,如何量出4升?(如果B为2,A满杯倒满B杯,A杯剩余即为4)

分析四:两个杯子,容积为7升和5升,如何量出2升?(B为空,A满杯倒满B杯,A杯剩余即为2)

基于以上分析,逆序过来就给出了正确的解决算法:

A=7,B=5

第一步:A满杯倒B杯A剩2,将A杯剩的2赋给B,B是2;

第二步:A满杯给B杯倒满,A杯剩4,将A杯剩的4赋给B,B是4;

第三步:A满杯给B杯倒满,因为目前B是4,所以A杯剩6;

第四步:B清空,将A杯(目前是6)倒满B杯,A杯剩下的就是1。

是否还有其他方法?7升的杯子能最后量出1升,那5升的杯子是否也能最后量出1升?7升的杯子最少需要倒出几次,5升的杯子最少需要倒入几次才能量出1升?引导学生尝试、探究,提出新问题,在这样的任务中是否蕴含着某些数学原理?这个任务恰好吻合了求解二元一次方程7x+5y=1是否有最小整数解。古希腊著名的数学家、教育家欧几里德在2000多年前就给出了答案,这就是著名的扩展欧几里德算法。在探究中,教师引导学生感受数学的神奇,体会古代数学家发现数学定理的过程。

2. 将教学内容与生活密切联系

教师在教学中可通过创设与生活密切联系的问题情境,帮助学生在解决问题的过程中感受信息技术对人们日常生活的影响,学习数据与计算的知识,提高利用信息技术解决问题的能力,发展计算思维。

例如,在讲贪心算法时,笔者引入了人民币与某种外币兑换获利的例子。

在一周七天中,每天都可以用外币兑换人民币,也可以用人民币兑换外币,从100元人民币开始,给出七天的汇率,最后获得最大的利益。这七天的汇率为:500、600、800、700、800、600、500(100元人民币兑换外币的值)。

分析一:人民币某一阶段买入外币的时机,总是在这一阶段人民币升值到最大时买入。

分析二:外币某一阶段买入人民币的时机,总是在这一阶段人民币贬值到最大时买入。

贪心算法总是做出在当前看来是最好的选择,也就是说,它所做的是某种意义上的局部最优选择,由此给出算法。第一阶段:前3天中,人民币一直升值,第3天升值到这一阶段的最高,此时100元人民币买入800元外币;第二阶段:第3、4天,人民币贬值,第4天贬值到这一阶段的最低,此时800元外币买入114.28元人民币;第三阶段:第4、5天,人民币升值,第5天升值到这一阶段的最高,114.28元人民币买入914.24元外币;第四阶段:第5、6、7天,人民币贬值,第7天贬值到这一阶段的最低,914.24元外币买入人民币182.85元,从而得到最大获利82.85元。

这一任务中,笔者把经济学的问题引入实例中,引导学生关注算法与程序设计在生活中的应用,用计算思维的方法解决经济学中的问题,实现学科的融合。

3.以兴趣为起点,以趣味活动为主线的教学方法和策略

兴趣对学习有着神奇的内驱作用,能变无效为有效,化低效为高效。在此,兴趣包含两个方面:一是教师所设计的教学活动要让学生感兴趣,二是发挥学生对信息技术的兴趣。所以,设计活动必须结合学生的身心特点和认知水平,把学生感到枯燥的学习变成感兴趣的活动,把兴趣贯穿于整个课堂教学活动,让学生处于积极的兴趣状态之中。例如,笔者在讲解递归算法时,让学生用最少步骤完成汉诺塔游戏:有三根柱子A、B、C,A柱上有N个盘子,每次移动一个盘子,小的盘子只能放在大盘子的上面,要把所有盘子从A柱全部移到C柱上(如下图)。

学生通过完成汉诺塔的Flash游戏,体会、演绎、分析递归算法。在这个游戏中最关键的是最大的盘子的位置,在挪动最大的盘子前,A柱上只有最大的盘子,B柱上放着前N-1个盘子,C柱为空,由此给出递归算法。第一步:把A柱上的前N-1个盘子,经过C柱,移动到B柱;第二步:把A柱上的最大的盘子,移动到C柱;第三步:把B柱上的前N-1个盘子,经过A柱,移动到C柱。学生在游戏中体悟算法的原理,感受算法与程序设计的乐趣。

●开展“算法与程序设计”课程的实践

1.组建“算法与程序设计”课程教师团队、学生团队

算法与程序设计课程的教学内容较多且专业性强,包括程序语言、算法、数据结构、图论、数论、博弈论、组合数学、离散数学、概率与统计等方面的知识,要求中学教师同时掌握这些知识且能灵活运用不是一件容易的事。“术业有专攻”,每位教师都有自己擅长的研究方向。同时,组成教师团队、加强教师间的交流学习、定期举行算法与程序设计专题备课,可以让更多的教师接触“算法与程序设计”课程。另外,还可以开展多人协作,每位教师负责课程中自己擅长的知识进行教学。

由于学生个体的差异,同一个教学内容、教学进度,有的学生“消化不了”,有的学生却“吃不饱”,教师可以尝试对学生进行分层教学,使不同层次的学生都有所收获,同组的学生之间可以进行协作交流学习,共同进步。“算法与程序设计”课程的学习适合“抱团取暖”,编程过程中遇到的问题具有普遍性,一个学生在学习过程中遇到的问题,可能也被其他学生遇到了,这时解决过此类问题的同学就成为课程资源,他解决问题的方式、方法都可以被其他同学借鉴。同一小组的学生组成团队,讨论学习,用集体的智慧解决遇到的问题。

2.“算法与程序设计”课程组织实施

以吉林省为例,省里组织了多次“算法与程序设计”课程的培训与集体备课,绝大多数高中都开设了程序设计课程,其开课的形式大体有以下几种。

(1)常规课。在高一第一学期的信息技术常规课堂中,面向所有学生用一个半月的时间向学生普及算法与程序设计的知识,讲授经典算法,选拔出对算法与编程有兴趣、有潜质的学生。

(2)校本课。在高一、高二开设“算法与程序设计”校本课程,面向的是对计算机编程有兴趣并且学有余力的学生。本课程旨在培养中学生使用计算机编程解决实际问题的能力,提升他们的创造性思维和计算思维,每周2课时,以算法知识的专题学习为主。

(3)大学先修课。北京大学开设了“计算概论”大学先修课程,目的是考查学生的算法与程序设计能力。学生可以访问北京大学在线平台进行学习,每学期由北京大学组织结业考试。考试合格后,学生进入大学可以申请免修程序设计的课程。选择大学先修课的学生每周有2课时的学习时间。

教学中以学生为主体,首先是选“才”,通过这样的课程,在程序设计方面有特长的学生就能显现出来。

3. 搭建在线学习平台

在“算法与程序设计”教学过程中,教师对学生所写的程序进行评测是一项比较繁琐并且费时费力的工作。在实际教学中,教师的精力是有限的,无法对所有学生的程序进行评测。因此,需要建立一个基于网络环境下的在线学习评测系统,为学生提供一个实时的学习评测环境。吉林省开展程序设计教学较好的几所学校都搭建了程序设计在线学习平台,并向其他学校开放,平台中题库的题目按照“算法与程序设计”课程中的知识点进行分类,而且题目的难度是递进的,为学生做题顺序提供了参考。在线学习平台突破了教师、学校、家庭、地域的限制,也突破了学习时间的限制,使学有余力的学生在课后仍能依托在线学习平台进行学习,并验证学习效果。

4. 创建新型学习策略

算法与程序设计课程与传统课程不同,它是以实验、探究、操作为主的一门课程,因此仅仅通过教师讲授,学生很难达到融会贯通,而教师精力有限,需要面对的学生又较多,因此需要学生主动学习。在学习过程中,教师可以打破年级界限,让高水平的学生指导入门的学生,建立学习小组,让学生共同讨论、研究,依托网络学习平台,建立QQ群,开通博客等,从而使学生思维得到锻炼,能力得到提升。

5. 课程评价反馈

(1)追求育人目标,培养学生的计算思维。开展“算法与程序设计”课程不只是为了培养具有编程专长的人才,课程教学中也增加了育人的目标:一是鼓励学生积极进取,勇于拼博,不抛弃,不放弃;二是要培养学生一丝不苟、精益求精的品质,并在学习过程中形成计算思维去思考解决学习、生活中遇到的问题。

(2)基于在线评测网站的评价。评价是“算法与程序设计”课程教学中的重要环节,如何建立一种科学、合理、有效,能够激起学生学习兴趣与投入的评价体制是值得教师深思的问题。在线学习网站是学生自主学习和协作学习的平台,它可以让学生自我评价,通过在线测试题库,对学生的学习过程和学习结果进行评价,并及时给予反馈,做到评价和反馈的实时、动态、正确。教师还要做好阶段性评价,在在线评测网站上教师不仅可以创建不同的比赛,让学生在规定的时间内进行答题,还可以在线公布学生的排名、做题情况、得分情况等,以便让他们认识到自己学习中的问题,进行学习调整。

(3)参加各类比赛、考试,促进课程的学习。算法与程序设计的比赛很多,有全国青少年信息学奥林匹克竞赛分区联赛、全国赛、亚太地区青少年信息学奥林匹克竞赛等,还有大学先修课程验收考试,这些都为学习算法与程序设计的学生提供了评价反馈的平台,教师和学生可以根据比赛成绩及时调整学习策略和学习进度。

算法与程序·程序框图 篇9

1 循环冗余码(CRC)的工作原理

循环冗余码的具体生成过程为:(1)假设发送信息码用信息多项式K(x)表示;(2)将K(x)左移R位,相当于对应的信息多项式K(x)*XR;(3)用生成多项式(二进制数)对信息码做模2除,得到R位的余数;(4)将余数拼到信息码左移后空出的位置,得到完整的C R C码。

2 循环冗余码的生成与码字正确性检验举例

发送端

例如:已知:信息码:1 0 1 0信息多项式:K(x)=X 3+X

生成码:1011生成多项式:G(x)=X3+X+1(r=3)

解:1)(X 3+X)*X 3的积是X 6+X 4对应的码字是1010000

2)积/G(X)(按模二算法)

由计算结果知冗余码是011,CRC码(码字)就是1010011

接收端:

例如:已知:接受码字:1 0 1 0 0 1 1多项式:T(x)=X6+X 4+X+1

生成码:1011生成多项式:G(x)=X3+X+1(r=3)

求:码字的正确性。若正确,则指出冗余码和信息码。

解:1)用C R C码(码字)除以生成码,余数为0,所以C R C码(码字)正确。

2)因r=3,所以冗余码是:011,信息码是:1010。

3 CRC的检错原理及实例分析

在接收端收到了C R C码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若有一位出错,则余数不为0,而且不同位出错,其余数也不同。

下面给出出错模式,如上式中信息码为1010,生成式为1011,则收到的CRC码字

如果循环码有一位出错,用G(x)作模2除将得到一个不为0的余数。如果对余数补0继续除下去,我们将发现一个有趣的结果;各次余数将按上表顺序循环。例如第一位出错,余数将为001,补0后再除,第二次余数为010,以后依次为100,0ll…,反复循环,这就是“循环码”名称的由来。同时也可以证明,余数与出错位的对应关系只与码制及生成多项式有关,而与待测码字(信息位)无关。改变码字,只会改变表中码字内容,不改变余数与出错位的对应关系。这是一个很有价值的特点。如果我们在求出余数不为0后,一边对余数补0继续做模2除,同时让被检测的校验码字循环左移。如上表说明,当出现余数(1 0 1)时,出错位也移到A7位置。可通过异或门将它纠正后在下一次移位时送回A 1。这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件。并且C R C的纠错能力与C R C码的位数有关,C R C码的位数越多,检错能力就越强,漏检率就越低。当位数增多时,循环码校验就能有效地降低硬件代价,这是它得以广泛应用的主要原因。

4 循环冗余码在C语言中的应用

源程序及分析

5 程序调试分析

调试结果与理论计算值一致,编程成功!

摘要:通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数字通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错控制。本文详细介绍了循环冗余校验CRC(Cyclic Redundancy Check)的差错控制原理及其算法实现。

关键词:循环冗余校验,检错,纠错,信息码

参考文献

[1]谢希仁.计算机网络教程.人民邮电出版社.2005

[2]雷震甲.网络工程师教程.清华大学出版社.2004

[3]郭梯云等.数据传输(修订本).人民邮电出版社.1998

《算法与程序设计》的教学方法探讨 篇10

一游戏教学法

游戏教学法是指学生们通过做游戏, 了解完成游戏的步骤, 以此来设计程序算法, 达到训练的目的。

益智游戏有很多种, 其中, 学生们乐于玩并且易懂游戏也数不胜数, 如《农夫过河》。游戏规则:农夫要把狼、羊和青菜带过河去, 但是每次只能携带一个物品, 为了保证不让狼吃掉羊、羊吃掉青菜, 请问如何过河?

学生们在玩《农夫过河》时, 有的学生很容易想到办法;而有的学生则想到了其他的办法, 如把狼绑起来等;另外一些学生则没有办法。老师通过请一位顺利过关的同学演示过河的步骤, 然后引出算法的概念。这种教学方法课堂氛围较活跃, 不枯燥, 让学生们感觉《算法与程序设计》就像玩游戏一样简单, 学生们乐于参与其中, 并且对其感兴趣。同时让学生们感觉算法可能不止一种。这不失为一种很好的教学方法。对《算法与程序设计》课程感到恐惧的学生尤为奏效。在实际教学经验中, 也取得了较好的课堂效果。

二比喻教学法

比喻是语言艺术中的艺术, 在《算法与程序设计》的教学中, 巧用比喻, 妙用比喻, 是一种行之有效的并且易懂的教学方法。例如在讲解交换变量的值时运用比喻法, 可以把抽象枯燥的程序具体化和形象化, 有利于学生对该部分知识点的理解和掌握。例如, a笼子里有老虎, b笼子里有狮子, 现在要把老虎和狮子交换一下。根据日常生活中的经验, 学生很自然想到需要借助于第三个笼子c。交换步骤如下:将a笼子的老虎放到c笼子去 (c←a) ;将b笼子的狮子放到a笼子里 (a←b) ;最后将c笼子的老虎放到b笼子中 (b←c) , 此时完成笼子里老虎和狮子的交换。在此基础上, 学生很容易就编写出程序来交换两个变量a和b中的数据。这种方法对学生群体都适用, 不失为一种把复杂问题简单化的一种方法。

三“半成品加工”教学法

“半成品加工”是指为学生提供一些“待完成的教学模具作品”, 提供一种真实的问题解决环境, 是一种基于“问题解决”的教学方法。这种教学方法避免学生从头开始制作的繁琐过程, 对基础有差异的学生都进行了很好的回避, 让教学更具针对性, 通过完成作品的方式让学生体验到了学习的成功, 感受到学习的快乐, 从而有效地提高教学效率。

例如在《用解析法解决问题》中, 绘制钻石图案的关键是求出圆周上各点的位置 (坐标) , 绘制各点之间的线段。如何求出各点的位置呢?我们把绘制钻石图案这个问题转化为数学问题, 首先建立坐标系, 坐标原点位于图形的中心点上。在圆上平均取n个点, 将圆平分为n份。学生利用数学的知识, 能够写出各点的坐标。在此基础上, 向学生展示算法的伪代码, 提供给学生半成品的程序文件 (代码是不完整的) , 要求学生填空补全程序代码, 调试程序, 完成钻石图案的绘制, 此处就是运用了“半成品加工”教学法。这种教学方法旨在避免学生基础的差异, 提供“半成品”, 在实际运用中, 这种教学方法具有普适性, 对全体学生都有较好的效果。

四问题式教学法

问题式教学法是一种现代启发式的教学方法, 是教师根据学生已有的认知水平, 提出相关的问题, 引导学生独立思考、大胆尝试、学会质疑、学会探究的一种教学方法。

在《用解析法解决问题》教学中, 教师通过精心设计的若干问题, 逐步启发、步步深入、环环扣紧, 引导学生质疑教材中绘制钻石图案的伪代码, 学生意识到了程序中出现的冗余循环, 并且能够修改程序的冗余代码, 提高算法的效率。

提问1:钻石图案是由多少条线段组成的?学生很自然的根据已有的数学知识回答:14+13+12+……1= (1+14) ×14/2=105条。

提问2:当i=1, j=2时, 所画线段和当i=2, j=1时所画线段是什么关系?学生回答:是同一条线段。

提问3:在循环嵌套中, Line语句实际上被执行多少次?说明什么问题等?

让学生自己独立思考。类似的提问, 直到学生们能自己把程序修改正确为止。

提问式教学方法通过引导学生, 让学生们自己独立思考, 对有基础的学生尤其重要, 他们的理论基础较好, 可以很容易的解决问题, 提高教学的成绩。

参考文献

[1]李艺.信息技术教学研究与案例[M].北京:高等教育出版社, 2006[1]李艺.信息技术教学研究与案例[M].北京:高等教育出版社, 2006

上一篇:溴代十二烷下一篇:现代印刷