“循序渐进”引导学生编写程序

时间:2022-09-13 04:59:21

“循序渐进”引导学生编写程序

摘要:阐述了中等职业教育的C程序设计中运用递推法的教学,利用循序渐进、由浅入深的教学方法,取得了事半功倍的效果。

关键词:职业教育;循序渐进;递推法;教学

C语言程序设计是江苏省普通高校单独招生计算机应用专业的一门专业课,也是学生所接触的第一门程序语言课。在实际教学中,笔者发现对于大多数单招学生来说,都觉得C语言程序设计深奥、枯燥、难懂,学习起来存在一定的困难,特别是应用性文字题目,学生更是难以下手处理。通过一般的教学方法很难让学生对程序设计有很好的理解并掌握:一方面,学生本身的学习接受能力有限;另一方面,一般的常规教学方式很难提起学生的学习兴趣。但是,由于单招学生面临着高考,因此如何提高这门课程的课堂效率,让学生能够理解并掌握,教师应该怎么做,是值得研究探讨的问题。

笔者在教学中尝试利用循序渐进、由浅入深的方法进行程序设计语言的教学,取得了良好的效果。例如,在C语言程序设计中“递推法”这一节,我是这样开展的。

一、抛砖引玉

例1.一个数列,它的头两个数是1,1,第三个数等于前两个数之和,以后每个数分别等于该数前两个数之和,请编写程序,打印出此数列的前12个数。请同学们思考如何编程实现?

分析:

(1)初值有两个。

(2)打印出此数列的前12个数,因此利用循环实现,并且循环的次数确定,用for结构实现循环。

(3)循环体内的变量赋值问题,由于后面的任何一个都是前两个数之和,因此,在循环体内要有改变变量值的赋值语句。

学生板书演示:

#include

main()

{int i,f1,f2,f3;

f1=f2=1;

print f(“%5d%5d”,f1,f2);

for(i=3;i

{f3=f1+f2;

print f(“%5d”,f3);

f1=f2;

f2=f3;

}

printf(“\n”);

}

运行结果:

1 1 2 3 5 8 13 21 34 55 89 144

我就学生的板书给出点评,并引出递推的概念,所谓递推是指在前面一个(或几个)结果的基础上推出下一个结果。有许多问题没有现成的公式直接求出结果,而必须采用递推的方法逐步求出结果。

二、抽丝剥茧

接着我在黑板上写上“兔子数列”,同学们一阵笑声。

例2.兔子数列。先用PowerPoint让学生看一个有趣的问题:有一个人第一月底时在一间房子里放了一对刚出生的小兔,小兔一个月后能长成大兔,再过一个月便能生下一对小兔,次后每个月生一对小兔。如果不发生死亡,那么到年底这个人有多少对兔子?要求编程实现。

学生看到这种题目,都拧紧了眉毛。

先由学生自己思考,我不急于公布答案,而是与同学们共同做如下研究:

我们用表示一对大兔,用表示一对小兔,逐月统计兔子的对数(用PowerPoint逐月显示,加以讲解,务必要学生理解递推的本质)

记第n月底的兔子对数为Fn,则:

F1=1,F2=1,F31=2,F4=3,F5=5,F6=8,…

观察数列{Fn}规律很容易发现,从第三项起,每一项都是它前两项的和。

(此时大部分学生都说跟例1是一样的,并都有一种恍然大悟的表情)

程序也就可以延用例1的程序。

经过上机调试,我们得到这样一个数列:1,1,2,3,5,8,13,21,34,55,89,144。这个数列是由意大利数学家斐波那契于1202年从兔子的繁殖问题中提出的,为了纪念他,人们把这种数列叫斐波那契数列。

在学生掌握了此题后,我引导学生对于给出的一个问题可以从以下几个方面来寻求有效的算法:(1)建立数学模型,列出有关方程式;(2)根据方程式明确需要的变量个数及类型;(3)选择适当的方法为变量提供相应的值;(4)对数据进行处理;(5)输出结果,再根据每一步的具体情况,进一步细化。这种方法可以引导学生了解程序设计和思路和方法,有助于他们把握问题全局,分阶段逐步深入细化,使得每个阶段的问题都在容易理解和处理的范围内,遇到问题不会无从下手。

三、思维拓展

有一楼梯有18级台阶,今假设有以下3种上法:一次上1级,一次上2级,一次上3级,问要上这18级台阶,共有多少种上法?

请同学们应用今天学的知识来分析问题,建立相应的数学模型,找出各量之间的关系。让学生练习,教师边巡视边指导。

最后让一学生来给出分析过程:

假设只有1级台阶,则有一种上法;

假设只有2级台阶,则有1+1,2两种上法;

假设只有3级台阶,则有1+1+1,1+2,2+1,3四种上法;

假设只有3级台阶,则有1+1+1+1,1+2+1,2+1+1,1+1+2,2+2,1+3,3+1七种上法;

依此类推,我们不难发现规律:

数列第一项为1,第二项为2,第三项为4,从第四项开始都是前三项之和,即:x1=1,x2=2,x3=4,xn=xn-1+xn-2+xn-3(n≥4)。

最后得出如下程序:

#include

main()

{long inti,x1,x2,x3,x4;

x1=1;x2=2;x3=4;

for(i=4;i

{x4=x1+x2+x3;

x1=x2;

x2=x3;

x3=x4;

}

print f(“共有上法为:%ld\n”,x4);

}

运行结果:

共有上法为:35890

四、思考

学生是程序设计的主体,教师是程序设计的组织者、引导者和合作者。程序设计语言学习的目的是学生的再创造,教师不应该把程序设计语言当做一个已经完成了的知识灌输给学生,而应该创造条件,让学生在学习程序设计语言的过程中,用自己的体验,用自己的思维方式去编写程序。学习不再被看成是一种被动地吸收知识、通过反复练习强化储存知识的过程,而是用学生原有的知识处理新的任务,并构建他们自己的知识体系的过程。

参考文献:

[1]谢网泉.单招生:相约在高校・计算机专业综合理论复习用书.原子能出版社,2009-08.

[2]谭浩强.C语言程序设计.3版.清华大学出版社.

[3]杨遇春.斐波那契数列教学设计[DB/CD].

(作者单位 江苏省常熟市滨江职业技术学校)

上一篇:浅谈煤矿技校生教学难点及对策分析 下一篇:集成电路制造工艺探析