



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