前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇數據結構課程設計范文,相信會為您的寫作帶來幫助,發現更多的寫作思路和靈感。
摘要:本文針對傳統數據結構課程設計教學過程中出現的問題,提出一種案例驅動的數據結構課程設計教學方式,以幫助學生理解和掌握分析問題、解決問題的方法,提高自主學習能力,鍛煉設計創新能力。實踐表明,此教學方式能夠彌補傳統教學的不足,開闊學生的思路,提高自主完成率,達到課程設計目的。
關鍵詞:課程設計;數據結構;案例驅動;教學改革
中圖分類號:G642
文獻標識碼:B
1引言
數據結構課程是計算機相關專業的專業基礎課程,屬于專業課程體系中的核心課程。該課程著眼于對基本數據結構進行闡述和分析、講解基本數據結構的應用并介紹典型的基本算法等三個方面,內容比較抽象枯燥,掌握起來相對困難。數據結構課程設計是一門獨立的實驗環節,是對數據結構課程教學理論的延伸和補充,是對理論知識的綜合應用,其目的是發揮學生的主動性,培養學生分析實際問題并加以解決的能力,鍛煉學生的設計創新能力。
傳統的數據結構課程設計教學輕講授,主要以對學生的單獨輔導為主,督促學生完成課程設計。這種方式存在后文所提及的一些問題,隨著互聯網資源的日益豐富,部分問題更加突出了。為了能讓學生通過課程設計更好的掌握數據結構的內容,我們設計了案例驅動的數據結構課程設計教學改革,實踐證明,該項教改能夠填補傳統教學過程的不足。
2傳統教學過程中暴露的問題
(1) 缺乏駕馭全局的能力。本科二年級學生計算機建模能力弱,沒有軟件工程的思想,因而缺乏駕馭全局的能力。軟件工程課程一般都開設在數據結構課程之后,在進行數據結構課程設計前,學生也基本沒有分析、編寫較大程序的經驗,這種情況造成了學生拿到問題后不知該從何下手和如何規劃好課程設計的整個過程。
(2) 生搬硬套基本數據結構。數據結構教材中都是最原始的數據結構,不進行擴展和修改基本上是不能直接用到課程設計中解決實際問題的,而采用多種數據結構解決問題并加以比較找尋最優方案對于學生來說就更為困難。
(3) 對高級程序語言掌握不到位。數據結構課程設計是需要用高級程序語言來編寫的,學生對該程序語言的掌握程度直接影響到課程設計的質量,常見的問題包括:變量定義不規范、函數功能劃分不合理、代碼可讀性較差、文件讀寫掌握不好、調試程序能力較弱等。
(4) 照搬、照抄他人課程設計的現象存在。由于完成課程設計的時間有限,有的學生在無法自主完成的情況下,通過網絡、書籍等方式來查找解題方法。本來通過查閱資料消化吸收他人的解題思路來求解自己的課程設計問題是毋庸置疑的正規途徑,然而一方面課程設計的題目每個學校每屆學生都相對比較固定,致使存在抄襲往屆學生程序的現象,另一方面互聯網的發展使得查找相似題目的課程設計源代碼并非難事。此外,市面上還存在著大量快餐式的課程設計書籍在售,這類書籍良莠不齊,多是搜集、羅列了若干課程設計題目,源碼、光盤附上,草草分析講解了事。許多學生也習慣了這種快餐式的學習,能做到獨立思考、舉一反三的越來越少。
3案例驅動的數據結構課程設計教學改革特點
案例驅動的數據結構課程設計教學改革是將案例教學法引入數據結構課程設計教學中,教師通過講解一個完整的案例分析解決過程,輔以多媒體的手段與學生交流、互動,達到培養學生分析并解決實際問題的能力,鍛煉學生的設計創新能力的目的,同時也彌補了目前數據結構課程設計教學重實踐、輕講授的不足,豐富該項課程設計的教學內容。該方法有以下特點:
(1) 提前熟悉軟件工程思想。案例的分析解決過程就是一個實踐軟件工程思想的過程,學生可以在講解的過程中體會軟件開發的完整流程,進而對自己的課程設計有全局性的考慮。
(2) 舉一反三,定制合適的數據結構。對于案例講解中所涉及到的數據結構,教師將進行細致的分析。采用不同數據結構解決同一問題,在性能和功能上會有所區別,學生可以在與教師的互動討論中提高對各種數據結構的認識,從而設計適合解決自己課程設計的數據結構,甚至能夠采取多種解法。
(3) 養成良好的編程習慣。優秀的代碼就像優美的文章一樣能使閱讀者心情舒暢,教師講解的案例都是代碼級別的,定義規范、流程清楚、可讀性強、具備參考價值,這樣就促使學生養成良好的編程習慣。教師以多媒體手段演示代碼的編制調試過程,使學生對編程環境更加熟悉,能夠靈活運用跟蹤、斷點等調試手段,開發過程事半功倍。
(4) 最大限度避免抄襲課程設計的現象。大多數學生事實上都希望能夠自主完成課程設計,只是因為不會做才導致抄襲往屆學生或是市售相關書籍源碼的現象存在。授之以魚不如授之以漁,通過對典型案例的講授,教師教給了學生解決課程設計的方法,學生找到了突破口,便愿意通過自己的努力完成任務,自己能制作“大餐”,也就不再求助于“快餐”了。
4典型數據結構課程設計案例分析
“活期儲蓄帳目管理”是常見的數據結構課程設計題目,下面以其講解過程為例簡單描述一下案例驅動的數據結構課程設計教學的過程。
此課程設計需要實現的功能一般是:(1)采用交互工作方式;(2)實現儲戶開戶;(3)實現儲戶銷戶;(4)向某賬戶存款;(5)從某賬戶取款;(6)排序顯示所有賬戶信息;(7)查詢某賬戶余額;(8)查詢某賬戶交易記錄;(9)所有賬戶及其交易信息存儲至文件,程序運行時從文件中讀入。該課程設計考察的知識點包括:選擇并構造數據結構;使用與特定數據結構相應的算法來實現具體功能;對文件讀寫結構化數據;對程序設計語言的靈活運用等。
首先應對題目進行大致的分析,該題目包括兩方面的信息。一方面是儲戶的信息,可設計為包含賬號、姓名和余額等字段;另一方面是交易記錄信息,可設計為包括賬號、存取時間、存取標志、金額等字段,兩方面信息通過賬號字段關聯起來。使用順序存儲結構、鏈式存儲結構或樹形結構都可以存儲這些信息,但其中各有利弊。順序存儲結構設計簡單,但容量固定,賬戶插入刪除需要進行記錄的移動,單個賬戶的交易記錄信息存儲不易連續導致列舉時需要對全部交易記錄進行完整遍歷,對已排序順序表查找某一記錄時可以采用特定算法(如二分法)提高效率,總體上來說實用性和整體效率相對較差。鏈式存儲結構設計略復雜,容量不設上限,賬戶插入刪除較方便,采用鏈式結構存儲的交易記錄形式上連續,列舉時很方便,但在查找某一記錄時需要遍歷整個鏈表效率較低,總體上來說實用性和整體效率中上。樹形存儲結構相對最復雜,容量也不設上限,插入、刪除算法也相對復雜,采用特殊樹形結構(如二叉排序樹)能夠提高查找記錄時的效率,交易記錄仍可采用鏈式結構存儲,總體上來說實用性和整體效率較好,現實中的數據庫管理系統(DBMS)多是用樹形結構來實現的。從實現難度上來說,順序存儲最簡單,鏈式存儲次之,樹形存儲最難。因此,對學生一般要求其用鏈式存儲來實現,對能力較強的學生可以鼓勵其用樹形存儲來實現,以鏈式存儲為例繼續討論。
賬戶信息和存取記錄之間是通過賬號來關聯的,在鏈式存儲結構中可以用指針來表示兩者的聯系,即每個賬戶節點(數據域可包含賬號、姓名和余額等字段)具有兩個指針域,一個指針指向下一個賬戶節點,另一個指針域指向該賬戶的存取記錄鏈表(存取記錄節點的數據域可包含存取時間、存取標志、金額等字段),如下圖所示。
從功能上分析,儲戶開戶、儲戶銷戶就是在賬戶鏈表中進行插入和刪除操作;對賬戶存、取款時,首先找到相應賬戶,然后添加一條存取記錄,同時修正該賬戶的余額;排序顯示所有賬戶信息,就是對賬戶記錄依據某一關鍵字進行排序并顯示排序結果;查詢某賬戶余額,就是遍歷賬戶鏈表,找到對應記錄并顯示出來;查詢某賬戶交易記錄,就是先找到該賬戶,然后遍歷顯示該賬戶對應的存取記錄鏈表。可以看出,對賬戶鏈表進行遍歷查詢在賬戶存取款、查詢余額和查詢存取記錄是都有用到,因此在設計時,可以考慮編寫查詢賬戶函數,以供其他功能模塊調用。
在文件存取方面,存取時都是以存儲節點為單位進行的,即一次性存取一個結構體。該課程設計有其特殊之處,有兩種類型的結構體需要存取,即賬戶信息和存取款記錄,這兩種結構體所占用的空間不盡相同,若是都保存在一個數據文件中則需要一定的技巧。以保存記錄到文件為例,可以采用存一個賬戶信息,再存一個整形數,該整形數的數值為此賬戶對應存取記錄節點的數量,然后再逐一保存每條存取記錄,存儲完畢后再用相同方法保存下一個賬戶的記錄。讀取文件過程則是存儲過程的逆過程,這樣可以保證存取時,賬戶信息和存取記錄一一對應,不至于混淆。
在確定了上述思路后,便可以著手編碼,值得注意的是數據結構的定義。由于采用了鏈式結構,許多同學便直接將鏈式結構的節點(包括指針域)直接存儲到文件中。事實上,這個指針域是沒有保存價值的,尤其在讀取時如果也將指針域讀出并賦值,將很有可能導致不可預知的錯誤??梢圆扇〉姆椒ㄊ牵榷x只包含數據域的數據結構體,再定義鏈表節點結構體將數據結構體封裝起來并加上指針域,在文件讀寫時只對數據結構體進行操作。給出該課程設計數據結構參考定義如下:
typedef struct log //存取記錄
{
char DateTime[25]; //存取時間
char W_D; //存取標志
float Amount; //存取金額
} log;
typedef struct node_log //存取記錄節點
{
log data; //存取記錄
struct node_log *next; //下一存取記錄節點指針
} node_log, *p_node_log;
typedef struct account //賬戶記錄
{
char ID[10]; //賬號
char Name[10]; //姓名
float Balance; //余額
} account;
typedef struct node_account //賬戶記錄節點
{
account data; //賬戶記錄
struct node_log *nlog; //存取記錄節點指針
struct node_account *next; //下一賬戶記錄節點指針
} node_account, *p_node_account;
其他功能模塊便可以參照數據結構教材上的相關算法設計實現。
5結果與結論
我們將來自3個不同專業(計算機、網絡工程、軟件工程)10個班級的57名同學分成了兩組,一組(試驗組)通過上述方法進行了課程設計教學,一組(對照組)仍采用傳統方法教學,課程設計題目相同。課程設計對比統計情況如下表,其中試驗組優良率達到44%,不合格率13%,對照組優良率21%,不合格率26%。同時,試驗組采用了多種方式來實現了課程設計,且雷同情況較少,對照組多數采用順序存儲方式實現,程序雷同情況較多。很明顯,試驗組的學生思路更加開闊,自主完成率更高。
時代在變遷,信息獲取更加便捷,部分學生的學習積極性在某種程度上也發生了蛻變,隨之的教學方式也應有所改變,教師應從正面加以引導。在以案例驅動的數據結構課程設計教學改革實踐中,教師通過對典型案例的細致分析,比較不同數據結構的優缺點,一方面使學生更加牢固的掌握了數據結構知識,另一方面讓學生找到入手之門,激發學習興趣,提高動手能力,更重要的是能讓學生掌握分析和解決問題的方法,自主完成課程設計,這對今后其他課程的學習也是有所裨益的。
參考文獻:
[1] 張培,肖天慶. 基于網絡環境下教學設計與課程開發的合作模式研究[J]. 電化教育研究,2007,(9):60-63.
[2] 吳宏偉,張殿龍,梅險. 高校網絡輔助教學的探索與實踐[J]. 計算機教育,2007,(7):18-21.
[3] 張敏霞. 程序設計語言課程教學方法改革的探索與實踐[J]. 中國高教研究,2004,(2):90.
數據結構是數據元素之間的關系。從概念和實現兩個角度,可將數據結構分為數據的邏輯結構和數據的存儲結構。按照數據元素之間前驅和后繼關系來分,數據的邏輯結構可分為以下4種:集合(Set)、線性表(List)、樹(Tree)和圖(Graph)[2]。數據的存儲結構主要包括數據元素本身的存儲以及數據元素之間關系表示。數據元素之間的關系在計算機中主要有兩種不同的表示方法:順序映像和非順序映像,并由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。JavaJDK為常用的數據結構定義了一些接口(Interface)和實現(Implementation)。這些接口、實現類以及常用的排序、查找等算法統稱為JavaCollections框架(JavaCollectionsFramework)。Collections框架的設計目的是要滿足如下目標:高性能、一致性、擴展性和輕松編程。Java程序員在具體應用時,不必考慮數據結構和算法實現細節,只需要用這些類創建出來一些對象,然后直接應用即可[3]。Java中把一組對象稱為Collection,也就是說,Collection是對象的容器。Java對Collection中的對象沒有任何前驅、后繼以及重復性的約束,只是約束了對象類型E。Collection接口定義了其上的3類操作:針對單個元素的基本操作、迭代器和Collection對象之間的批量操作。基本操作包括增加、刪除、判斷是否包含某個元素、判斷是否為空、容器中當前元素的個數、清空等。批量操作包括:合并兩個Collection容器、從一個容器中移走一些元素、保留兩個容器中相同的元素、判斷一個容器中的元素是否完全包含在另外一個容器中等。接口Collection<E>的子接口有Set<E>和List<E>。集合(Set)在Collection的基礎之上增加了“不允許重復元素”的約束;而List則在Collection基礎之上增加了“元素之間具有前驅、后繼關系”的約束:除了第一個元素外,所有元素具有唯一的前驅;除了最后一個元素外,所有元素具有唯一后繼。如果僅關心數據元素是否出現,而不關心數據元素之間的次序,則應使用Set<E>。Java為集合接口提供了兩個基本的實現:HashSet<E>和Tree<Set>。HashSet<E>是Set<E>接口的典型實現,大多使用集合的場合就是使用這個實現類。HashSet實現類按哈希算法來存儲集合中的元素,因此具有很好的查找性能。HashSet不能記憶元素之間的順序,包括插入順序。其子類LinkedHashSet<E>也是根據元素hashCode值來決定元素存儲位置,但它同時使用鏈表維護元素的次序,這樣使得能夠記憶插入順序。由于LinkedHashSet需要維護元素的插入順序,所以性能略低于HashSet,但遍歷集合里的全部元素性能較好。實現類TreeSet<E>可以確保集合元素處于排序狀態,TreeSet并不是根據元素的插入順序進行排序,而是根據元素的實際值來進行排序的。TreeSet采用紅黑樹的數據結構對元素進行排序,并要求添加進TreeSet中的對象必須實現CompareTo<E>接口。List<E>接口作為Collection<E>接口的子接口,可以使用Collection接口中的全部方法。但是List接口中定義了元素位置和元素范圍的概念,使得List可以根據元素位置索引(index)來插入、替換、刪除集合元素以及查找指定對象的位置。ArrayList<E>實現類基于數組實現了List接口,其內部封裝了一個動態再分配的數組。每個ArrayList對象都有一個capacity屬性,這個屬性表示它們所封裝的數組的長度,當添加元素超過長度時,capacity會自動增長,其默認值為10。LinkedList<E>內部以鏈表來保存集合中的元素,因此隨機訪問容器時的性能較差,但在插入、刪除元素時性能較好。Queue<E>接口用于定義隊列這種數據結構,隊列是“先進先出”的容器,通常不允許隨機訪問其中的元素。Java中的隊列接口Queue<E>沒有繼承List接口,而是直接繼承了Collection接口。如果使用具有固定容量的隊列,則應使用offer()來加入元素,使用poll()來獲取并移出元素,因為add()和remove()方法在因容量原因失敗時拋出異常。如果只是訪問隊首而不移出該元素,使用element()或者peek()方法。LinkedList<E>類實現了Queue<E>接口,因此我們可以把LinkedList當成Queue來用。PriorityQueue是一個比較標準的隊列實現類,它并不是按加入隊列的順序,而是按隊列元素的大小來記憶隊列元素的順序。因此當調用peek方法或者poll方法來取出隊列中的元素時,并不是取出最先進入隊列的元素,而是取出隊列中最小的元素。Stack<E>實現了List<E>接口,提供了push和pop操作限制線性表中元素的插入和刪除只能在線性表的同一端進行。JDK1.6引入的ArrayDequ<E>實現類被優先推薦作為棧使用。ArrayDeque<E>實現了Deque<E>接口。Deque<E>接口定義了雙端隊列,雙端隊列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。JavaJDK中沒有直接提供樹和圖的接口和實現類,但是可以通過研究TreeMap的源代碼學習操作樹的一般編寫模式。綜上,數據結構與Java面向對象程序設計兩門課程內容的銜接見表1。
2面向數據結構銜接的Java課程實施方案
Java面向對象程序設計為1學期的課程??傉n時為講授54學時、實驗32學時。其中,與數據結構知識點緊密相關的JavaCollections框架部分為講授6學時、實驗4學時。在講授環節,按照表1列出的順序進行。在實驗環節完成與授課內容相關的驗證性實驗。在課程設計實踐環節,要求學生使用Java設計常見算法,然后閱讀JDK提供的源代碼進行對照。具體方案如圖1所示。比如,在java.util.Collections類中提供了數據結構中學生已經學過的常見算法,如二分查找、計算元素頻數、查找最大/最小元素、反轉線性表、按照指定距離旋轉線性表、隨機排列線性表、交換指定位置上的兩個元素以及排序等。注意,在Java6中Collections.sort()使用的是MergeSort;而在Java7中,內部實現換成了TimSort。要求學生按照這些API文檔說明,首先按照數據結構課程中的知識設計自己的算法實現,然后與API源代碼進行比較。由于學生使用C語言版的數據結構教材,所以在面向Collection編程之前,作為過渡,先讓學生面向數組編程。哈希表是一種重要的數據結構,也是實現集合的基本途徑之一。通過研究HashSet的源代碼,可以讓學生理解為什么每個對象都要有hashcode()方法,以及哈希表的編碼特點。由于HashSet的實現是基于HashMap的,所以研究HashSet就要研究HashMap。Map是一種典型的名值對類型,它提供一種Key-Value對應保存的數據結構??蛻舫绦蛲ㄟ^Key值來訪問對應的Value,這個接口并沒有繼承Collection這接口;而其他的類或者接口,不管是List、Set、Stack等都繼承或實現了Collection。TreeMap和HashMap算是Java集合類里面比較有難度的數據結構。HashMap元素存取的時間復雜度一般是O(1),而TreeMap內部對元素的操作復雜度為O(logn)。TreeMap記憶了順序,TreeSet內部的實現使用了TreeMap。
3結語
關鍵詞:數據結構預算法;國際化;互動式教學
文章編號:1672-5913(2013)18-0058-04
中圖分類號:G642
0 引言
通過觀察和對比,國際一流大學學生參與課堂發言和課后研討的積極性要遠遠高于復旦大學學生,而參與研討對于促進學生深入理解課程內容,培養學生在立題、思辨和協作方面的能力十分有益。為此,復旦大學軟件學院開展了數據結構與算法設計類課程國際化建設工作,主要目標是研究如何在課堂教學中采用研討型方式,在實驗環節中采用協作型項目,并針對中國學生的特點,探索如何引導學生提出問題和參與討論,以提高課程教學效果,縮小與國際一流大學差距的教學方法。課程建設教師團隊的主要人員首先通過全程旁聽美國麻省理工學院數門相同或類似的課程,認識與國際一流大學在教學手段和效果方面差距的同時,分析中美學生在提出問題、參與討論方面表現差異的原因。然后通過與學生座談方式收集整理中國學生不愿意在課堂上發言和參與研討的主要原因和相應對策。最后介紹復旦大學軟件學院根據課程國際化教學課題的研究成果進行教學方式調整和開展課堂教學實踐的情況。
1 麻省理工學院在課程教學中促進學生參與研討的先進經驗
在開展數據結構與算法設計課程國際化建設過程中,課程建設教師團隊的主要人員利用在美國麻省理工學院(MIT)參與研究工作的機會,在一年內全程旁聽了Design and Analysis ofAlgorithms、Web 3.0、Economics 0f Information、Software Construction 4門課程,并且參加了MIT的IFF(International Faculty Fellow)國際大學教師培訓項目。IFF是由MIT發起組織的、致力于提高國外高等院校教師的科研能力、培養研究生水平和授課技能的項目。在上述過程中,教師團隊人員對于MIT在促進學生參與課程相關內容研討方面的舉措印象深刻,并將值得借鑒的教學方式和方法進行了歸納。
(1)學生參與課程相關內容的討論需要相關知識的準備,只有將相關知識積累到一定的程度,學生才會自然而然地愿意對相關問題進行討論,而課程教材和課堂講義對知識積累是遠遠不夠的。MIT在課程開始時就由任課教師提供課程相關的文獻閱讀列表,閱讀完這些文獻所需要的時間大約為課程授課時間的3倍左右。對比復旦大學類似課程的文獻閱讀要求,發現中國學生在完成課程相關文獻閱讀量方面遠遠少于國際一流大學的學生。
(2)每一門課程除了提供網站用于下載課程相關的資料外,還有課程的BLOG便于學生和教師在線交流。利用這樣的系統,教師往往規定在課程授課期間,學生至少針對數個課題(完成相關文獻的閱讀后)在BLOG上發表自己的觀點。由此促進學生圍繞相關課題開展討論,這樣的方式也為那些不太愿意在眾人面前發言的學生提供闡述自己觀點的機會。
(3)MIT的教室一般都是階梯教室,這樣既可以讓每一位學生能夠清楚地看到任課教師各種面部和身體語言,也使授課教師能夠看到所有的學生,時刻了解學生對課堂內容的各種反饋。學生座位之間留有通道,授課時教師會在整個教室里走動,確保能夠走近每一位學生的身旁,讓每一位學生感受關注和重視,這樣也讓學生感到親切隨和。實踐表明,這樣做更能讓學生暢所欲言。
(4)教學內容融合任課教師的研究成果。任課教師對于自身的研究內容一般都有較深的認識和理解(甚至有些理論和技術是世界首創),講解過程中能夠廣征博引,相關難點都能夠娓娓道來,所以往往更為生動有趣,可以激發學生的提問熱情和學習興趣。教師只有在相關領域內具備一定的科研水平才能更好地講授相應的課程內容。
(5)在講解有關技術內容時,會邀請業界一些著名人物走進課堂為學生講解其擅長的話題。以MIT互聯網方面的課程為例,任課教師會請IBM、Google、Microsoft等著名科技公司副總裁或技術總監級別的人物為學生講一堂課(有時是遠程視頻連線,教室配有大屏幕高清投影和高速網絡),之后一般設有學生提問環節。這樣的課程很受學生歡迎,學生提問也非常踴躍。
綜上所述,在課程開始前精心為學生挑選各章節相關的閱讀文獻(分為必讀和選讀部分)、建設課程BLOG促進師生間交流、將研究內容融入課程內容等教學方式和方法都值得借鑒,并且通過一段時間的準備加以實施。但是中國學生不愿意上課發言和參與研討也有其成長環境中文化背景的影響,例如,追求標準答案的應試教育、謹守中庸之道處事態度等。而美國學生從小就讓他們不斷地進行發言和表達的訓練,從幼兒園開始,每天都會讓小孩子輪流講一下昨天發生的事情。參加各種活動和社團也是如此,久而久之,養成了愿意并且善于表達自己觀點的習慣。所以對于我們的學生,不僅要營造讓其發言的環境和氣氛,也需要有意識地利用各種機會培養他們發言的習慣。
2 學生不愿意在課堂上發言和參與研討的主要原因及改進建議
課題組對兩個班52名學生針對不愿意在課堂上發言和參與研討的問題進行面談,每位學生面談時間為20~30分鐘。學生不愿意在課堂上發言和參與討論的主要原因可歸納為:害怕回答錯誤后造成對自己不利的影響(特別是教師隨后會給出答案的情況)、沒有養成積極發表自己觀點的習慣(與成長的文化和環境有關)、擔心積極發言后被別人說愛表現、課堂上沒有能夠很好地營造出各抒己見氛圍。調查過程中同時也聽取了學生對讓他們能夠積極主動發言的一些建議和意見,歸納為以下幾點。
(1)討論的問題應該是一些不存在對錯的開放性問題。
(2)可以先由教師開題和啟發,然后找到學生感興趣的幾點展開討論。
(3)教師要營造隨和的課堂氣氛,需要有一個破冰的過程,讓學生放松不害怕。
(4)可以采取分組討論然后再由學生總結發言的方式。
(5)提出一些學生比較熟悉且有啟發的問題比較容易讓學生展開交流。
(6)發言和討論適當增加一些平時成績(但也有學生擔心別人認為他為了成績而發言,所以增加成績的比重也不宜過高)。
(7)不要僅對一個學生提問,要求其他學生可以隨時補充。
(8)對于有標準答案的問題,可以采取按座位順序點名提問回答的方式。
綜合以上學生的意見和建議,為了讓學生積極參與課堂發言和研討應當盡量營造輕松隨意的課堂氣氛,提出的問題也應是開放性的(即沒有標準的答案),任課教師要善于引導和組織課堂討論,在提出問題前給予必要的講解和啟發。
3 教學方式調整和課堂教學實踐
通過借鑒國際一流大學和國內名師的先進教學經驗,針對中國學生,特別就數據結構與算法設計課程的教學方式提出了一些方案和措施,并且進行了相應的課堂教學實踐。雖然這些方案和措施還有待進一步完善和改進,但是課堂教學效果和學生參與研討和發言的意愿明顯提高。具體的方案和措施包括以下幾個方面。
3.1 嘗試誘導式、研討式和互動式教學方式
任課教師要改進之前以灌輸式知識傳授的教學方式,嘗試采用誘導式、研討式和互動式教學方式。教學過程中一般首先給出實際的應用問題,然后要求學生嘗試提出解決問題的算法,其他學生需對提出的方法進行評價,提出不足之處和改進方法,然后通過討論這個算法的缺點,引出克服這個缺點的其他算法,最后對解決相同問題的不同算法進行比較和歸納。適當增加學生對相關重要文獻的閱讀量,并且根據閱讀和調研結果進行課堂討論。以NP完全性問題教學為例,由于學生還沒有學習計算理論方面的課程,對于理解NP問題和NP完全性問題有一定的困難。首先任課教師介紹旅行商問題,接著讓學生嘗試尋找有效地求解算法,在教師引導下討論得出結論:在現有計算機體系結構和運算能力的基礎上,一定規模的旅行商問題目前不存在找到最優解的計算復雜性為多項式的算法;然后指出存在一類這樣的問題,并且任取這類中的一個問題,再任取這類中的另一個問題,則一定存在多項式時間復雜性的算法,即可以把前者轉變為后者。如果存在解決前者的多項式算法,必定存在能夠解決后者的多項式算法;最后指出目前仍然沒有找到多項式算法來解決這類問題,同時也不能證明這樣的多項式算法不存在。為了讓學生加深對上述問題的體會并且熟知典型的NP問題,將學生分成9組,每一組給出一對問題,其中一個屬于P(多項式)問題,一個屬于NP問題。要求學生調查這一對問題在應用中出現的實例和變體,然后設計可行的解決方法。并且要求每組以課堂演講的方式向師生介紹他們的調查結果,聽取報告的教師和學生可以隨時進行提問,要求做報告的學生回答。教學實踐表明,此舉加深了學生對NP完全性問題的認識和理解。
3.2 從解決實際問題出發,培養學生提問和思辨的能力
對于每個知識單元,首先提出若干個實際應用中的問題,在提出可行的數據結構與算法前,引導學生進行討論,并且提出自己的解決方案。通過分析學生所提出的各種方法,比較之前已學方法,歸納出新的數據結構與算法的特點和用途,最后在深入剖析和討論的基礎上進行擴展和綜合。
3.3 借鑒國際一流大學的教學內容和方式,彌補與國際先進授課水平之間的差距
數據結構與算法設計課程的教學內容和方式借鑒了美國麻省理工學院的同名課程,并嘗試進行誘導式、研討式和互動式教學。課程的教材、講義、作業、實踐和考試全部使用英文,外教采用英語授課。將世界頂尖級學者撰寫的經典著作Introduction to Algorithms作為課程的教材,并且根據中國學生的生活經歷和背景文化,對部分案例進行相應的增補和改寫。
3.4 以應用為導向,培養綜合型人才
目前計算機學科方面的教學,一般從計算機基礎知識和編程原理開始,經過若干中級課程,直至大學三、四年級,學生才可能涉足整個軟件系統開發的全過程,這樣往往造成“只見樹木,不見森林”的情況。學生已經學習了構成軟件系統所需的知識和技術,但是難以針對某一現實應用,將所學較好地綜合起來。在大學低年級時,以完整系統開發和應用為目標,讓學生在專業學習的早期就能夠了解和體會實際應用的復雜性,掌握并實踐綜合集成各項技術的方法和手段。學生只有較早地了解整個軟件系統的開發與應用,才能在今后創造性地綜合運用所學,成為既有較高專業水平,又對現實應用有敏銳洞察能力的復合型人才。
3.5 以科研帶動和促進教學,將最新技術的發展成果融入教學內容中
數據結構與算法的基本內容雖然相對穩定,但對已有數據結構與算法的擴展和結合,特別是解決新的應用方面的發展卻日新月異,知識更新和演化速度較快。數據結構與算法設計課程組的教師在現有教材的理論體系和教學內容的基礎上,及時了解和把握技術發展的新動向,將最新的理論創新和技術進步充實到教學內容中,每年都增補緊跟學科發展的新內容。此外,任課教師會指導學生參與自己的科研項目,或者推薦學生進入其他教師的實驗室從事相關的科研活動。
這些方案和措施的實施,使得數據結構與算法設計課程能夠在較短的時期內形成科研和教學并線、講解和演示并重、理論和實踐并行的特色。課題組教師不斷用科學研究和國際學術交流的成果充實課程的內容,使課程能夠充分體現目前算法理論和應用方面最新的發展和動向。在教學中始終堅持理論與實踐相結合的原則,從經典案例引出科學問題,并強調對學生邏輯思維和動手能力的培養。
4 結語
關鍵詞:大數據;荷載與結構設計方法課程;教學研究;教學現代化
中圖分類號:G642.0;TU 文獻標志碼:A 文章編號:1005-2909(2016)05-0086-04
大數據是21世紀的重要技術革新成果,大數據開發與應用帶來更多新技術的出現,各行各業也急需適應大數據發展的人才。2015年8月國務院頒發的促進大數據發展綱要提出了應加快適應大數據發展需求的人才培養,所以培養適應大數據時代需求的創新人才是擺在高等學校面前的重要任務[1-4]。目前,國內高校土木工程專業人才的培養還不能滿足大數據產業的需求,基于大數據背景下的教學改革也比較少[5-8],所以應積極推進基于大數據背景下的土木工程專業課程改革。結合土木工程專業背景和社會實際需求,融合大數據時代的技術和思想開展土木工程專業課程教學改革,除了要培養學生的基本技能,還應注重培養學生對海量數據的采集、存儲、管理、挖掘與分析等綜合能力。黑龍江科技大學土木工程專業荷載與結構設計方法課程組開展了面向大數據需求的教學改革。該項改革以荷載與結構設計方法課程的基本知識為基礎,以項目為載體,以培養學生獲取信息的能力、分析能力、工程實踐能力和綜合應用的能力為主線,從教學內容、教學方法、教學手段等方面進行改革探索,力求實現“信息―知識―能力”一體化課程教學目標。
一、大數據背景下荷載與結構設計方法課程教學現狀及存在問題
(一)教學內容離散,系統性差,知識跨越性大
由于該課程涵蓋了數學、力學及土木工程所有專業課程的荷載基本計算及原理知識,而且教材各個章節的內容聯系不緊密,所以各章節的知識跨越性大、連貫性差,導致學生學習效果不盡人意。此外,與修訂后的新規范相配套的教材內容滯后,導致教學內容差異性大,教師只能將新規范內容融入教學中,學生學習起來常常感到很茫然。加上該課程是專業基礎課,其教學內容很多是后續專業課的內容,學生由于對專業課內容不了解,也不明白該課程的具體實際用途,因此對課程的重要性認識不夠,以致學習效果差。
(二)主導思想滯后,教學方法、教學手段更新慢
教學中盡管教師也不斷改進教學方法和手段[9],如創設啟發式、討論式、案例式、比較式、互動式等教學方法,但是并沒有從根本上改變以教師講授為主導的教學理念。在大數據時代,信息量大,而且傳播速度快,很多知識僅靠教師的講授是無法跟上信息時代步伐的。因此,教師必須要轉變教學思維,構建教師與學生合作、協同參與的多元教學模式。
二、大數據時代背景下課程教學改革的總體思路
筆者所在學校荷載與結構設計方法課程教學改革總體思路:遵照國家大數據時代加快創新人才培養的綱要要求,結合土木工程專業人才培養需求,以及荷載與結構設計方法課程內容特點,借鑒國內外先進的教學理念、教學方式、方法和手段,以大數據建設為平臺,以荷載與結構設計方法課程建設項目為載體,以培養學生獲取信息的能力、分析能力、工程實踐能力和綜合應用能力為主線,實現“信息―知識―能力”一體化課程教學目標(見圖1)。大數據時代背景下,最大程度挖掘學生潛力,使荷載與結構設計方法課程教學模式越來越趨于理性,教學活動更多地開展實踐教學和情感教學,充分彰顯以學生為本的教學理念,讓教師與學生的溝通越來越多,讓教學互動性越來越強,進一步完善該課程現代多元化的教學模式。
三、基于大數據需求的課程改革路徑
(一) 依托大數據平臺建設,構建分層次、分模塊的課程內容體系
基于大綱要求,在改革原來課程內容的基礎上進一步梳理,分成荷載計算與結構設計方法兩個層次,然后將荷載計算分成豎向荷載、水平荷載兩個大模塊,結構設計方法分為結構可靠度理論、規范設計方法,并注重內容與新規范之間的差別,強調新舊規范的對比,同時更新規范知識,突出以信息化為主導,將各模塊的內容與專業課程內容銜接起來,教學中引入各專業課程知識,將荷載課程內容平臺與專業課程平臺進行合理的銜接。
(二)借鑒國內外先進的教學經驗,構建“信息化、開放式、多元化”的教學模式
1.構建“多元混合式”教學模式,實現翻轉課堂教學
借鑒“慕課”網絡教學平臺的教育模式,開發該課程的網絡教學平臺,構建“多元混合式”教學模式,實現課程教學信息化。該課程教學中將網絡在線教學與課堂教學相結合,實現每節荷載課程的課前網絡在線導學,特別對課程中涉及的相關專業課程內容提前在導學內容中進行布置,學生可以利用多方資源有針對性地提前對相關內容進行學習。在課堂上教師可組織學生對學習過程中的收獲、問題和心得進行交流、解答和分享,并針對學生的學習情況進行有針對性的指導和講解,對教學內容的主要知識點進行總體梳理和總結,整個教學過程實現信息與知識的融合,加深教師與學生的溝通。可以說這種“多元混合式”教學模式,實現了由傳統以教師為主的填鴨式課堂教學模式向以學生為主的翻轉課堂教學模式的轉變,有助于教學相長,有利于學生的全面發展。
2.采用微課教學的輔助模式,開放、拓展教學和學習空間
在改革傳統教學模式的基礎上,引入現代化的微課教學模式,發揮微課內容精短、主題鮮明的優勢,利用其形象性、精品化、便捷性等特征,將每一章的重點和難點內容制作成微課。例如,水平荷載中的風荷載、地震、土側壓力等的計算是學習的重點,也是學習的難點,將這部分內容制作成微課后學生不僅在課堂上,而且在課堂后也可以對教師所講的內容進行學習,非常方便。將微課教學與傳統教學相結合,拓展了教師教學和學生學習的空間,使教學任務和學習任務得到分解,解決了傳統教學中課堂時間緊、任務重的問題。目前微課教學應用越來越廣,因此,在荷載課程教學中將微課教學模式與傳統教學模式相結合,是大數據時代荷載課程教學模式改革的有效途徑之一。
3.加強傳統教學模式與新的教學模式的融合
一切事物都具有兩面性,優缺點并存,教學模式也不例外,新的教學模式也存在弊端,需要與傳統教學模式進行融合,這樣才可以達到事半功倍的效果。新的教學模式可以體現學生的自主性,引導學生自覺參與學習。但是針對目前學生的基本功、能力等狀況,荷載與結構設計方法課程學習還需要教師的督促和指導。另外,對荷載課程中實際規范的應用及新舊規范的對比,也需要在教師的指導下對具體實際問題進行分析,尤其需要教師與學生的及時溝通。因此,完全依靠學生通過網絡等新的教學模式仍然不能很好地解決學習中的實際問題,現代教學與傳統教學的融合才是理想的教學方式。
(三) 依托大數據的平臺建設,創建荷載課程的教學空間與學習環境
以土木工程專業大數據平臺建設為契機,創建荷載與結構設計方法課程教學現代化環境。通過大數據信息平臺建設,建設并完善荷載與結構設計優秀課程網絡平臺,為教師教學、學生學習和師生交流提供網絡空間,教師和學生都可以在網絡平臺上下載該課程的學習資源、作業要求,還可以實現學生和教師在線互動、答疑解惑。此外,平臺還提供與該課程內容相關的眾多專業課程優秀網絡資源的鏈接地址(例如:土力學、工程結構抗震、高層建筑結構等精品課程資源網址),大家可以在這里獲取與課程相關內容的有益資源。在此平臺還可獲取該課程在后續課程及工程中的實際應用實例、工程事故案例等,幫助學生明確該課程學習的重要性,拓展學生專業視野。另外,可以建立該課程的微信群和QQ群,師生可以隨時隨地進行溝通交流。教學和學習空間的拓展,能充分發揮學生和教師的主觀能動性,開闊學生的視野,增強學生的學習積極性。
(四) 依托荷載優秀課程平臺,建立“網上―課上―卷上”一體化、全方位的考核評價體系現代化的信息技術,為荷載課程考核評價提供了眾多的評價手段。改革原有荷載與結構設計方法課程評定辦法,在繼續采取將期末最終評定與平時考核相結合的考核辦法的基礎上,基于荷載優秀課程網絡平臺建設增加網上評價的環節,評定內容更加全面,方式更加多樣。最終期末成績(100分)=網上(15分)+課上(15分)+創新(10分)+期末試卷(60分)。具體考核辦法網絡評價10分:由學生在荷載課程網絡學習平臺上完成各階段學習任務及作業情況,系統給出評價;學生互評5分:通過網絡平臺學生提出并解決問題,學生之間給出客觀評價;創新實踐能力10分:學生應用荷載課程的知識對實際工程事故案例提出自己的觀點和處理辦法;課堂作業、出勤率和課堂表現各5分:課堂上學生對該課程的重視程度,對教學內容的掌握和課程參與互動情況;試卷評價60分:通過期末考試考核學生對整體內容的掌握情況。由此建立的“網上―課上―卷上”一體化、多樣性、全方位的考核評價體系(如圖2所示),打破了傳統的一張試卷定成績的考核辦法,是信息時代荷載課程教學改革的又一突破。
四、結語
大數據正在改變當今的社會生活,對高等教育改革也提出了一個全新的課題。本文基于教育大數據平臺建設,對荷載與結構設計方法課程教學進行前瞻性研究,從課程的教學內容體系、教學模式、教學環境及考核評價體系進行創新改革探索,立足該課程學科前沿,順應大數據時代的需求,充分彰顯荷載課程教學以學生為本的教學理念,最大程度挖掘學生的潛力,實現教學方法手段的現代化、多元化,以及“信息―知識―能力”一體化的教學目標,使荷載與結構設計方法課程教學符合時代的發展步伐。
參考文獻:
[1]許曄.大數據時代中國面臨的挑戰與對策[J].中國科技論壇,2015(3):24-30.
[2]萬靜.大數據:大學變革的機遇[J].國家教育行政學院學報,2015(4):67-72.
[3]黃晉.關于大數據人才培養的思考與探索[J].教育教學論壇,2014(45):201-204.
[4]楚文波.大數據背景下的教育教學改革[J].教學與教育信息化, 2015(13):181-183.
[5]孫鋒.面向大數據的信息與計算科學專業實驗課程體系研究[J].福建電腦, 2014(2):57-59.
[6]詹少強.大數據背景下的數據挖掘課程教學新探[J]. 長春教育學院學報,2014(22):30-33.
[7]曾祥蓉,陳進,謝孝,王薇.土木工程專業網絡課程推廣應用研究與實踐――以混凝土結構設計原理網絡課程為例[J].高等建筑教育, 2012,(21)5:142-145.
關鍵詞:數據結構;程序;教學模式;探索
中圖分類號:G642文獻標識碼:A文章編號:1009-3044(2007)18-31759-02
The Research of Program Teaching Patterm on Data Strucure
MO Jia-qing
(Dept. of Computer Science, Zhaoqing University, Zhaoqing 526061, China)
Abstract:The current teaching status of Data Structure is analysed and the teaching pattern which emphasizes on ability of programming based on comprehension is presented. Some research has been carried on ,such as curriculum introduction, systematic structure of Data Structure, setting of experiment subject,providing aid-studying system, curriculum design and approval. The teaching effect shows these methodes can improve the the student abilities on computer program designing effectively.
Key words:data structure; program; teaching patterm; research
1 引言
《數據結構》是信息技術專業的核心課程,它的內容主要是介紹如何根據具體情況合理地選擇邏輯結構(表、樹、圖等)去組織數據,并設計一定的物理存儲結構(順序、鏈式等)有效地存儲這些數據,同時設計正確的算法并對算法作出分析和評價。它在培養計算機專業學生嚴謹的邏輯思維能力和培養良好的編程開發能力方面有著不可替代的作用,因此成為高校計算機專業研究生招生入學考試和軟件設計師認證考試的首選課程。
《數據結構》內容廣泛,涉及到的知識點眾多,而且邏輯性和抽象性和動態性都很強,理論和實踐緊密結合,因此對學生而言學習難度大,對教師而言授課難度高。教學過程出現眾多問題,具體表現如下:
(1)學生由于沒有編制過大程序和項目開發的經驗,雖然知道《數據結構》的重要性,但是對于學習目的不明確。
(2)學生未能將所學內容融會貫通,沒能將各大知識點的區別與聯系弄清楚。
(3)學生由于C語言基礎不扎實,對結構、指針、參數傳遞等概念掌握不好,在做作業或實驗時如果題目要求與教材內容相差較大,無法入手,導致信心受到打擊、畏難情緒增加。此后,為應付作業,出現抄襲別人作業,或直接上網搜索現成程序的情況。
(4)雖然教師自己對教材內容很熟悉,能夠將各知識點講得很透徹,但是沒考慮到學生的實際學習狀況和接收能力,出現學生越學越難,理論與實踐越脫節,越學越不想學的情況。
(5)目前高校擴招,入學的學生素質有所下降,邏輯思維能力和自學能力不強,也是造成教學效果不理想的原因之一。
《數據結構》的教學目標之一是提高學生的軟件編制能力,而上述問題的出現使得這個目標大打折扣,因此迫切需要運用新的有針對性的教學模式。
2 《數據結構》程序教學模式
2.1 加強技能,克服程序語言造成的困難
《數據結構》中大量運用了指針、地址、結構體、函數參數傳遞等知識,而這些知識又是C語言中的重點和難點。如果學生對這些內容掌握不好的話,學習《數據結構》將受到很大制約。因此在開學時,教師先幫助學生重點復習C語言中與數據結構相關的知識點,實現從C語言到數據結構的平滑銜接。復習的題目形式可以是選擇、填空、編程題等。
目前高校普遍采用清華大學嚴蔚敏編著《數據結構》(C語言版)作為教材,該教材側重于用類C語言描述各種數據結構和算法,從頭到尾并沒有一個完整的C語言程序,并且該教材為使學生能方便地調用教材中的算法函數,教材中的算法函數均采用了C++的“引用”作為參數,這種“引用”參數貌似C語言中的地址,而教材并沒有著重強調。作者的初衷是好的,但此舉對于接觸過C++的初學者造成極大困惑。學習幾周后,學生發現程序調試困難,實驗過程障礙重重,導致信心受到打擊、畏難情緒不斷增加。因而有必要讓學生熟悉C++中的“引用”。
以教材上的構造空鏈表算法函數為例,函數參數使用“引用”調用和不使用“引用”的比較,幫助學生掌握“引用”并明白使用“引用”的好處。
typedef struct
{ElemType *elem;
int length;
int listsize;
} SqList;
使用“引用”傳遞參數定義函數:
Status InitList_SqA(SqList &L) {//構造空鏈表
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L.elem) return ERROR; // 存儲分配失敗
L.length = 0; // 空表長度為0
L.listsize = LIST_INIT_SIZE; // 初始存儲容量
return OK;
}
調用方式如下:
SqList LA;
InitList_SqA(LA);
使用指針傳遞參數定義函數:
Status InitList_SqB(SqList *L) { //構造空鏈表
L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L->elem) return ERROR;// 存儲分配失敗
L->length = 0;// 空表長度為0
L->listsize = LIST_INIT_SIZE; // 初始存儲容量
return OK;
}
調用方式如下:
SqList LB;
InitList_SqB(&LB),
可以看到,運用“引用”作為參數,教材上的函數基本上可以原封不動地使用,而使用指針傳遞參數,則需要對教材上的函數作大量修改。
另外教材為使算法描述更為簡潔,算法函數內部一律省略了變量定義,這對學生的學習也造成了很大困難。因此還需要作一些針對性的訓練,如通過填空題等形式補充完整函數,并適當評講。
2.2 理解課程體系結構,融會貫通
《數據結構》課程的內容由簡單到復雜,循序漸進。從一般的線性表開始,到后面的非線性的樹和更復雜的圖,都是討論各種數據結構的邏輯結構和保存這種邏輯結構所采用的物理結構,以及在這種存儲結構上的相關運算。理解這個體系結構,有助于學生從整體上更深入地掌握數據結構。
本文為全文原貌 未安裝PDF瀏覽器用戶請先下載安裝 原版全文
2.3 完善框架程序,培養自信
自信心是激發學生創新能力的積極情感和重要前提。為培養學生克服困難的自信心,筆者針對各種數據結構類型設計了不同的框架程序,讓學生在實驗過程中逐步完善,添加新功能,最終形式一個大的系統。例如針對線性表,筆者設計了線性表功能框架文本界面,其中的菜單功能分別為鏈表創建、鏈表插入、鏈表刪除、鏈表合并,其中鏈表合并又為一個鏈表合并至另一鏈表尾部、合并過程相同元素保留和不保留三個功能,讓學生逐步將單獨的小功能添加至該界面中。又例如,在學叉樹這一章內容時,筆者設計了二叉樹功能框架菜單,菜單包括二叉樹創建、先序遍歷、中序遍歷、后序遍歷、左右子樹交換、計算樹高度和葉子數量等,讓學生逐步完善。通過這種不斷添加小功能,最終形成一個大的系統的實驗方法,使學生具有一定的成就感,自信心不斷增強。
2.4 提供學習輔助系統,減輕實驗負擔
《數據結構》的不少實驗是驗證性實驗,為完成實驗,學生需要大量調用教材上的算法函數或對這些函數作一定的修改。為了讓學生提高實驗效率,將主要精力集中于程序調試而不是文字錄入,筆者設計了《數據結構》學習輔助系統。該系統把各章的算法函數分門別類,供學生做實驗時復制至其程序中,以減輕實驗負擔。另外該系統還給出了一些調用這些算法函數的完整程序,供學生參考。
2.5 分組課程設計,培養團隊合作精神
課程設計是體現《數據結構》理論和實踐緊密結合的重要環節。通過課程設計,不但鍛練學生描述概念、構建數據結構、設計算法的能力,而且鍛練學生運用自己所學知識通過高級程序語言解決實際問題的能力。
課程設計的題目一般選擇綜合設計類型,如風景區景點路徑查詢、簡單114查號臺等。要求學生首先進行需要分析,明確目標如何,需要實現那些功能;其次是進行概要設計和數據結構設計,定義各功能模塊和其內部流程、抽象數據結構,最后編碼調試并寫成小論文。
由于單個學生完成任務存在較大困難,課程設計還需要分組。分組時要考慮學生的實際情況,要考慮各個小組實力均衡,具體做法是把學習成績較好的學生和成績靠后的學生安排在同一組。課程設計完成后,還安排答辯。答辯的形式是隨機抽查小組內的一個成員,由該成員代表小組進行答辯,該成員的成績就是該小組的成績。要求學生回答系統設計思想、總體架構、開發過程碰到什么困難、整個系統有何優缺點等。通過這種形式,可防止出現課程設計只是由小組內水平高的學生單獨完成,而其他成員基本不參與的情況。這種答辯形式可以極大地調動了學生的積極性。為了不讓自己拖小組的后腿,學生們相互學習,熱烈討論,表現出極大的參與熱情。最后的結果是小組所有成員水平有了很大提高,培養了團隊合作精神。
3 結束語
運用高級語言進行程序設計是一個創造性的過程?!稊祿Y構》課程的教學目標之一就是要提高計算機專業學生的程序設計語言能力。筆者在《數據結構》教學過程中的上述措施,目的就是要解決學生在學習過程中由語言所造成的困難,最終提高其程序設計能力。教學實踐也證明,上述措施提高了學生C語言技能,降低由程序語言造成的難度;而且針對性的訓練可讓學生很快地掌握調用教材上的算法函數,理解了教材的知識體系結構。程序功能整合使學生有成就感和增強自信,需要答辯的課程設計使鍛練了學生運用所學理論解決實際問題的能力,也培養了團隊合作精神。這種側重程序的教學模式取得良好的教學效果。
參考文獻:
[1]嚴蔚敏,吳偉民. 數據結構(C語言版)[M]. 北京:清華大學出版社,2006.
[2]嚴蔚敏,吳偉民. 數據結構題集(C語言版)[M]. 北京:清華大學出版社,2004.
[3]黃揚銘. 數據結構[M]. 北京:科學出版社,2005.