摘要:程序設計的教學。以興趣教學為主線,從學生感興趣的實例入手,引導學生建立程序思想;適當變換問題,做好學習興趣的保持工作,加深學生對程序結構的理解;適度延伸、拓展問題,加強學生學習興趣的培養,遵循這樣的思路去安排教學內容,最終提高學生們獨立分析問題、解決問題的能力。
關鍵詞:程序設計;興趣;層次
在全面提高學生自身素質的教學改革大潮下,不少教師致力于語言程序設計的教學研究,通過程序設計教學提高學生分析問題、解決問題的能力,從而使學生初步獲取程序設計思想。筆者通過多年的探索,總結了三層次教學法,收到了較好的效果。
第一層次,注重從貼近生活的簡單、有趣的實例入手,引導學生建立程序思想。
⑴貼近生活的有趣實例,更可以激發、調動學生的學習興趣。學習興趣的激發,使專業知識的傳授成為可能,對新知識、新思想的引入起到了鋪墊作用。例如,在利用c語言循環結構程序解決求階乘問題時,先提出問題:“求5!,結果是多少?你能歸納出人腦求階乘一般過程嗎?”學生會很快說出5!是120,經引導也會歸納出人腦求階乘一般過程:①先用1*2,記住結果2;②再用結果2乘3(2*3),記住結果6;③依次用結果乘后面的數,直到5為止。最后,大腦中記下的是1*2*3*4*5的結果120,在此基礎上,向學生提問:想一想,如何用所學的程序思想實現這一過程呢?這種安排充分調動了學生的積極性,并使之維持在最佳狀態,為循環結構程序思想的引入做好了鋪墊。
⑵抓住學生興趣的最佳狀態,注重人腦處理問題向電腦處理問題的遷移過程。仍以編程求5!為例,計算機用變量存放數據,把乘積的結果放在變量s中,s的初值為1(即s=1),按照s=s*1,s=s*2,s=s*3,s=s*4,s=s*5的階乘規則,求出5!的值放入變量s中。我用一個課件演示了這一過程,以強化學生對計算機求解階乘這一過程的認識,初步構建編程的結構思想,完成人腦解決問題模式向編程解決問題模式的遷移。
⑶結合程序設計語言,引導學生建立程序流程圖。流程圖的建立,是完成程序設計的關鍵,確立流程圖的過程,最能鍛煉學生的邏輯思維,從而培養學生分析問題、解決問題的能力。結合求5!問題,可分3步啟發、引導學生完成流程圖:第一步,抓住最基本、最本質的問題,聯系程序設計中的基本結構。上例中,用變量s作為存放階乘的結果,并為變量s賦初值1,i為中間變量,其值的變化范圍為1到5(即為1,2,3,4,5)。在程序的三種基本結構中,用什么結構可以完成這個工作呢?學生們會回答用循環結構。第二步,要把握問題的整體性,聯系程序的基本結構解決實際問題。在求解問題的過程中,第一次(i=1時)s=s*1,第二次(i=2時)s=s*2,第三次(i=3時)s=s*3,第四次(i=4時)s=s*4,第五次(i=5時)s=s*5,變量s在每次運算之后值都是變化的,應怎么辦?引導學生得到s=s*i這個表達式 ;第三步,完善流程圖。根據上述的分析,采用課件分步驟、形象地表現出設計流程圖的思維過程,培養了學生們分析問題和邏輯推理的能力。流程圖如下圖所示。
⑷根據流程圖,由學生寫出程序,同時讓學生上機驗證程序的可靠性。這樣做,可以在讓學生體會程序結構思想的同時,強化他們對程序設計語言的理解與掌握;學生上機親手驗證,保持了濃厚的學習興趣,更有助于對知識的理解與掌握,同時也鍛煉了學生們的上機操作技能。 下面是根據流程圖由學生寫的源程序。
main()
{ int s=1;
for(i=1;i<=5;i++)
s=s*i;
printf(“5!=%d”,s);
}
學生通過上機調試,得出結果:5!=120
第二層次,注重學習興趣的保持工作,適當變換問題,加深學生對程序結構的理解。這層次是在第一層次的基礎上引發出來的,目的是讓學生靈活處理問題,真正理解、掌握并消化第一層次中的程序設計思想。為此,要注意以下兩方面。
⑴提問要緊扣上層次解決的問題去設計,在進一步掌握并消化所學知識的基礎上,提高學生對c程序設計思想的認識水平。例如,求5!中,在完成了第一層次教學的基礎上,可提出以下兩個問題:①若求10!,怎么修改程序?②若把i變量的初值改為0,終值改為4,行嗎?為什么?馬上會有學生將源程序的第三行改為for(i=1;i<=10;i++)并運行程序,結果同學們發現屏幕上并沒有如預期想象的那樣給出正確結果,而是顯示出一個錯誤對話框,含義為“數據溢出”,同學們百思不得其解。這時教師提示同學們將程序做一點修改,把變量s定義為長整型long int,試試看運行情況如何?通過“數據溢出”同學們明白了,整型只能表示-32768-32767之間的數,而10!已經超出了整型表示的范圍,所以會出現“數據溢出”的錯誤。同學們將源程序的第三行改為for(i=0;i<=4;i++)并運行,得出結果為“0”,大家經過分析發現中間變量i的起始值不能為0,終值也不能為4,盡管這樣循環也進行了五次,但起始值和終值的不正確,也造成了運算結果的大錯誤,通過這些問題幫助學生理解并消化求階乘的方法;從本質上理解掌握循環結構;掌握用程序設計思想解決求階乘問題的方法;同時也加深了學生們對于循環結構的理解與掌握。
⑵對于提出的問題,教師不要過多提示,要求學生上機實踐,根據實踐結果進行回答,然后教師再做小結,將實際問題理論化,最終突出程序的基本結構,用結構教學來帶動程序語言的學習與掌握。這更有助于培養學生分析問題、解決問題的能力。
第三層次,在一、二層次的基礎上,適度延伸、拓展問題,以拓寬學生利用程序設計思想分析問題、解決問題的思路,同時激發并保持學生學習理論知識的興趣。
⑴對于問題的延伸展開,要注意適度,以能充分應用本節課的程序思想,又有一定的提高為原則。如用程序求階乘的問題,同學們都已會了,那么讓同學們思考:能否用一個程序求1!+2!+3!+4!+5!的值,這個問題多數同學不會立刻有思路,教師就要鼓勵學生們相互探討,尋找解決方案。這一層次的提問,不必立刻求得結論,可適當提示,留做課下作業,讓學生考慮的時間長些,這樣不僅可以加深學生對本節課程序設計思想的理解、把握,還可充分發揮學生們的想象力、創造力,培養他們分析問題、解決問題的能力,使學習興趣更好地保持、延續下去。
⑵注意加強實際問題向程序思想的轉化,使學生們真正把握用程序思想解決實際問題的方法與策略。首先,把復雜問題分解為簡單問題,確立好加工的模塊,使每一個模塊都能用程序設計中的某種基本結構解決。其次,做好各模塊間的關聯,用流程圖描述出來。這樣就實現了實際問題向程序思想的轉化,學生按照流程圖,根據所學語句,就可以很快完成程序的設計。
參考文獻:
[1]C語言程序設計:現代方法(第二版)[美]金著,呂秀鋒,黃倩譯 人民郵電出版社
[2]C語言編程基礎(第三版) 王森主編 中國工信出版社
作者簡介:蔡衛東,男,漢,常熟市濱江職業技術學校,高級講師,本科。