巨同升
摘要:本文列舉了在當前C語言教學中存在的課程教學目標不夠明晰、知識布局不夠合理、過于注重語法知識的系統性、程序講解方法有待改進以及程序案例選題范圍不夠廣泛等問題,并針對這些問題提出了相應的對策。
關鍵詞:教學目標;知識布局;真實情境法;推導構造
中圖分類號:G642 文獻標識碼:A
文章編號:1009-3044(2019)33-0081-02
C語言程序設計這門課程在我國高校中廣泛開設已有二十多年,對于普及程序設計知識、推廣計算思維的思想起到了不可或缺的作用。不過在C語言程序設計的教學過程中,還存在一些不足之處,尚有一定的改進空間,主要體現在以下幾個方面。
1課程教學目標不夠明晰
一門課程應該有明確的教學目標,不僅包括知識目標,更要包括能力目標。而在當前的大多數C語言教學大綱中,往往側重于對知識目標的描述,對每一單元的知識點都有詳盡的要求說明。而對于能力目標的要求,則比較籠統。往往只有針對課程整體的能力目標要求,而缺乏具體到每一單元的能力目標要求。
由于強調課程的知識目標而不是能力目標,因而過于看重知識的系統性與完整性,追求大而全。比如,在一般編程中極少使用的指針訪問二維數組、指向函數的指針和鏈表等內容,在教學大綱中往往也要求掌握。
導致在教學中過于看重概念知識點的傳授,而淡化了對能力培養(yǎng)的要求。其后果是只見樹木、不見森林,盡管學習者對于各個知識點的掌握比較牢固,但是對于知識點之間的有機聯系以及如何運用知識解決現實問題卻缺乏深入的理解,影響了學習者編程能力的提高。
針對上述問題,必須首先明確知識目標與能力目標之間的關系。在這兩種目標中,能力目標才是居于支配地位的根本目標,知識目標只是對能力目標的補充,是為能力目標服務的,但是并不能取代能力目標。
因此,在教學中應該以培養(yǎng)學習者綜合運用知識解決現實問題的能力作為根本目標,而不再強調對知識點的牢固掌握以及知識覆蓋的廣度。
2課程知識布局不夠合理
合理地選擇知識點呈現的時機,合理地設計知識布局,對于幫助學習者更好地理解和掌握知識具有至關重要的作用。
在C語言知識點布局方面存在的問題,主要體現在如下幾個方面:
(1)在多數C語言教材中,往往基于語法知識的系統性與連貫性,將C語言中常見的運算符與表達式集中到一章中講解。對于一般的程序設計語言來說,這種布局方式或許沒有什么不妥;但對于C語言來說并不適合。這是因為C語言的運算符與表達式異常豐富,用法特別靈活,本來就是C語言語法中的難點。
由于這種布局方式無法體現語法知識與程序設計之間的聯系,從而導致學習者對知識點在程序設計中的作用難以有深入的理解,進而會感覺枯燥乏味。
解決這個問題的方法,就是根據知識點對編程能力目標的支撐作用,重新設計知識的布局。在順序結構程序設計之前,只講解加、減、乘、除、求余數和賦值這幾種最基本的運算符;在選擇結構程序設計部分,講解關系、邏輯、條件和類型轉換運算符;在循環(huán)結構程序設計部分,講解自增、自減、復合賦值和逗號運算符。這種布局能夠更好地體現知識點與程序設計之間的有機聯系,同時由于是“即學即用”,因而更加有利于學習者對知識點的理解掌握。
(2)字符串處理是C語言程序設計的重要功能。在多數C語言教材中,往往將有關字符串處理的內容分散到數組和指針兩章中講解。既容易造成重復,也難免存在不協調之處。例如,在字符數組部分將難以解釋為什么不能給字符數組名賦值。這種布局方式的實質,是只注重知識的外在表現形式,而忽視了知識的內在功能性聯系。
解決上述問題的方法,是將字符數組和字符指針部分分別從數組和指針部分移出來,構成單獨的一章,專門講解字符串處理方面的內容。從而避免相似內容的重復,使得知識布局更加協調和自然順暢。
(3)指針是C語言中的一大特色功能,同時也是一大難點。在大多數C語言教材和教學大綱中,通常將有關指針的大部分內容集中到一章中講解。表面上看起來似乎合理,實際上會造成“難點堆積”的效果,從而不利于學習者的理解掌握。
針對上述問題所采取的對策,就是根據知識點在程序設計中的作用重新布局知識點。將有關指針的內容,分解為指針與數組、指針與字符串、指針與函數等三章。
這種布局能夠更好地體現知識的內在功能性聯系,同時也分解了難點,因而更有利于學習者對于知識的理解與運用。
3過于注重語法知識的系統性
有些人認為編程離不開語法,語法是編程的基礎,要想學好C語言編程,必須系統完整地掌握C語言的語法。由于將C語言語法看作學習編程的“預備知識”,因此在講授編程之前,總是要對相關的語法知識進行深入細致地講解。因為涉及的語法知識點比較多,因此通常采用堆砌羅列的方式逐一講解。
這種教學方式雖然花費了大量的課堂時間和精力,但是教學效果卻并不理想。一方面學習者對于語法的理解不夠深入,另一方面對于編程的促進作用也不明顯。
究其原因,采用“預備知識法”講解C語言語法,會造成語法與編程一定程度的脫節(jié),不利于學習者對語法的理解。
另一方面,根據與程序設計聯系的緊密程度,實際上可以將C語言的語法分為兩類。一類是在編程中經常使用、同時也比較容易理解的常規(guī)語法。另一類是在編程中極少使用、同時也比較難懂的非常規(guī)語法,比如“邏輯運算的短路”“for語句的變形”;還有一些在實際編程中幾乎不可能出現的語法,比如仁i++ + i++ +i++和a+=a-=a+a這樣的表達式以及typedefint(*POINTER)O;這樣的語句。
顯而易見,非常規(guī)語法對于編程的促進作用是非常有限的,反過來還會由于講解這部分語法擠占了講解編程方法的時間,影響了學習者編程能力的提高。
上述問題的解決方案,是本著語法服務于編程的原則,在教學中著重講解編程中頻繁使用的常規(guī)語法,避免過多地討論非常規(guī)語法。
在講授語法知識時,盡量用“真實情境法”取代堆砌羅列方式的“預備知識法”。所謂“真實情境法”,就是將語法知識點在真實的程序案例中展現出來,讓學習者在學習編程的過程中自主地“發(fā)現”并逐步地積累語法知識。例如,在講解計算球體體積的程序時,先用v=4/3*PI*pow(r,3)進行計算,然后通過運行程序發(fā)現結果錯誤,接著返回分析程序,再說明4/3實際上是整除,正確的寫法是v=4.0/3*PI*pow(r,3)。
由于將語法知識點與真實的程序“情境”相聯系,因而更加有利于學習者對語法的理解,更容易給學習者留下深刻的印象。
4程序講解方法有待改進
在C語言程序設計教學中,培養(yǎng)學習者基本的編程能力和初步的計算思維能力是教學的重點和難點。這兩種能力的培養(yǎng),歸根到底需要借助于一個個編程實例實現。因此,如何設計更加有效的教學方法,更好地體現計算思維的思想,是問題的關鍵所在。
在現有的C語言教學實踐中,普遍采用“問題分析一一寫出程序——解釋說明”的步驟講解程序。即首先針對問題進行分析,得出基本的編程思路,然后寫出完整的程序,最后再對程序中的語句逐條進行解釋說明。
不過這種方式的教學效果并不理想,學習者通常能夠讀懂案例程序,并能理解其編程思路。但是當需要學習者自己編寫程序時,卻又往往感覺無從下手。其原因在于從編程思路到完整程序之間缺乏必要的推導過渡環(huán)節(jié)。學習者找不到編寫各類程序結構的一般性規(guī)律,從而感覺無章可循。
那么,能不能像求解數學問題那樣,將程序一步步地推導出來呢?其實,編程的過程也是有規(guī)律可循的,完全可以通過歸納、演繹等邏輯推理方法,將程序一步步地推導構造出來。這種方法能夠幫助學習者發(fā)現編程的內在規(guī)律,增強他們學好C語言的自信心。下面通過一個例子進行說明。
例1.編程序計算1+2+3+…+100之和。
該問題實質上是求等差數列之和,完全可以利用等差數列的求和公式來求。不過在這里采用一種累加的方法來求此數列之和,因為這種方法具有更好的通用性。
算法設計如下: