【摘要】《C語言程序設計》是大學的一門知名難課,為適應形勢之需,在中學開設這門先修課勢在必行,通過筆者近兩年在中學進行C語言程序設計課程的推廣教學,并對中學階段程序設計教學的方法和途徑進行探討和總結,希望能對C語言程序設計教學有所幫助,旨在進一步提高C語言程序在中學階段的教學效果,縮短中學到大學的過渡期。
【關鍵詞】C語言;中學教學;程序設計
中學階段是人生的黃金階段,在這個階段,開始樹立崇高的理想,開始確立正確的人生觀,開始吸取大量文化知識,為成長為一個對社會有用的人才奠定了各方面的基礎;現代教育教學理論認為,中學教學要以學生為中心,充分發揮學生的想象性和創造性,鼓勵學生對知識的探索和追求,鼓勵學生求異、求新,尊重學生的個人感受和獨特見解,從而體現出學生的首創精神。C語言作為當今最為流行的程序設計語言之一,也是廣大中學生喜愛的一門技能課,在本課程教學中,由于基本概念比較多,編程規則繁多,各種使用技巧靈活,導致廣大學生感到學習困難,產生一定的畏懼心理。根據筆者近兩年在南通市實驗中學等學校進行C語言程序設計課程的推廣教學,談談如何在中學階段進行《C語言程序設計》課程教學的體會。
一、分析案例,培養興趣
俗話說:“興趣與愛好是最好的老師”。由于中學生的數學知識基礎沒有比較薄弱,在C語言課程教學時,常常會碰到學生晦澀難懂或是興趣索然的知識點,此時老師應該根據C語言的具體特點,在講清基本概念的同時加強知識的趣味性,讓知識點變得通俗易懂,引發學生的興趣,所以C語言教學的首要任務就是啟發廣大中學生的學習興趣。為了讓學生對編程有興趣,舉出如“猴子分桃”、“雞兔辨腳”等趣味算法,引導學生的學習興趣。隨著課程的不斷深入,大量的語句格式、語法規則、定義和要求出現,大部分學生會產生枯燥無味的感覺。講授時知識點時,先給出程序的調試結果,然后介紹相關的基本定義和規則的方法,這樣,有效的避免了空洞的理論,把“語言”課講生動、有趣。例如在介紹輸出函數(printf)和輸入函數(scanf)時,先給出實際案例,通過編寫一些短小的程序演示程序的輸出結果,同時讓學生通過簡單改變函數(printf)和輸入函數(scanf)的相關參數就看到結果的不同,這樣學生就會對這兩個函數以及相關程序具有較強的感觀性,可提高學生的興趣;然后再介紹輸出函數(printf)和輸入函數(scanf)的參數表,參數表中給出了輸入或輸出的變量,強調當有多個變量時,用英文逗號(,)分開。
二、夯實基礎,循序漸進
在C語言課程教學過程中,本著“夯實基礎,循序漸進”的指導思想,針對中學生的特點和教學大綱的要求,認真歸納教學內容,以基礎知識為重點,同時有效地繞開難點,以縮小臺階,達到循序漸進。例如,在介紹正負數時,可以先把簡單的四位二進制數依次圍成一圈如圖1所示,再設想在該圖中將A點處把圓周剪開,然后把圓周拉直豎立起來如圖2所示,在圖1.2中表示了與十進制數0~15相對應的全正數的四位二進制數。若在圖1中的B點處把園周剪開,然后把園周拉直豎立起來如圖3所示。此圖的上半部0000~0111表示了十進制的正數0~7;下半部1000~1111則表示了十進制的負數-8~-1。這樣對于有正負的二進制數,其最高位為0者為正數,最高位為1者為負數,有效地回避了傳統的“真值”、“原碼”、“反碼”、“補碼”等諸多概念,從通俗事物實質出發,讓學生輕松掌握二進制數據的正反數表示和范圍。在介紹數據類型、運算符、表達式時,由于這些數據形式種類繁多,放在一塊學習起來難度大,于是先介紹算術型的數據類型、運算符以及相關的表達式,使學生學習起來沒有想象中的那么難;在學生掌握了這些概念后,讓學生練習編寫簡單實用的小程序,然后趁機引入基本輸入、輸出函數。這樣一來知識跨越度小,學生的信心不僅得到增強,學習積極性也被提高起來。這種在掌握理論知識的基礎上,通過一個個小程序的層層推進,引入課程內容,使得學生的學習每一步都有較好的基礎,學生的學習是在“走臺階”,而不是“三級跳”,真正做到知識的循序漸進、螺旋上升。
圖1 四位二進制數
圖2 全正數四位二進制數
圖3 有正負四們二進制數
三、類比啟發,融會貫通
類比啟發,融會貫通是學習C語言的兩大法寶。類比啟發與融會貫通是指針對程序設計中的具體實際問題,啟發學生從不同的角度、采用不同的知識去思考、解決相應的問題,使學生準確地把握教材的整體結構以及每章內部的相互關聯,辨別其中的區別與聯系;同時對提高學生系統思維和整體把握能力也大有益處。例如:在定義一個類時,這個類要分兩大部分:說明部分和實現部分,說明部分來說明類中的成員的數據成員和成員函數即方法,定義了類的public(公有的)、private(私有的)和protected(保護的)訪問權限;類的實現部分主要用來對一些在類體內只說明沒定義的成員函數進行定義。下面是一個類定義的程序代碼:
#includelt;iosteam.hgt; //類的說明部分
Class Base{
int x,y,z;
…
fun( ){…}
… } //類的使用部分
int main( )
{ Base b; //創建一個類Base的對象b
…
b.fun( ); //給對象a發消息,調用成員函數fun( )
return 0;
}
又如,我們經常遇到的練習題:“給定若干學生信息(含班級、學號或姓名),錄入學生的成績,然后可根據學號或姓名查詢成績并可以任意按姓名或學號或成績的大小順序依次輸出”,要求學生用數組和結構體兩章知識分別求解。引導學生自行進行比較兩種知識的不同與聯系,加深對程序設計思想的理解。從而得出結論:結構體的出現,是為了解決數組只能存放相同數據類型的數據的限制。這樣縱向類比可以顯示教材知識發展的軌跡,揭示知識發展的深度,達到不知不覺讓學生學會了融會貫通。
四、分組學習,系統訓練
合作學習是在充分發揮學生個體能力的基礎上,培養學生的團隊合作精神的一種好的學習方法。學習小組是由不同性別、不同成績、不同能力的學生組成,每個小組為了完成一個共同的編程題目,有的學生負責查找資料、有的負責算法、有的負責寫程序,然后大家一起進行程序調試、優化與提高并分享程序結果。實際分組時按自愿原則每8人一組把全班分成相對固定的若干小組,然后由老師根據學生能力的強弱進行適當調配,確保每一組學生好差搭配,以便在學習中互幫互助,讓學生動口、動手、動腦,開發學生的潛能,促進全體學生的發展,培養學生團結合作的精神,通過程序模塊測試、系統知識訓練最終達到學生整體編程能力的提高。
五、結束語
在中學階段要完成好C語言課程的學習,必須在具體教學過程中擯棄大學教育中采用的傳統教學方法,通過案例分析與興趣培養相結合、類比式啟發與融會貫通相結合、系統培訓與知識傳授相結合的途徑,采用各種啟發式教學方法啟發學生的思維,在發揮教師主導作用的前提下,通過小組學習模式,充分調動中學生的積極性和主動性,引導學生通過自己的獨立思考和模塊訓練,融會貫通地掌握系統的C語言知識,讓廣大學生主動學習,滿足他們的求知欲,擴大他們的知識面,為他們到大學后知識進一步提升打下堅實的基礎。
參考文獻
[1]郝惠馨等.C語言程序設計實驗教學探索[J].計算機教育,2010(09):82-84.
[2]張艷明.C語言程序設計教學體會淺析[J].電腦知識與技術,2010(04):2690-2693.
基金項目:江蘇省現代教育技術研究項目(2013-R-25729);南通大學教學研究課題(2011B39);南通大學2011年精品課程培育項目(JP11021)。
作者簡介:楊永杰(1969—),男,碩士,南通大學電子信息學院教授,碩士生導師,從事C語言程序設計、嵌入式系統教學與應用。