摘要: C語言程序設計課程在高校的相關專業(yè)往往是編程的入門課程,從“門外漢”變成“門內漢”的過程不僅需要學習基礎的概念、編程知識、編程方法,還需要能夠把自己的智慧轉換成計算機能夠識別的代碼,這個轉換過程中思維方式也要發(fā)生一些變化,學習C語言、實現(xiàn)算法的過程的教學也需要對學生進行思維方式的引導和培養(yǎng)。
C語言程序設計是計算機及信息管理專業(yè)的一門專業(yè)基礎課,一般開在大一年級,課程教學過程中往往出現(xiàn)學生“聽得懂、看得懂,編不出”的現(xiàn)象,也就是學生聽得懂老師講課,也看得懂書上或一些資料上的程序,但是到了讓他們自己編程時,卻編不出來的現(xiàn)象。針對這種現(xiàn)象,結合作者本人的教學經(jīng)驗,提出一些關于教學的思考。
我們首先分析這種現(xiàn)象產(chǎn)生的原因,因為這是一個普遍現(xiàn)象,就要先分析學生的接受過程和學習能力了。
C語言程序設計課程往往開在大一年級,絕大多數(shù)學生沒有任何關于編程的基礎,甚至于一些關于計算機的基礎知識也似是而非,停留在對計算機的強大功能等表面的東西感興趣,對于內部的原因不了解的感性認識上。剛開始他們很多人認為學編程類似于學習應用軟件,較快的時間的學習就能夠成為編程“高手”。而C語言程序設計作為入門的第一門課程,必須首次講授關于編程的一些基本概念,比如常量、變量、數(shù)據(jù)類型、運算符、表達式等。這些內容相對顯得枯燥一些,一部分性急的學生需要耐下心來繼續(xù)學習,另外,由于這些內容是編程的基礎,又要求學生深入掌握,對學生的心理就需要有所把握了。
隨著學習內容的推進,有些學生慢慢的跟不上了,能聽得懂,自己編程則不知從何入手,究其原因,一方面是對算法沒有掌握,一方面是對這門語言本身不太了解。算法是貫穿在整個編程過程中的,有了算法,也就有了編程的思路,學生對算法不理解或者掌握不夠,直接影響編程,除此之外,對于把現(xiàn)成的算法變成C語言程序,許多學生雖然能編的出來,但是對解決問題的思路和方法不甚理解,如果沒有給出現(xiàn)成的算法,就又不知如何是好了。這就要求教師在教學過程中,把算法講透,用各種方法使學生理解算法,在這個過程中,還有一個關鍵的問題,就是思維的模式。
計算機編程的思維不僅要求嚴謹,還要求能夠符合編譯器的能力。嚴謹?shù)乃季S才能編出漏洞少的程序,符合編譯器的能力則要求學生理解計算機能做什么,其在操作過程中是怎么做的,編譯器能編譯什么樣的語句。當然具體操作過程是怎么做的并不需要知道具體二進制代碼或命令,那不是C語言的研究范疇,這里需要學生理解的是計算機能夠識別什么樣的語句,雖然對常量、變量、運算符、表達式等學生已經(jīng)有所了解和理解,但要把問題都分解到計算機能處理的語句的地步學生還不太適應,對于這種思維的培養(yǎng)和訓練,作者認為是學習C語言的關鍵。算法本身沒有這么細致,但是卻是這種思維的精簡的表達,對于要解決的問題,也是在計算機能識別什么能處理什么的基礎上表達出解決的方法或步驟,為什么要細到這種程度,很多學生不清除,怎么細化到這種程度,很多學生一頭霧水,由于對這種思維的不適應,很多學生自己考慮算法時,就表達不出來算法,當然編程序也跟著受影響。這種思維模式轉變過來了,算法也就容易表達出來,程序也就可以轉換過來了。這種思維模式的培養(yǎng)卻是從學這門課開始,貫穿在整個C語言教學過程中的。
學習C語言從引入常量、變量、運算符、表達式等基本概念的時候,思維已經(jīng)進入編程的準備階段,這個時候不僅要使學生理解這些概念本身是怎么回事,還需要讓學生理解這些就是編程的素材,C語言解決所有的問題最終都要細化到語句,而語句就是這些內容組成的,怎么樣能把這些常量、變量、運算符、表達式靈活的組合成解決問題的語句,這是編程的關鍵。就象我們如何把漢語的一個個單個的詞匯組合成表達特定含義的語句一樣 ,C語言的常量、變量、運算符、表達式相當于詞匯,把它們組合成表達特別含義、執(zhí)行特定內容的語句需要思維的處理和提升的過程,表達的最具體的就是程序,稍微粗一點就是算法了。而我們在結構化編程中,尤其是初學者,往往只能是從總體到具體、逐步細化、逐步分解的進行,有了計算機能夠執(zhí)行什么的清楚認識,寫出算法往往就比較貼近實際。
一個人如果知道很多的漢語詞匯,但是不能把詞匯連接成通順的句子,那么就不能說這個人表達能力好。學習編程的過程中,如果知道具體的基本的概念和知識,而不能靈活的用來解決問題,就不能認為編程能力強了。因為計算機只是執(zhí)行語句,不去主動解決什么問題,那我們編寫程序,解決問題還需要思維的整理、方式、方法,當然這些方式、方法要能夠在計算機上實現(xiàn),就是編寫算法的過程,教學過程也可以使學生理解這些方式,漸漸熟悉這種思維,熟悉編程語言。
我們學習編程語言的時候很難象我們學習漢語一樣,時時都有一個環(huán)境,那么只在課堂的時間去接觸C語言,熟悉的進程必然較慢。課堂上的作用在于接觸、理解,而要掌握則需要自己去試著使用的過程。也就是教師們常說的“C語言的編程能力不是看出來的 ,不是聽出來的,而是自己動手練出來的”。教師在教學過程中,根據(jù)學生的接受能力、學習能力,化繁為簡,學生可能能夠接受的更快一些。作者個人的經(jīng)驗,打比方是個非常有效的辦法,能夠幫助學生對基本概念的理解,如對變量的理解,兩個數(shù)交換的方法的理解、指針的理解等等。要讓學生自己動手去編程序,除了課后布置的練習以外,課堂上的練習也是非常必要的。因為教師很難控制課后學生到底用了多長時間去編程、去思考編程,課堂上的練習又要占用大量時間,這和緊張的課時有些沖突,作者認為比較折中的辦法是編程時教師多用板書,這樣在板書過程中教師帶動學生思維,學生能夠跟著思考,部分代碼教師可以特意空出來,告知學生這部分代碼要做什么事,然后可以由學生補充完整。