徐小青 李曉東
摘要:針對教師與學生普遍認為高級語言“難教也難學”的現狀,文章從教學內容、教學方法與手段等方面介紹了“高級語言程序設計”課程所進行的改革。實踐證明,這些教學改革效果良好,不僅有利于培養學生學習興趣,而且有利于培養學生分析問題與解決問題的能力。
關鍵詞:C語言;教學內容;教學方法與手段;教學改革
中圖分類號:G642 文獻標識碼:A
1引言
我院“高級語言程序設計”課程是以C語言作為指定語言的。它不但成為計算機專業的必修課,而且也越來越多地成為非計算機專業的學習課程。但在“高級語言程序設計”課程教學中,許多學生都認為C語言涉及的概念比較復雜,規則繁多,使用靈活,容易出錯,且程序設計課程邏輯性又很強,學生不能很好地理解算法,編寫程序也很困難,教師教學和學生學習都感到困難,并在不同程度上產生畏難心理。特別是我院將C語言作為學生進校后首先接觸的第一門專業基礎課,這種現象尤為明顯,而C語言基礎打不牢會直接影響后續專業課程的學習。因此如何改革“高級語言程序設計”課程,進一步提高教學效果,成為專業課程建設中的一個緊迫任務。
本文根據多年的程序設計課程的教學實踐,對“高級語言程序設計”課程從教學內容、教學手段、教學方法等方
面提出幾點建議。
2教學內容
2.1教材的選擇
我院一開始使用的教材是由譚浩強教授編著的《C程序設計》,該書的特色是針對初學者的特點和認知規律,精選內容,分散難點,降低臺階,例題較為豐富,通過深入淺出的敘述,闡明C語言復雜的概念,知識結構系統、清晰、通俗易懂。但在編程思路和編程技巧方面較為欠缺。
在2005級學生中使用了Harvey M.Deitel和Paul J. Deitel編著的《C程序設計經典教程》,該書的特色是應用軟件工程原理講述結構化程序設計方法,加強對控制語句和模塊化的有效使用,并強調程序的清晰性,通過從各種渠道收集來的大量實例、習題以及項目,讓學生能夠有機會來解決現實世界中有趣的問題,對學生編程思路和編程技巧有很好的幫助。但在整個知識結構方面不如譚書系統和清晰。
由以上分析可知,兩本教材各有利弊,經過實踐比較,并結合我院學生的實際情況,現在計算機科學與技術系仍然使用《C程序設計經典教程》教材,而其他系使用《C程序設計》教材,但都給出若干本參考書,以彌補各自的不足。如電子信息工程系的參考書為:
《C語言設計教程》,薛萬鵬等譯,機械工業出版社
《C程序設計經典教程》,(美)Harvey M.DeitelPaul J.Deitl著,清華大學出版社
《從問題到程序——程序設計與C語言引論》,裘宗燕編著,機械工業出版社
《The C Programming Language》,Brain W.Kernighan,清華大學出版社
2.2課堂教學內容的改革
以譚浩強的《C程序設計》為例,教學內容主要包括C語言語法基礎、數據類型、程序控制結構、函數、指針、文件等。教材在內容組織上,在語法上講解過細、過多。在各章節的編程例子中,多數難度較大,分析較少;不夠形象,學生較難理解,且適用性不強。筆者本著“深入淺出,突出實用”的指導思想,在課堂教學過程中,對教學內容重新進行了歸納,將難點再次分散,以縮小臺階,達到循序漸進。例如,C語言數據類型、運算符、表達式種類繁多,放在一塊講授,學生學習起來難度較大,且過于枯燥,于是筆者就將其分散在不同的章節。譬如,先介紹算術型的數據類型、運算符以及相關的表達式,使學生學習起來沒有想象中的那么難,緊接著又教學生編寫簡單、實用的C程序,然后趁機引入基本輸入、輸出函數就順理成章了。這樣一來臺階小了,學生的信心也增加許多,學習積極性很快就被提高起來。對于生硬的語言敘述,盡量改用生動的、學生熟悉的例子進行比喻,進行詳盡引導。例如,在開始學習指針的概念時,教材對“間接存取”敘述比較深硬,學生難以理解,就借用比喻:將A房間的鑰匙放在B房間里,若要取A房間里的物品,就需要先打開B房間,取出A鑰匙,再打開A房間,取出A房間的物品,這就是“間接存取”。學生很快就能理解,也加深了指針的概念。在教學過程中,還應及時查閱英文版教材和有關報刊雜志,對較難理解的概念,用不同的方式給以解釋。
2.3實驗教學內容的改革
“高級語言程序設計”是一門實踐性很強的課程,既要掌握概念,更要動手編寫程序。其主要任務就是培養學生具有一定的閱讀程序、設計編寫程序的能力,分析問題、解決問題的能力和邏輯思維的能力。因此,上機實驗是學習程序設計語言必不可少的實踐環節,特別是C語言靈活、簡潔,更需要通過編程的實踐來真正掌握它。
筆者對實驗內容上進行了認真的探討,在實驗題目的設置上,應根據課時安排以及要掌握基本知識進行,一般一次實驗給出2~3個實驗題目,分為必做與選做。這樣做的好處是一方面保留基礎性實驗,相對簡單的基礎編程實驗。使學生能夠較順利地編寫出程序,并及時理解和消化課堂教學內容,同時也使學生獲得一定的成就感,使其學習熱情得到進一步的提高。另一方面,增加一些實用性強的、難度略大的實驗題目,以進一步提高學生的編程能力;同時還可以滿足較高層次學生的需要。下面以電子信息工程系為例介紹實驗內容的設置。
我院為非計算機科學與技術系和信息安全系開設的“高級語言程序設計”課程的實驗學時是12學時,共4個實驗。由于實驗課時較少,在實驗內容的安排上就顯得十分重要。第一次實驗安排在約6學時以后,實驗內容是“熟悉上機環境、編寫簡單程序”,其目的是讓學生熟悉C語言上機環境,學習完整的C程序開發過程和程序調試方法;理解簡單的C程序結構。為學生課下上機練習打下良好的基礎。鑒于函數、指針和文件是C語言的重點和難點,我們分別將其作為第二、第三、第四次的實驗內容;其他各章我們也給出相應的實驗題目,讓學生課下自己上機練習。
另一方面要重視實驗的總體要求,強調上機實驗要經歷三個步驟:
(1) 上機前的準備
讓學生寫出實驗預習報告。內容包括對實驗題目的理解和分析,選擇適當算法,畫出流程圖并編寫程序。分析可能遇到的問題及解決的對策。準備幾組測試程序的數據和預期的正確結果,以便發現程序中可能存在的錯誤。
(2) 上機輸入和編輯程序,并調試運行程序
首先調用C語言集成開發環境,輸入并編輯事先準備好的源程序;然后進行調式。在調試過程中,要充分利用C語言集成開發環境提供的調試手段和工具,例如單步跟蹤、設置斷點、監視變量值的變化等。整個過程應自己獨立完成。不要遇到一點小問題就找老師,學會獨立思考,勤于分析,通過自己實踐得到的經驗用起來更加得心應手。同時加大實驗的輔導。
(3) 整理上機實驗結果,寫出實驗報告
實驗結束后,要求學生整理實驗結果并認真分析和總結,寫出實驗報告。實驗報告要包括如下內容:
實驗內容:實驗題目與要求。
算法說明:用文字或流程圖說明。
程序清單
3教學方法與手段
在教學方法上,從以教師為主體的“滿堂灌”的方式轉向以學生為主體、教師為主導的教學方法。有效地培養學生的分析問題與解決問題的能力。以“選擇排序”為例,筆者沒有平鋪直敘地介紹算法與程序代碼,而是先給出例題:在長度為10的數組中找出最小元素,并與第一個元素對調,引導學生編寫出相應程序。然后給出新的問題:在后9個元素中最小值與第二個元素對調應如何修改;……;在后10-i個元素中最小值與第i+1個元素對調應如何修改;最后總結出選擇排序算法的全過程,直至整個程序編寫完整。即沿著問題帶出算法,由算法帶出程序設計語言的思路講述C語言中的各個知識點。整個講解過中結合板書,逐步引導,層層深入,取得很好的教學效果。
在C語言教學過程中,注意各章節講述中的前后呼應和類比,加深學生的理解與應用。例如以“求1000以內的所有‘水仙花數”例題為例,筆者先后分別在循環控制、數組和函數三章中進行了講解,讓學生自己總結出最佳的程序結構,提高編程能力。同時通過不同的解題方法,有利于學生加深對所學知識的理解,讓學生真正體會到C語言的靈活性,激發學生的學習興趣和求知欲。
另外在C語言教學過程中,還要充分發揮學生的積極性與主動性。筆者針對這門課程的特點,激發學生主動思考,課前可以給學生布置幾個專題,讓學生利用課余時間去思考、收集資料,并在課堂上組織學生發言和討論。這種教學法不僅可以讓學生獲得許多課外知識,同時也促進教學內容的改革,而且也有利于充分挖掘學生的學習潛力。
在教學手段上,積極采用現代化的教學手段,如多媒體教學、網絡教學等,這樣有利于激發學生的學習興趣,發展學生的主體能力;同時由于多媒體信息量大,也能夠優化教學過程。但多媒體教學也有一些不利之處,主要體現在不恰當的使用會分散學生注意力,影響主要問題的理解,也不利于發揮學生的想象力。在C語言程序設計課程教學過程中,考慮到課程的特點,揚長避短,將傳統教學與多媒體教學進行了有機的結合。例如可以將一些概念、語句的格式、大信息量的案例代碼制作成課件,在課堂做展示供學生增加信息量用。但對于案例分析或程序的編寫過程,就發揮傳統教學的優勢,進行課堂討論、板書講解、結合提問,將問題層層剖析、層層深入,達到師生互動的效果,學生的想象力也會得到充分的發揮,對問題的理解也變得更容易。另外,充分利用網絡資源,將電子教案、大綱、課件、習題等放在網上,供學生自行調用,同時通過其QQ、E-mail等形式對學生的提問進行
答疑、討論,以彌補課堂教學的不足。
4改革課程考核辦法
建立一個服務于課程目標的學生學習評價方法是一項非常重要的工作,考核不是目的,“以考促學”才是考核的本質。
傳統的期末“筆試”這種單一的、“一考定終身”式的考核方式,已遠遠不能滿足課程的需要。為使考核真正發揮“以考促學”的作用,我們改革了考核內容和考核方法,重視對學生學習過程的考核,重視實際動手能力的考核,側重考核學生對知識的融會貫通和靈活運用能力,而不僅僅是基本理論、基本知識的掌握。具體的改革措施如下:
(1) 變單一考核為復合考核,從多個方面對學生進行考核。課程總成績由平時成績、實驗成績、期中成績、期末成績四個部分構成。其中,平時成績考核包括對出勤、隨堂實訓、課堂提問、作業等部分;實驗成績考核是針對課程的4次實驗成績。
(2) 衡量這門課學習的好壞,不是看學生“知不知道”,而是“會不會干”。期末試題考核的方法不用是非題和選擇題,把重點放在讀程序、編制程序和調試程序。
實踐表明,這種考核方法不但能更客觀地反映學生的學習情況,同時也能促進學生學習,起到良好的教學效果。
5結束語
本文教學內容、教學方法與手段的改革,是根據實際教學過程中學生存在的問題提出的,并已經在“高級語言程序設計”課程教學實踐中加以運用,得到大部分學生的認可,取得了較好的教學效果。當然,同樣的教學內容面對不同的學生,在使用與設計某種教學方法時,還要求學生的配合才行,也就是說教的方法與學的方法要有機統一。我們將繼續努力探索,使“高級語言程序設計”課程教學日趨完善。希望本文能對大學計算機基礎教學有一定的借鑒作用。
參考文獻:
[1] 譚浩強.C程序設計[M].3版.北京:清華大學出版社,2005.
[2] (美)Harvey M.Deitel,Paul J.Deitl.C程序設計經典教程[M].4版.北京:清華大學出版社,2005.
“High-level Language Programming” Course Teaching Reform and Practice
XU Xiao-qing, LI Xiao-dong
(Department of Computer Science and Technology, Institute of Beijing Electronic Science and Technology, Beijing 100070, China)
Abstract: In view of teachers and students generally agreeing that high-level language is both difficult to learn and hard to teach, the “high-level language program design” course reform practice is introduced from the teaching content, teaching methods and means. Practice has proved that the reform of the teaching is effective, which will not only help students interest in learning, but also be conducive to train students abilities to analyze and solve problems.
Key words: C language; teaching content; teaching methods and means; teaching reform