算法与程序设计
“算法”是关于解决问题的计算过程的描述,即解决问题的方法和步骤的描述;“程序设计”是使用计算机可理解的语言表达算法的过程。本模块介绍计算机解决结构化应用问题的基本方法,为选修模块。
通过本模块的学习,学生应该体验客观世界的计算机对象化表征和算法思维,掌握几种基本算法;能运用面向对象的方法,设计解决简单问题的算法,并能初步使用一种面向对象的程序设计语言,编制程序实现算法解决该问题。
本模块的教学,要强调理论与实践的结合,注意寻找、发现身边简单的实际问题,进而设计出算法和计算机程序去解决这些问题。本模块着重强调的是算法设计与运用程序设计语言解决实际问题的方法,故对程序设计语言不作具体规定,可根据实际条件加以选择。
本模块由三个主题组成:
算法与程序设计
计算机解决问题的基本过程
面向对象程序设计语言初步
算法例举
(一)计算机解决问题的基本过程
1、内容标准
(1) 了解算法和计算机程序的基本概念,理解程序执行的三种基本结构:顺序结构、选择结构、循环结构,了解计算机程序执行的基本过程。
(2) 了解算法的表示方法;能用自然语言、流程图、伪代码等方法描述算法,重点掌握流程图描述算法的方法。
例1 农夫、狼、山羊和蔬菜过河问题。一个农夫带着一条狼、一头山羊和一篮蔬菜过河,但只有一条小船,并且每次只能让农夫带一样东西过河。农夫在场的情况下一切相安无事,一旦农夫不在,狼会吃羊,羊会吃蔬菜。问聪明的农夫如何解决过河问题。
例2 求解Sum=1+2+……+(n-1)+n。 例3 两个正整数最大公因子的计算问题。
(3) 了解程序设计环境的基本知识,了解程序设计语言、编辑程序、编译程序、连接程序以及程序开发的环境。
2、活动建议
(1) 选择若干简单的数学计算问题,在教师的指导下,学生分小组设计相应的算法,并使用某种方法描述这些算法。
(二)面向对象程序设计语言初步
1、内容标准
(1)理解并掌握程序设计语言的基本知识和技能:语句、数据类型、变量、常量、表达式、函数、三种程序结构的实现等。
例1 顺序结构实例:交换两个数据的算法。 例2 选择结构实例:求两个数中的大数的算法。
例3 循环结构实例:鸡兔共笼,一共有30个头,90只脚,求鸡兔各有多少只?
(2)理解面向对象程序设计语言的基本原理;掌握类、对象、属性、事件、类封装、继承、重载、事件驱动等的概念;理解客观世界的计算机对象化表征。
(3)理解面向对象的模块化程序设计方法。 (4)掌握调试、运行指定程序的方法。 2、活动建议
(1) 选择一个实例,根据解决问题的要求,用面向对象的方法进行表征,分析设计算法,编写源程序,调试并运行该程序。
(三)算法例举
A 用解析法设计算法 1、内容标准
(1) 了解解析法的基本概念及用解析法设计算法的基本过程。 (2) 能够用解析法分析简单问题,设计算法,编写程序求解问题。 例1 求解一元二次方程根的算法。使用一根长度为L厘米的铁丝,制作一个面积为S的矩形框,要求计算出满足这种条件的矩形的边长h和宽度w。(归结成求一元二次方程aX2+bX+c=0的根)
例2 两个日期之间天数的计算。计算从y1年m1月d1日起,到y2年m2月d2
日之间的天数。
2、活动建议
(1) 上机实习,获得解决解析法中两个实例的可执行程序。
(2) 从其他科目如数学、物理、化学等的学习中选择计算问题,确定解决该问题所需的计算公式,并用流程图描述问题的计算过程,编写程序,获得计算结果。
B 用穷举法设计算法 1、内容标准
(1) 了解穷举法的基本概念及用穷举法设计算法的基本过程。
(2) 能够根据具体问题的要求,使用穷举法设计算法,编写程序求解问题。 例1 一张单据上有一个5位数的号码,其中百位数和千位数已模糊不清,但知道该数能被57或67除尽。设计一个算法,找出该单据原有可能的号码。
例2 在一个直角三角形中,三条边a,b,c的长度都为整数,且一条直角边a的长度已确定(例如为8),斜边c的长度不能超过某数I(例如为100),找出满足条件的所有直角三角形。
2、活动建议
(1) 上机实习:获得解决穷举法中两个实例的可执行程序。
(2) 从生活实际中选择需要用穷举法计算的问题,确定解决该问题所需的计算公式,并用流程图描述问题的计算过程,编写程序,获得计算结果。
C 查找和排序算法 1、内容标准
(1) 了解数组的概念及使用数组存储大量数据的基本方法。 (2) 掌握数据查找的基本算法。 (3) 掌握基本的排序算法。
例1 使用顺序查找算法和对分查找算法查找特定数据。 例2 使用选择交换算法对数据进行排序。 2、活动建议
(1) 上机实习:根据学校体育比赛数据,使用顺序和对分查找算法分别设计一个程序,以查找某个班级或者某个运动员的比赛成绩。
(2) 上机实习:设计一个程序,按照选择交换法,把学校运动会比赛成绩(无序)按降序排序后存储。
D 用递归法设计算法
1、内容标准
(1) 了解使用递归法设计算法的基本过程。
(2) 能够根据具体问题的要求,使用递归法设计算法,编写递归函
数求解问题。
例1 写出两个正整数乘积m*n递归函数。 例2 写出阶乘n!的递归函数。 2、活动建议
(1) 上机实习,获得递归算法中两个实例的可执行程序。