7.4.5 程序设计的教学设计
程序设计的教学特别要注意渐近性原则,由浅入深,由仿制到独创,要特别鼓励创新。
1.框架式教学设计
用例子将解决某类问题的程序讲解之后,归纳其基本结构框架,学生可以很容易地套用此框架解决同类问题。
例如,累加器程序设计框架可分析归纳如下:
累加器变量S=初值
FOR I=1 TO N
给定一个加数
S=S+加数
NEXT I
输出S
用此框架可解决的一类问题示例:
(1) S=1+2+3+…+1000
(2) S=12+22+32+…+1002
(3) S=21+22+…+263
(4) 将键盘输入若干数量加等等
(5) 阶乘程序
(6) S= 1+(1+2)+(1+2+3)+ …+(1+2+3+ … +n)
2.算法的逻辑分析
上面的教学设计是仿制,要进一步教会学生掌握程序设计中特有的一些逻辑思维方式。如累加的算法其核心是计算机程序中常用的递推思维,将若干数的求和变成若干步的两数相加,新和=前一次和+加数,用数列形式,即 An=An-1+加数。
(1)递推算法
许多问题的解决,都要用到递推的算法。这类问题的特点是:①与自然数有关,如斐波拉契数列问题;②有明显的递进步骤。复利计算、增长率问题都可看成是在前一次的基础上增加一个定比。字符方式的图形也是一行一行的进行。
例:用字符“*”号构成n行金字塔图形打印。
算法分析:用具休的N值为例讲解,N=5。但要强调不能就此用5个PRINT语句来实现。而要向一行又一行递推方式引导。实际图形特点是由两类字符构成,左边的空格和“*“。研究空格个数和“*”号个数与行数的关系式如下,
(2)穷尽算法分析
把可能出现问题的情况都考虑到,让计算机逐一处理,这一逻辑方式也是计算机程序设计中常用的方式。例如求不定方程的整数解就常用此法。
例:求X2 +Y2=19992的正整数解。
算法分析:容易估计到0<X<1999,同0<Y<1999 因此正整数解包含于集合
(3)渐近式算法分析
从个例一步一步的算法分析,最后归纳到一般的算法。例如求N 个数A(1),A(2),……,A(N)的最大数M的算法分析,可以如下进行:上式可演变为循环方式:
为发展能力,此问题还可以进一步形象化和延伸。如把这个方法比喻为擂台,还可以有标志法,即记忆下标值,还有直接交换法,即直接用A(1)、A(2)比较、不用变量M。
(4)逐步求精算法分析
逐步求精包含两层意思:一是自项向下,逐渐细化的过程;二是由粗到精、由繁到简的过程。
例:打印出某毕业班学生成绩总分在前三名的成绩。可假定这些成绩单存入A(1)、A(2)、、、、A(N)中了。
第一层:找出前三名的成绩打印出来
第二层:找出第一名的成绩= >M1
找出第二名的成绩单=>M2
找出第三名的成绩单=> M3
打印出M1、M2、M3
第四层:A(1)、A(2)、…A(N)中最大数的下标=>K
M1=A(K):A(K)= -1去除最大数
A(1)、A(2)、…A(N)中最大数的下标=>K
M2=A(K):A(K)= -2
A(1)A(2)、…A(N)中最大数的下标=>K
M3=A(K):A(K)= -3
打印A1、M2、M3
第五层:仅需细化A(1)、A(2)、…A(N)中最大数的下标=>K即可。
第六层:该算法中有三段是重复的程序段即第五层的程序,考虑精简。精简的方式可用子程序或将三个比较归一个循环。
以上几种算法、分析方式往往是结合进行的。
3.算法的评价
包括正确性、可读性、速度、存储空间等评价算法。中学的算法应着重在正确性和可读性。
例:将三个数A、B、C由大到小排序输出。
算法分析如下:
第1种算法,穷举列出六种情况
第2种 算法
因此上面六行将有12个判断,其中有的是不必要的。
这个算法减少了判断,但增加了阅读程序的困难。如果更看重算法的可读性,第1种算法反而是更好的了。
4.一些典型程序算法
(1) 离散函数的极值问题
例:已知矩形的周长是整数L,且长和宽也是整数,求矩形面积最大时的长和宽?可用穷举比较的方法
设边长为a和L-a,则 0<a<l,S=a(L-a)算法:S=0
(2) 分类求和、统计问题。
例:将学生考试成绩分为五类统计每类的人数。分类如后:60分以下;60~69分;70~79分;80~89分;90~100分;
(3) 增长率、复利等问题
(4) 数列值和数列求和问题。
(5) 数、表中数字、字符的查找问题。
(6) 数列的排序问题。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。