魏書堤,趙輝煌,鄧紅衛
(衡陽師范學院 計算機科學系,湖南 衡陽421008)
C 語言介于高級語言與低級語言之間[1],是大學理工類必修的計算機語言類課程,也是數據結構等課程的前趨課程。由于C 語言涉及的概念規則很多,且使用形式靈活,很容易出錯。教學實踐表明:初學者對教材前面的語句語法、變量表的學習還能跟得上,但一旦講解比較復雜的章節時就困難重重,甚至有的學生學完了C 語言,考試成績也很好,但是讓其用C 語言去解決一個實際問題時,就無從下手,沒有清晰的思路和合理的解決方案。為了使學生能更好地掌握C 語言解決一些實際問題,教師要從實際生活中去挖掘一些較好的案例,對教學中的問題進行分析并將教學的案例設計與計算思維培養結合起來,以提高C 語言的教學質量。
隨著各專業人才培養方案的修改,作為公共基礎課程的C 語言教學課時被壓縮,很多任課教師未能對教學內容進行整合優化,上課時仍然按部就班講解C 語言,比較復雜的教學內容講解不透,沒有結合生活工作實際來設計合理的案例,把知識融入到案例中去,忽視了學生計算思維的培養,而計算思維恰恰又是對問題抽象的基礎。
根據我們對學生的調查與了解,很多老師布置的課外作業都流于書本之上,很少根據自己的教學設計,有針對性布置一些思維性強的課外作業,這樣學生一上機實驗都在驗證一些書上已經有的程序,而且象這些程序早已經過教材編寫者調試,學生在調試時很少出現一些意想不到的錯誤,很難分析錯誤產生的原因,在解決實際問題時,很難進行戰術方面的思維,也就是說有了抽象方法以后,也難有成功的程序。
老師在進行教學案例設計時,不僅要把握知識的易理解性,而且要把握思維規律,漸進式地演繹分析實際問題,找出其中內在規律,抽象出基礎模型算法,講解時可以用形象類比等方法進行啟發性教學。
老師應認真分析教材和學生的實際情況,精心組織教學內容,設計合理的教學案例來實施教學。在實施教學過程中,應從實際問題引入教學,通過對實際問題的抽象來啟發學生的思維,通過問題-算法-程序這一系列的過渡對實際問題進行解決,從而達到對知識理論的掌握和運用。學生在學習C 語言程序設計時,不外乎2 個方面的學習,一方面是對C 語言課程知識的理解,另一方面是專業知識的靈活運用,所以老師們的教學重點應放在對學生思維能力的培養和思維習慣的養成上。
C 語言實際上是一門實踐性非常強的課程,老師在進行案例設計時,要堅持以培養學生的學習理解能力、計算思維能力和創新能力為目的[2],案例內容要能有利于激發學生的學習興趣,能引導學生積極進行多種抽象思維并最終解決實際問題。老師在課堂微觀教學上采用案例遞進驅動教學法[3],改變滿堂灌的做法,充分調動學生的積極性,活躍學生的計算機思維。精心設計實例,給學生一個比較實際的切入點,通過老師的講解和演示使學生有直觀感覺和理性思維,然后再通過將此實例不斷修改、擴充,引導學生參與到程序的編制過程中。在這個過程中,學生展示所編制的程序,老師評判優劣并講解理由和規律,吸收優點,修改錯誤,引導學生進行優化。在這樣的案例教學中,因為有提出問題、解決問題、擴展問題、再解決問題、對解決問題的方法評價、優化設計等幾個環節,實際上是一個螺旋式滾動向前的過程。在這個螺旋式不斷向前的過程中,能夠很好地調動學生的參與,而且通過問題的不斷擴展和一個問題多種解決方法,能有效拓展學生的計算思維,使得學生在課堂上真正成為“主體”,教師只扮演“主導”角色[4-5]。通過老師的講解調試和演示,使學生有直觀的感覺,從而引導學生的思維與老師教學達成一致產生共鳴,達到理想的教學效果。這樣通過一個程序實例,引入課程內容,使得學生的每一步學習都有基礎,是循序漸進,螺旋式上升的過程。
在設計實驗項目的過程中,要采取循序漸進思路。首先要讓學生做最基礎的理解性實驗,通過這種理解性的實驗來理解課堂上的理論知識;然后要通過驗證實驗,把書上例題和老師講解的例題進行系統對比驗證,從而達到理解和掌握程序設計的關鍵步驟,達到自己可以靈活設計習題程序的目的;最后設計一個把過程設計和算法設計整合在一起的實驗,逐漸地提高學生實踐和應用能力,另外實驗項目設計還要具有一定的趣味性。在實驗設計案例時應將知識點融入進去,讓學生在實踐中鍛煉自己的思維,在對問題思索中形成習慣和興趣。
設計程序打印輸出如下螺旋方陣(見圖1)。

