高中算法课的举一反三教学例谈

2017-04-07 12:25程启帮
东方教育 2016年22期
关键词:排序代码书本

程启帮

高中信息技术“算法与程序设计”是锻炼学生计算思维的重要课程,其中以“冒泡排序、选择排序”为核心内容的排序算法是该门课程的重难点,是信息技术高考必备内容,也是学生最感到疑难的易丢分内容。笔者在教学实践中得出“举一反三”的教学思想与训练方法,现与大家分享。

例如,在教学“选择排序”时,我们往往只介绍书本中提出的思路,其核心的程序结构如下:

让i从1到n-1循环(共n-1遍加工)

k=i(k用来保存第i位置上最终放置元素的下标)

让j从i+1到n循环

如果d(k)>d(j),就把j的值保存到k中

循环尾

如果k≠i,那么

交换d(k)和d(i)的值

条件尾

循环尾

相应的程序代码:

For i=1 To n-1

k=i

For j=i+1 To n

If d(k)>d(j) Then k=j

Next j

If k<>i Then

t=d(i):d(i)=d(k):d(k)=t

End If

Next i

上述代码是教材中介绍的算法,思路清晰,经过教学后,学生能够理解。教学是否就到此结束呢?笔者是继续拓展,引导学生不要局限于书本的思路,尝试去改进算法,启发学生“变量能否再少一点?目前代码中有k、t两个中间变量,可否尝试减少一个?”笔者在教学中,发现课堂上有学生马上想到了如下改进方法:

For i=1 To n-1

For j=i+1 To n

If d(i)>d(j) Then

t=d(i):d(i)=d(j):d(j)=t

End If

Next j

Next i

无独有偶,竟然在2016年4月信息技術高考试题第11题中出现了类似题目,有如下程序段:

For i=1 To 2

For j=5 To i+1 Step -1

If a(j)>a(i) Then

t=a(j):a(j)=a(i):a(i)=t

End If

Next j

Next i

数组元数a(1) 到a(5)的值依次为“33,24,45,16,77”,经过该程序段“加工”后,数组元数a(1) 到a(5)的值依次为

A.77,45,33,16,24 B.77,33,45,16,24

C.77,24,45,16,33 D.77,45,33,24,16

研究和编写过“选择排序的程序变式”的学生在考试中尝到甜头,能很快找到解题的关键点:若能判断出此段代码的核心算法是选择排序,定能选出正确答案;但如果学生没有接触过这段代码,考试中可能误判成冒泡排序,故而失分。

在冒泡排序、选择排序的算法教学中,我们不应局限于书本提出的一种思路,利用“一题多变”举一反三思想,引导学生拓宽思维,对原有程序的改编,至少有以下几种思路来训练程序的变式:

总之,在高中算法课教学中,加强一题多变、一题多解等举一反三的思维训练,有利于发展学生的发散思维能力,以提高学生解题的灵活适应力。

猜你喜欢
排序代码书本
恐怖排序
节日排序
手来释卷
神秘的代码
四书五经有哪些
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
近期连续上涨7天以上的股
蠢骡驮书