李宗璞
文章編號:1672-5913(2009)08-0124-02
摘要:“數據結構”課程是計算機學科的專業基礎課,是一門實踐性比較強的課程。課程中的實驗環節顯得尤為重要,該環節可以鍛煉和提高學生對復雜程序的設計能力。筆者在多年的教學過程中摸索出實驗環節的教學模式,與大家共同探討。
關鍵詞:數據結構;教學內容;組織形式;考核方式
中圖分類號:G642
文獻標識碼:B
利用計算機來解決實際問題的步驟是:給出問題描述,將問題抽象成數學模型,根據數學模型寫出求解問題的算法,再根據算法寫出程序代碼,最后上機調試并分析結果。在上述過程中,非數值的數學模型是數據結構研究的主體,它操作實現主要是通過數據結構的實驗教學環節來完成的,在該教學環節中作為教學主體的學生,首先要具備抽象思維能力和語言基礎。往往在環節實施過程中,語言基礎是薄弱環節,以至于課時用完了,學生還是寫不出滿意的算法及代碼。鑒于此,我們在教學內容、組織形式、考核方式等教學環節中進行了一些設計,與大家一起來探討。
1教學內容
我們在教學內容上,圍繞課內、課外兩條主線進行改革,給學生較大的自主學習空間,有利于學生創新精神及實踐能力培養。整個實驗教學由淺入深,重在基礎、提高能力、挖掘潛力、拓展思路。在課時內的教學主要以基礎性實驗為主,安排一個綜合性實驗;課時外的教學主要以設計性實驗和綜合性實驗為主。
1.1學時內的教學內容
在我校數據結構課程共64學時,理論課48學時,實驗課16學時。安排了5個實驗項目,由于多數學生語言基礎不算太好,特別是指針的運用和結構體的定義是薄弱環節,所以在做實驗項目時,主要是從教材上的算法出發,使得學生有章可循:
項目1:順序表的操作
主要訓練學生對順序存儲結構的理解,掌握順序表的查找、插入和刪除等基本操作;同時引導學生對于靜態參數傳遞和動態參數傳遞的使用方法。
項目2:單鏈表的操作
主要是與順序存儲結構進行比較,完成線性表在鏈式存儲結構上的查找、求長度、插入、刪除等基本操作。
項目3:棧和隊列的應用—停車場的管理
深入了解棧和隊列的特征,以便在實際問題背景下靈活運用;利用兩個棧和一個隊列模擬停車場管理及相關操作。
項目4:二叉樹的遍歷
掌握二叉樹的結構特征,以及二叉鏈表存儲結構的特點;掌握二叉樹三種(先序、中序和后序)遍歷方法;熟悉并且掌握遞歸算法。
項目5:折半查找和快速排序
掌握折半查找和快速排序的方法,掌握要進行折半查找應該采取的存儲結構形式。并進行對其進行時間復雜度的分析。
對于每個實驗項目的實驗目的和實驗要求,提前2周放在教學平臺上。在實驗前1周,利用輔導課時間,以測試的形式,讓學生寫出算法代碼,由于每個實驗基本上可以在教材中找到源代碼痕跡,所以難度不大。
在實驗教學過程中,采用任務驅動式的教學模式,首先從總體思路上講解10分鐘左右,邊輔導邊發現問題,每半個小時總結1次。由于學生已經在課前作好了準備,在實驗室里他們贏得了更多的自主時間用來調試程序,分析結果。學生水平參差不齊,在上課過程中穿插實驗驗收考核,考核的形式是現場寫出主要操作的代碼,在規定的時間內進行調試、分析。驗收完一個模塊,學生再進行下一個任務。教師通過講課、輔導、驗收使得實驗課堂充實起來,由于學生每個時間段都有活干,所以課堂氣氛非常活躍,討論熱烈。
1.2學時外的教學內容
在學時外,以課程設計的形式,利用開放實驗室時間,嚴格按照軟件工程的思想進行訓練。
在課程設計時,教師列出多個設計課題,每個課題都有相應的要求或說明。各課題的難易度是有差異的,每個課題后以標準分的形式標出了難易度。例如:
課題1:設有n個人圍坐在圓桌周圍,現從某個位置m(1≤m≤n)上的人開始報數,報數到k的人就站出來。下一個人,即原來的第k+1個位置上的人,又從1開始報數,再報數到k的人站出來。依此重復下去,直到全部的人都站出來為止。試設計一個程序求出出列序列(難易度90)。
課題2:用遞歸算法和非遞歸算法實現下面問題,并比較其算法優勢。把一只老鼠放進一個無蓋的大箱內, 箱內設置若干隔板,使老鼠走動的方向受到阻礙,看其如何找到一條通道,走出大箱(難易度80)。
“難易度90”表示設計中的各項全部達到要求時的最高得分大致為90。因此,參加課程設計的學生首先要了解設計的任務,仔細閱讀各題的設計要求,然后根據自己的基礎和能力情況從中選擇一題。一般來說,選擇課題應以在規定的時間內能完成,并能得到應有的鍛煉為基本原則。課程設計的總體思路是:數據模型選取→構造求解算法→選擇存儲結構→編寫程序代碼→調試測試→總結分析。
在做課程設計時,不再拘泥于語言環境的限制和存儲結構的限制,主要鍛煉學生的開放思維能力和綜合知識的應用能力。同時,引導學生從結構化程序設計到面向對象程序設計的思考。例如學生正在學習C#,在做課題1時,除了傳統的設計方法外,可以引導學生畫出類圖和順序圖,寫出C#的代碼。
設計結束后要寫出課程設計報告,以作為整個課程設計評分的書面依據和存檔材料。主要包括:需求分析、概要設計、詳細設計、調試分析、用戶使用說明、測試結果、參考文獻等。課時外的訓練主要是為畢業設計打下基礎,同時也培養了學生的團隊協作精神。
2組織形式
2.1學生的組織
對于學生進行分組,每組中按照好、中、差的學生進行搭配。由于學生水平參差不齊,早做完的學生,進行考核驗收。驗收合格,同時給出相關思考題,可以再對于思考題進行進一步的思考,鍛煉創新精神。同時,讓已完成任務的學生輔導未完成任務的學生,這樣培養了學生的團隊協作精神,課堂氣氛非常活躍,激發了學生學習的主動性。對于教師的工作也減輕了一些,教師主要是總體部署,分步考核,可以有充足的時間進行驗收,比較清楚地掌握總體情況,以便講評。這樣組織學生,可以解決“優等生吃不飽,差等生吃不了”的局面,實現了“因才施教”。
2.2內容的組織
對于每一個實驗項目的實驗目的、相關要求等,以實驗指導書的形式與學生見面,一本好的實驗指導書能給學生的上機實驗帶來事半功倍的效果。
首先,讓學生明確實驗目的和要求。每個實驗項目都給出了實驗目的,并且提出了具體要求。有了實驗目的,學生才有方向性;有了具體要求,學生實驗時才有章可循。對于要求,要按時間分塊執行。比如單鏈表的操作為2學時,第一個學時完成建立、查找、部分主函數工作;第二學時在第一學時基礎上完成插入、刪除操作,完善主函數。每一個學時在最后進行驗收,若有問題通過小組完成。
其次,讓學生掌握實驗步驟。每一個實驗項目按照軟件工程的思想去組織,先需求分析,抽象出數據結構模型,再明確數據類型,詳細設計,最后給出類C語言的算法描述。要求學生要嚴格遵循實驗步驟來思考問題,這樣,可以培養學生良好的工作作風和解決問題的方法,并且為后續課程做準備。
3考核方式
市場經濟體制下的學生不如計劃經濟體制下的學生好教育,特別目前高校擴招,入學的學生素質參差不齊,基礎相對薄弱,自學能力不強,不少學生在學習上存在畏難心理。而對于高等教育也不能降低要求,這樣就要求在教學模式上進行革新,我校對教和學提出兩個轉變,“變學生管理為學習管理,變管理學生為服務學生”。對于課程教學,不能再采取應試教育下的考核形式。鑒于此,在數據結構的教學過程中,特別是實驗教學,探索出了新的考核形式。
分數對學生來說是非常重要的,以此作為課程管理的抓手。對于教學計劃內的實驗項目成績分成兩個部分,一個是個人成績,一個是小組成績。個人成績主要考核學生個人能力,小組成績主要是考核學生的團隊協作精神。對于個人成績考核形式有兩個方面,一個方面是學生的程序代碼調試技能的測試,一個方面是書寫實驗報告,從實驗報告上可以考查學生的邏輯組織能力。筆者把該考核模式稱為“實驗2+2”模式。每個實驗項目結束前進行驗收考核,經常進行階段性考核,主要是激發學生的學習興趣,保證了課堂教學紀律,基本沒有缺勤的學生,讓學生找不出來不學習的理由,因為每處都與成績掛鉤,都在拼命的去“掙分”。
對于課程設計部分,實驗室開放時間結束時,由學生提交課程設計源代碼和設計總結報告。源代碼提交時,要生成可執行文件,對文件進行壓縮,壓縮文件名為“學號+姓名”形式,發送到指定郵箱地址。課程設計成績根據學生設計任務完成情況、設計報告、設計成果的質量以及答辯情況綜合評定。完成情況主要包括:功能實現情況和程序設計情況;設計報告包括課程設計報告格式,課程設計思路及設計過程,以及對設計的自我評價,收獲和體會等;答辯要求思路清晰,模塊關系清楚,回答問題敏捷。
對于學生的學業成績采用結構化成績,把100分不再作為一個整體看待,把它融進教學的全過程中去。學生的學業成績由平時成績、副卷成績和主卷成績構成,平時成績占20%,副卷成績占20%,主卷成績占60%。在平時成績中課程設計10分,作業和平時課堂表現5分,小考5分;副卷成績中個人成績15分(其中程序調試10分,實驗報告5分),小組成績5分。
4結論
通過實施驗證,效果是良好的。實驗的創新也帶動了整個課程的進步,特別是上課出勤率,基本上是全勤。課堂氣氛活躍,問題討論熱烈,學生的學習主動性大大提高了,網絡教學平臺登錄次數明顯增多。在問題答疑和考核驗收方面,雖然增加了教師的教學工作量,但是提高了教師的工作熱情。真正實現了“教”和“學”的良好互動,提高了教學質量。
參考文獻:
[1] 周蘇. “數據結構與算法”的教學改革和實驗創新[J].計算機教育,2007,(15).
[2] 嚴蔚敏, 吳偉民. 數據結構[M]. 北京:清華大學出版社,1997.
[3] 嚴蔚敏, 吳偉民. 數據結構題集[M]. 北京:清華大學出版社,1999.