摘要:針對高校非計算機專業(yè)C語言教學過程中存在的C語言抽象、知識點多與教學時間不足等問題,分析了高校非計算機專業(yè)學生學習C語言的特點,闡述“以指針為核心,以實驗為手段,突出程序設(shè)計思想和方法”的教學理念。
關(guān)鍵詞:程序設(shè)計技術(shù); C語言; 教學改革
隨著科學技術(shù)的發(fā)展,計算機科學與其他學科的結(jié)合越來越緊密,程序設(shè)計技術(shù)已經(jīng)成為高校非計算機專業(yè)學生的必修課程。程序設(shè)計技術(shù)課程以某種程序設(shè)計語言為載體,使學生掌握程序設(shè)計的基本思想和方法,各個專業(yè)依據(jù)其培養(yǎng)目標和具體的課程設(shè)置選擇某種程序設(shè)計語言作為授課內(nèi)容。C語言以其強大的功能和廣泛的應(yīng)用成為高校工科院系的首選程序設(shè)計語言。但是C語言較其他程序設(shè)計語言來說,比較抽象且涉及的知識點多,要在規(guī)定學時內(nèi)以常規(guī)的授課方式針對非計算機專業(yè)學生講授C語言的基本思想和方法,難以達到理想的效果,因此必須對傳統(tǒng)的教學章節(jié)和方法進行改革。根據(jù)筆者多年的實踐教學經(jīng)驗,本文提出“以指針為核心,以實驗為手段,突出程序設(shè)計思想和方法”的教學理念,下面從4個方面對該理念進行詳細闡述。
1突出程序設(shè)計的思想和方法,淡化語法細節(jié)
以程序設(shè)計的思想和方法為主線,淡化語法細節(jié)教學。C語言比較抽象且涉及知識點多,若在授課過程中過多地講授C語言的細節(jié),將會導致學生忽略對程序設(shè)計基本思想和方法的學習。面對不斷更新的軟件開發(fā)環(huán)境,學生若不能以程序設(shè)計的基本思想和方法為指導,將會降低學習新知識的效率,從而對學習和工作產(chǎn)生不利影響。
教師在以C語言為載體的程序設(shè)計技術(shù)的教學過程中,必須使學生明確軟件開發(fā)的一般過程,即“明確問題、設(shè)計程序、完成程序設(shè)計和完成程序(分析問題、算法的確定、編寫程序、測試和修改程序)、建立文檔和維護”4個步驟[1-2]以及這4個步驟中 “明確問題和分析問題”對正確編寫程序并得到預(yù)期結(jié)果的重要性。教師在對程序設(shè)計的基本知識諸如對數(shù)據(jù)類型和變量聲明等講授后,以“程序設(shè)計的3種基本結(jié)構(gòu),函數(shù),數(shù)組和文件”為主線進行授課,使學生掌握程序設(shè)計中所使用的基本技術(shù)。雖然這些基本技術(shù)在不同的程序設(shè)計語言中實現(xiàn)方式略有不同,但是這些基本技術(shù)是不同程序設(shè)計語言所共有的,其基本原理是相似的。
2以實驗為手段,培養(yǎng)學生獲取知識的能力
“授人以魚不如授人以漁”,這句話對講授程序設(shè)計技術(shù)的教師來說尤為重要。教師在授課的過程中以講授程序設(shè)計的基本思想和方法為主,但并不意味著學生可以忽視具體程序設(shè)計語言細節(jié)的學習。就一種程序設(shè)計語言來說,細節(jié)處理不當將會導致程序無法正常運行或者運行結(jié)果與期望的結(jié)果不一致。
教師在教學過程中,通過某種編譯環(huán)境使學生掌握調(diào)試程序的方法并且使學生認識到實驗對程序設(shè)計語言學習的重要性。學生在調(diào)試程序過程中,通過實驗來獲取一個個枯燥乏味的細節(jié)知識,不但加深了學生對這些知識的理解,提高了學習興趣和信心,更重要的是培養(yǎng)了學生通過實驗獲得知識的能力。
以圖1的示例程序為例,教師在Visual C++6.0的編譯環(huán)境中使用調(diào)試工具引導學生通過對諸如圖2、圖3和圖4所示的監(jiān)視窗口中變量值的觀察,總結(jié)出for 語句的執(zhí)行順序。通過觀察和分析,學生加深了對抽象的for語句執(zhí)行順序的理解和掌握,為今后的準確應(yīng)用奠定了良好的基礎(chǔ)。
3突出指針的核心地位,貫穿授課的全過程
指針是C語言的重點和難點,通常居于教材的后半部分,因此要使學生在短時間內(nèi)徹底理解并牢固掌握,最終達到靈活運用的程度確實困難。但是指針作為C語言的精華和靈魂,與變量和數(shù)組成員在內(nèi)存的存儲地址有著密切的聯(lián)系,而函數(shù)參數(shù)的傳址調(diào)用是指針應(yīng)用的具體體現(xiàn),因此可以將指針的概念和應(yīng)用貫穿于授課的全過程,將重點難點問題分解細化,在不斷鞏固已有知識的基礎(chǔ)上引入新知識,減小學生對指針這一難點的恐懼感,增強學生學習的信心,激發(fā)學生的學習興趣。
3.1輸入函數(shù),初識地址
輸入函數(shù)scanf( )是學生第一個接觸到的使用地址傳遞參數(shù)的函數(shù)。因此在講授該函數(shù)的使用過程中要結(jié)合地址的概念來詳細講解,使學生能夠準確地理解和掌握地址和地址中存儲的數(shù)據(jù)之間的關(guān)系,以達到準確使用scanf( )函數(shù)的目的。
以圖5的示例程序為例,在Visual C++6.0的編譯環(huán)境中通過調(diào)試工具中的[step into]進行調(diào)試分析。通過對圖6、圖7和圖8的詳細講解,使學生對地址有了一個明確的認識:定義變量是為變量分配存儲空間,這個存儲空間一旦分配,在程序的執(zhí)行過程中就不會改變,而在該存儲空間中所存儲的變量的值可以改變。
3.2函數(shù)參數(shù)傳址調(diào)用,加深地址理解,引入指針概念
通常在函數(shù)這一章節(jié)中只講述函數(shù)參數(shù)的傳值調(diào)用,而在講授完指針的概念后才引入函數(shù)參數(shù)的傳址調(diào)用。這樣的章節(jié)安排固然有其合理性,但卻忽略函數(shù)參數(shù)傳遞作為一個整體的有機性,學生難以真正理解和掌握函數(shù)傳值調(diào)用和傳址調(diào)用的區(qū)別以及何時使用何種參數(shù)傳遞方式。
在講授函數(shù)的傳值調(diào)用后,以輸入函數(shù)scanf( )引入函數(shù)的傳址調(diào)用,使學生考慮scanf( )的函數(shù)原型中第二個形參的數(shù)據(jù)類型應(yīng)該是什么,并引導學生從Visual C++6.0的安裝文件夾中找到輸入函數(shù)的原型“_CRTIMP int __cdecl scanf(const cha