第四章 程序设计基础
概述
本章的开篇指出了程序设计的基本步骤,介绍了编写一个完整的程序需要经过的一般过程,并提供了在编写程序的过程中人们需要做的各项工作和需要注意的问题。
在本章中,我们先要学习算法的概念以及描述算法的方法。其中,将着重对流程图的绘制进行详细的介绍。然后,通过进一步分析几个比较复杂的算法,我们可以深刻地体会到结构化程序设计思想的重要性,同时也能够感悟到使用流程图描述算法的优点,即直观易懂,便捷高效。
本教材采用Turbo Pascal 7.0作为教学编程语言来介绍程序设计的基础知识和一些基本算法。本章第二节至第四节详细介绍了使用Turbo Pascal 7.0编写的程序的结构,以及进行程序的编辑、调试的方法。此外,还详细介绍了程序设计的一些基本概念。
本章的主要内容
节名 教学内容
程序设计概述 通过求解一个问题的步骤,了解算法的概念以及表示方法,以及程序设计的基本步骤。能够掌握结构化设计的基础思想,用流程图等算法描述方法描述出相关的算法,并解决一些比较复杂的问题。
Pascal程序结构 通过分析一个具体的pascal程序,掌握pascal程序的基本结构,以及pascal中用到的语言符号。
程序的编写与调试 介绍TurboPascal7.0软件,掌握文件新建、打开、编辑、保存、编译和执行程序等技能,了解跟踪和调试pascal程序的方法,并能够在需要的时候获得相关的帮助信息。
程序设计的几个基本概念 通过一些具体的事例详细介绍了程序设计的几个基本概念:常量和变量、pascal语言的数据类型、Turbo Pascal7.0中提供的标准函数、 pascal语言的运算符和表达式。
第一节 程序设计概述
一、教材分析
教学目标
目标 实现
知识 了解程序设计的基本步骤 在现实生活中,解决一个问题的步骤有哪些?以类比的方法来说明程序设计的步骤
通过解决数列求解问题的过程,了解算法的定义并懂得几种比较常见的算法描述方式 尝试解决一个数列求和问题,在实践中体会什么是算法,并体验自然语言描述法与流程图描述法
懂得结构化程序设计方法的思想,了解程序的三大结构分别是顺序、分支与循环。 寻求三大结构的示例,并结合课后ATM取款习题
技能 能够使用自然描述语言和流程图方式描述简单算法 贯穿于数列求和算法之中
能熟练使用流程图方式表示程序的三大结构 贯穿于ATM取款习题之中
能够用流程图描述出一个比较复杂的算法,算法需包含两个以上不同的程序结构。 贯穿于ATM取款习题之中
情感态度价值观 通过解决一道数列求和问题,对算法的概念有一个感性认识 数列求和算法过程中
根据自己对算法描述方法的认识,总结出自然描述语言与流程图两种的方式各自的优点。 尝试两种算法描述方式后
养成独立分析、解决大问题的习惯,能够将大问题自行分解为若干个小问题 在复杂问题分析和描述算法过程中
教学重点与难点
程序设计步骤的关键是对问题的分析,以及建立正确的算法,这需要教师合理引导学生在整个学习过程中不断地体验并加以应用和总结。所以,教学的重点在于引导学生在解决一些比较简单的问题中,结合流程图的基本知识,分析算法,描述算法。而难点则是在学生使用算法描述解题步骤的时候往往会忽略计算机解题的特点,一味追求细枝末节的实现,而忘记了使用结构化程序设计思想来设计算法,教师应该注意随时调整学生的解题思路,帮助学生把握解题的关键。
二、教学建议
课时安排建议
本节内容建议用2课时完成。第1课时主要让学生了解程序设计的基本步骤,以及观察三种常见的算法描述方法的区别,学会画流程图描述简单算法。第2课时着重讲解为什么需要结构化程序设计思想,体会结构化程序设计思想的优点,并要求学生能够用流程图画出相对较复杂的算法。
教学准备
1.机房准备
程序设计基础中流程图绘制活动的开展对机房的软硬件配置要求不高,操作系统Windows 2000或Windows XP以上,CPU为PIII以上,内存为128M以上,推荐使用Microsoft Office Visio 2003绘图工具,也可以使用普通Office办公套件中的Word软件代替,每个学生一台计算机。
2.教师准备
Microsoft Office Visio 2003是一款多功能绘图工具,其中包括绘制流程图的功能。熟练掌握软件中与“基本流程图”相关功能的使用方法;搜集整理一些简单的算法,能够用三种基本结构清晰绘制出流程图。
3.学生准备
具备基本的信息技术操作技能,包括鼠标、键盘使用,文字输入等。
教学过程安排建议
1.导入新课,提出问题
教师可以设置如上图所示的走迷宫活动,配合讲解人类解决问题与计算机解决问题间的差异。
对于这样一张并不复杂的迷宫图,从入口到出口有许多种走法,如果人类来走的话,可能在前期摸索阶段比较迷茫,可能会走很多弯路,但是当人们走到两个小圈处时,可能立刻改变自己原定的搜索路线;因为人类可能已经看到了出口处的光亮,判断出出口的方位,或者已经直接看到了出口,所以会放弃本来的行动方向,直接向出口进发。
但对于计算机来说,如果让计算机控制机器人来走迷宫,它可能选择一个不会错误,肯定能走出迷宫的方法——回溯法(有时在迷宫问题中,人们又称为右手原则),即不管迷宫有多复杂,从进口开始,一直沿着右边的墙前进,墙如何转弯,它也跟着转弯,虽然会走很多弯路,但方法是可行的,肯定能走出迷宫(具体证明可参考相关数学论证)。当计算机走到两个小圈处时,即使看到了出口,它也不会改变原来的解决问题的方法,仍旧按照右墙行走……这就是人类解决问题与计算机解决问题的不同。计算机在解决问题的开始已经设置了不会改变的解决方法,即使问题出现了转机,也不会重新考虑好的方法,仍旧按原来的计划实施,而人类却不是这样。
教师紧接着活动教师提问:计算机是如何解决人类碰到的问题呢?计算机怎么懂得人类给予的指令?计算机接收到的指令是否有重用性,是否可以解决所有类似的问题?通过问题引入程序设计的概念。
2.介绍“程序设计的步骤”,重点在于讲解每一个步骤的必要性
3.从数列求和问题入手
当学生了解了程序设计的基本步骤后,开始让学生解决书中一道数学数列求和题,但是要求使用多种不同的方法。当学生解题完成后,可以请多个同学描述解题的步骤。教师从中引出算法的概念,让学生体会到设计算法的时候往往会从人工解决问题的过程中获取灵感。
(1)教师提问:用现有的数学知识如何解决书中数列的求和问题,有几种不同的方法?
(2)学生活动:学生自己完成求解过程,并用语言描述自己求解的思路。
(3)在解题的过程中,教师可以要求学生详细地记录下自己的解题步骤,为下面的算法设计作好必要的铺垫。而在解题步骤当中,教师应该有针对性地要求学生记录一些关键性的内容,如数列的项数的变化,数列项数值的变化,类加的和等。
(4)学生整理解决问题的步骤:理解教师对于算法的定义,检查个人使用了多少步骤来完全解决一个问题。
(5)思考:同学们在用口头表达自己的求解过程,其实就是对算法的描述,思考一下,有没有更好的描述算法的方法,有没有更加规范的描述算法的方法。
在这一阶段的学习中,学生的注意力还是在解决问题上,而这个时候的解题方法和算法还有很大的区别,描述方式也与算法的描述方式有很大的区别。为了让学生顺利地完成知识的转化,教师应该在教学设计中注意让学生保留一些人为解题可能省略的细节或步骤,这些细节或步骤却往往是设计算法的关键。
4.讲解三种常用的算法描述方式,着重讲解流程图
在这里,教师并不要急于让学生把刚才的数列算法用流程图表示出来,可以让全体学生尝试用自然语言写下算法的每一个步骤。然后,师生共同尝试着用流程图的形式来翻译自然语言所描述的算法,当然,这个过程中要求教师对流程图和自然语言的区别进行分析,从而帮助学生正确地完成翻译工作。
(1)如果使用的是Visio 2003软件,那么教师可以展示如何使用该工具,绘制基本流程图。当然教师完全可以使用Word工具中的绘图工具栏来绘制基本流程图,甚至使用手工绘图,同样可以达到认知、练习的目的。
(2)先认识软件中能否找到书中的所有流程图符号(其中连接框是没有的,因为软件绘制中不存在绘图空间不够的问题)。
(3)学生将个人的数列求和算法用流程图的方法绘制出来。
5.介绍“结构化”程序设计思想,讲授程序的三大结构
以生活中的示例说明,复杂的问题都可以划分成小的问题来解决,如造船、轨道延伸等工程都是采取“分而治之”的思想。对于三大结构,要求学生自己寻找最简单的示例来描述。
6.复杂问题算法中掌握程序三大结构
可以使用书后练习ATM取款作为复杂问题,教师也可以自己寻找复杂问题。要求该复杂问题的算法包含三大结构,并有一定的难度,但可以比较清晰地划分模块,将一个算法分解成几个小的算法。以小组的形式开展活动,每个学生或每两个学生解决一个小算法,然后小组将多个算法拼合起来,并尝试指出其中的三大结构分别出现在算法的哪个部分中。
7.总结
通过解决几个算法的设计与描述,让学生体会到算法是程序的灵魂。要编写一个优秀的程序,必须要设计一个好的算法,并且用直观易懂的方法来描述算法。在碰到复杂的问题时,需要使用结构化的设计思想来设计算法,并且划分成若干个比较简单的模块来完成。这也是引导学生学会“化整为零”的思想,同时便于牢记程序三大结构。
靶向练习
练习题:
1.程序设计步骤包含六步分别是:分析要解决的问题、研究解决问题的答案、编写程序、程序的调试、程序的修改和维护、撰写程序说明文档。
2.程序的基本结构分别是顺序结构、分支结构和循环结构。
3.算法的描述方法有很多,常用的有自然语言描述、流程图描述和计算机语言描述。
思考题:
1.能否把ATM机取钱的过程用算法的表示方式表达出来?
2.结构化的程序设计有什么优点?
答:(1)对于极其复杂的程序,可以将复杂的大问题变成一个个易于解决的小问题,便于构造整个大程序。(2)便于多人同时设计一个大程序中的不同部分。(3)便于程序的后期调试和维护工作,一旦某一功能错误,无须对所有程序进行修改,只要调试其中某一个单独模块即可。