圖1 打印輸出螺旋方陣
由上例直觀可知,以順時針方向從外圍開始遞增的填充矩陣,每填充一個外圍,問題即被分解為與此相同更小的問題,重復地從外圍填充相應子矩陣,即可完成。
設原問題為N 階的螺旋方陣,起始值為ns,終止值為N* N,則矩陣也為N 階的矩陣,起始行為rows,起始列為cols.
遞歸開始:
第一步:從映射矩陣的第一行開始開始向右填充n 個螺旋方陣中的值(從傳入的起始值開始,值遞增變化)。
第二步:從映射矩陣的最后一列第二行開始向下填充n -1 個螺旋方陣中的值(值遞增變化)。
第三步:從映射矩陣的最后一行最后一列開始向左填充n -1 個螺旋方陣中的值(值遞增變化)。
第四步:從映射矩陣的倒數第二行第一列開始向左填充n -2 個螺旋方陣中的值(值遞增變化)。
此時矩陣的最外圍被填充完畢,原問題轉化為n - 2階的螺旋方陣,最小值為ns(一直遞增變化),最大值為N* N,則映射矩陣也為n -2 階的矩陣,起始行為rows +1,起始列為cols +1 的子問題,遞歸地解決子問題,直到傳入的螺旋矩陣起始值大于或者等于終止值時,遞歸調用結束,函數退出,問題解決。過程如下圖2 所示。

圖2 遞歸步驟圖


上面案例的圖案非常有趣,教師可以引導學生進行抽象思維,很容易理解螺旋矩陣算法,代碼實現將數組、函數、數組做函數參數、循環、條件語句、及遞歸有機地結合起來。在布置實驗時,可以讓學生進行反螺旋輸出如下圖案(見圖3),這樣可以讓學生舉一反三,提高對實際問題的解決能力。

圖3 輸出結果圖
如何提高學生利用c 語言解決實際問題的能力,使學生的計算思維得到有效的培養,是擺在我們大多數計算機C 語言教學老師面前的一大難題。我們認為教師只有根據教材、課時及教學計劃精心設計有趣的教學案例,將書本上的知識點,融于實例之間,并進行啟發式教學,才能激發學生的學習興趣,潛移默化地誘導學生進行思維訓練,提高學生對實際問題的抽象能力。
[1]譚浩強.C 程序設計[M].北京:清華大學出版社,2001.
[2]邱建林,王 波.計算機程序設計語言教學的探索[J].牡丹江大學學報,2001(4):14 -15.
[3]胡 楓.C 語言程序設計6 的案例式教學的設計[J].青海師范大學學報(自然科學),2012(4):48 -51.
[4]高 紅.開設自主性實驗 培養學生的創新意識和創新能力[J].實驗技術與管理,2001(12):60 -62.
[5]耿國華.程序設計能力培養模式的探索與實踐[J].中國大學教學,2009(3):30 -32.