摘要:闡述了中等職業教育的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<=12;i++)
{f3=f1+f2;
print f(“%5d”,f3);
f1=f2;
f2=f3;
}
printf(“\”);
}
運行結果:
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<=18;i++)
{x4=x1+x2+x3;
x1=x2;
x2=x3;
x3=x4;
}
print f(“共有上法為:%ld\”,x4);
}
運行結果:
共有上法為:35890
四、思考
學生是程序設計的主體,教師是程序設計的組織者、引導者和合作者。程序設計語言學習的目的是學生的再創造,教師不應該把程序設計語言當做一個已經完成了的知識灌輸給學生,而應該創造條件,讓學生在學習程序設計語言的過程中,用自己的體驗,用自己的思維方式去編寫程序。學習不再被看成是一種被動地吸收知識、通過反復練習強化儲存知識的過程,而是用學生原有的知識處理新的任務,并構建他們自己的知識體系的過程。
參考文獻:
[1]謝網泉.單招生:相約在高校·計算機專業綜合理論復習用書.原子能出版社,2009-08.
[2]譚浩強.C語言程序設計.3版.清華大學出版社.
[3]楊遇春.斐波那契數列教學設計[DB/CD].
(作者單位 江蘇省常熟市濱江職業技術學校)