曹海英+元元+郝兵
摘要:在C語言課程的教學(xué)中不僅要讓學(xué)生掌握C語言語法與程序結(jié)構(gòu),更重要的是培養(yǎng)學(xué)生掌握常用的算法并且能夠利用計算機語言設(shè)計程序,解決實際問題的能力。實踐能力的培養(yǎng)主要依靠實驗教學(xué),高校需要重視C語言的實驗教學(xué),在開展實驗教學(xué)時可以依據(jù)學(xué)生對知識掌握、應(yīng)用的認知規(guī)律,進行分層試驗教學(xué)。
關(guān)鍵詞:程序設(shè)計;實驗;教學(xué);分層
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2017)34-0128-02
大多數(shù)的理工科院系都選擇C語言作為程序設(shè)計學(xué)習(xí)的入門課程,因為C語言語法結(jié)構(gòu)簡潔精妙,程序代碼少,運行效率快且高效,程序設(shè)計人員都愿意使用C語言去描述算法,所以想提高利用計算機求解問題的能力,就必須掌握C語言。C語言能夠深入系統(tǒng)底層,用C語言可以編寫設(shè)備驅(qū)動程序和操作系統(tǒng)。很多新型的語言都是衍生自C語言,如C++、Java、C#,掌握了C語言,有了C語言的基礎(chǔ),經(jīng)過簡單的學(xué)習(xí),就可以用這些新型的語言去開發(fā)軟件。從上可知C語言在程序設(shè)計中占據(jù)重要的地位。
1 C程序設(shè)計教學(xué)內(nèi)容
C程序設(shè)計作為高校的計算機基礎(chǔ)核心課程,教學(xué)過程中不僅要讓學(xué)生掌握C語言語法與程序結(jié)構(gòu);更要通過該門課程的教學(xué)讓學(xué)生掌握一定的程序設(shè)計算法與思想,培養(yǎng)學(xué)生利用計算機求解問題的能力。提高C語言編程能力必須依靠一個又一個上機實驗,不斷地“思考——編程—調(diào)試—運行—測試—反思”,這就需要保證C語言程序設(shè)計課程的實驗教學(xué)學(xué)時。但隨著高校教學(xué)改革的不斷深入,教學(xué)課時在不斷的縮減,因此需要教師在教學(xué)的過程中,不能面面俱到的講授,而是必須梳理知識脈絡(luò),以“理論夠用,突出實踐”為原則,將課程教學(xué)內(nèi)容進行整合優(yōu)化,形成教學(xué)內(nèi)容邏輯框架,如圖1所示。
2 階段式分層實驗教學(xué)
C程序設(shè)計課程的實驗教學(xué)環(huán)節(jié)在課程教學(xué)中具有重要的作用,充分利用有限的實驗學(xué)時開展高效的實驗教學(xué),可以幫助學(xué)生理解程序設(shè)計的思想,學(xué)會運用理論知識編程解決實際問題。按照學(xué)生的認知規(guī)律和軟件工程思想,在實驗教學(xué)時,可進行階段式分層實驗教學(xué)。
2.1 階段式實驗教學(xué)
第一階段:引起求知欲。為了提高學(xué)生實踐應(yīng)用能力,需要在有限的學(xué)時內(nèi)組織好實驗教學(xué)。教學(xué)應(yīng)從誘發(fā)和激起求知欲開始,讓學(xué)生產(chǎn)生知與不知的矛盾,激發(fā)起求知的內(nèi)在動力??梢圆捎蒙钪械脑蛯嵗?,例如:在學(xué)習(xí)switch語句設(shè)計多分支選擇結(jié)構(gòu)程序時,可以引入銀行排隊系統(tǒng)的小票、政務(wù)大廳服務(wù)選項選擇等實例,通過提出這些身邊的依據(jù)數(shù)字選擇進行服務(wù)的實例是如何通過switch語句實現(xiàn)的問題,必定能引起學(xué)生的學(xué)習(xí)興趣,再逐步引導(dǎo)學(xué)生利用switch語句設(shè)計程序,解決該類問題。
第二階段:引導(dǎo)設(shè)計算法,找出解決具體問題的數(shù)學(xué)模型,確定使用計算機思維解決問題的基本思想方法和步驟。通過算法的表示方法如:自然語言、結(jié)構(gòu)化流程圖、偽代碼等對解決問題采取的方法和步驟進行具體的描述。包括需要什么數(shù)據(jù)(輸入什么數(shù)據(jù)、處理什么數(shù)據(jù),輸出什么結(jié)果);采用結(jié)構(gòu)化程序設(shè)計中的順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)中的什么結(jié)構(gòu);使用什么語句以及如何安排這些語句等。建議選擇使用結(jié)構(gòu)化流程圖來描述算法,并且可以直接在RAPTOR軟件中繪制流程圖,驗證算法是否正確。
第三階段:利用最新學(xué)習(xí)的C語言的知識與技能,實現(xiàn)程序編寫。在編寫程序時要注重培養(yǎng)學(xué)生養(yǎng)成良好的程序設(shè)計風(fēng)格。編寫的源程序要文檔化,標識符應(yīng)按意取名,復(fù)雜的數(shù)據(jù)結(jié)構(gòu)、程序的主要功能應(yīng)加注釋。程序中語句構(gòu)造的原則是:簡單直接,不能為了追求效率而使代碼復(fù)雜化。不要一行多個語句,不同層次的語句采用縮進形式,使程序的邏輯結(jié)構(gòu)和功能特征更加清晰。
第四階段:程序測試與錯誤分析,調(diào)試,修改程序。通過程序的測試可以發(fā)現(xiàn)程序中的Bug,調(diào)試解決這些Bug,是提高程序設(shè)計能力的最有效的手段。程序出錯可以分為:編譯錯誤,鏈接錯誤,運行錯誤。在程序?qū)W習(xí)初期,常會犯前兩種錯誤,主要是不熟悉C語言的語法,或者是調(diào)用標準庫函數(shù)時,函數(shù)名沒有拼寫正確,這樣的錯誤通過引導(dǎo)學(xué)生學(xué)會查看Message窗口的提示信息,找到錯誤的位置,修改即可。最難的是運行錯誤,可能出現(xiàn)程序無法正常運行,或者使用測試用例進行測試時,運行的結(jié)果與預(yù)期不一致。對于程序無法運行,往往在程序中存在隱藏的邏輯錯誤,不容易發(fā)現(xiàn),在調(diào)試時可以引導(dǎo)學(xué)生合理的使用調(diào)試工具:設(shè)置端點、單步跟蹤、監(jiān)視窗口;并且合理配合調(diào)試方法:逆向推理、分治排除、縮減輸入等。找出程序錯誤,促使程序正常運行。
程序能夠正常運行時要設(shè)置典型的測試用例,根據(jù)要測試程序的結(jié)構(gòu)還是測試程序的功能,分別進行軟件工程中的白盒測試與黑盒測試。這樣可以培養(yǎng)學(xué)生以軟件工程的思維去開發(fā)程序,使學(xué)生在學(xué)習(xí)程序設(shè)計的初級階段就樹立正確的軟件工程觀點。這樣做不僅可以為學(xué)生將來從事計算機應(yīng)用設(shè)計打下良好的基礎(chǔ),而且有利于培養(yǎng)學(xué)生分析問題的完整性,提高學(xué)生的解決實際問題的能力。
第五階段:優(yōu)化程序,找出最優(yōu)的解決方法。在實驗教學(xué)中,相同的實踐內(nèi)容,學(xué)生可以給出很多的解決問題的方法,通過教師的引導(dǎo),讓學(xué)生發(fā)現(xiàn)自己的程序設(shè)計的不足,優(yōu)化算法、優(yōu)化代碼。算法優(yōu)化主要考慮時間復(fù)雜度、空間復(fù)雜度的問題,需要程序執(zhí)行所耗費的時間要少,并且程序在運行過程中占用臨時存儲空間小。代碼優(yōu)化一般需要與算法優(yōu)化同步進行,代碼優(yōu)化主要涉及具體的編程技巧。同樣的算法與功能,不同的寫法也可能讓程序效率有差異。一般而言,代碼優(yōu)化主要是針對循環(huán)結(jié)構(gòu)進行分析處理。
2.2 分層實驗教學(xué)
在C語言的學(xué)習(xí)中要求學(xué)生程序設(shè)計的能力在教學(xué)中逐層提高,從基本的程序設(shè)計,到涉及數(shù)組、結(jié)構(gòu)體、指針的中級程序設(shè)計能力,以及涉及文件的高級程序設(shè)計能力。在進行實驗教學(xué)設(shè)計時可以設(shè)計綜合型的實踐內(nèi)容,比如學(xué)生點餐系統(tǒng),在學(xué)習(xí)的過程中,分層次逐步完善系統(tǒng)功能,如表1所示。
相同的內(nèi)容可以根據(jù)學(xué)生對知識的掌握規(guī)律即認識、理解、掌握、應(yīng)用,分層設(shè)計實驗教學(xué)內(nèi)容。實驗教學(xué)內(nèi)容層次分為驗證型、應(yīng)用型、綜合型、設(shè)計型。實驗教學(xué)的難度逐層遞進、在不斷的實踐中逐步提高其C語言的編程水平。
3 結(jié)束語
學(xué)習(xí)程序設(shè)計語言的目的不僅僅是掌握知識點,還要理解程序設(shè)計的思想,學(xué)會運用理論知識編程解決實際問題。實驗教學(xué)不僅可以使學(xué)生加深對理論知識的理解,強化記憶,而且可以很好地鍛煉學(xué)生的實際動手操作能力,培養(yǎng)其邏輯思維方式和計算思維方式,引導(dǎo)學(xué)生學(xué)會如何應(yīng)用所學(xué)知識解決實際問題。想要提高實驗教學(xué)的教學(xué)質(zhì)量,需要根據(jù)學(xué)生學(xué)習(xí)的規(guī)律與實際情況不斷地進行教學(xué)探索。
參考文獻:
[1] 謝鵬,曾升,白金鑫,等.原型實例在C語言程序設(shè)計課程中的應(yīng)用[J].山東工業(yè)技術(shù),2016(12).
[2] 李文娟,郭永紅.基于C語言的學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)[J].中央民族大學(xué)學(xué)報:自然科學(xué)版,2016(2).
[3] 劉光蓉.融入計算思維的C語言實驗教學(xué)設(shè)計[J].實驗室研究與探索,2015(10).
[4] 顧泰龍,李遠靜.基于C語言的計算機軟件編程實驗研究[J].軟件工程師,2013(8).
[5] 賴永秀,李凌,饒妮妮.任務(wù)驅(qū)動法在C語言實踐教學(xué)中的應(yīng)用[J].實驗科學(xué)與技術(shù),2012(3).