



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