葛耿育
摘要:C語言作為計算機(jī)類專業(yè)的基礎(chǔ)編程課程,在后續(xù)的高級語言、數(shù)據(jù)結(jié)構(gòu)以及算法的學(xué)習(xí)中起到了重要的鋪墊作用。然而,在實際的教學(xué)過程中,作者以及其他同課程的教師在教學(xué)中發(fā)現(xiàn)了一系列的難題。該文針對地方高校C語言教學(xué)中存在的問題,根據(jù)學(xué)生的課程反饋信息和教師的課堂教學(xué)中所發(fā)現(xiàn)的現(xiàn)象加以分析,并提出一些卓有成效的解決方法,使得學(xué)生能夠較為輕松的學(xué)習(xí)C語言,并且能夠促進(jìn)對計算機(jī)工作原理的深層次理解。
關(guān)鍵詞:C語言;計算機(jī);教學(xué)
中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)32-0171-02
C Language Teaching Problems and Solutions in Local Colleges
GE Geng-yu
(School of Information Engineering,Zunyi Normal College, Zunyi 563006,China)
Abstract:As the basic course of computer science specialty, C language is so important to the subsequent courses like high-level programming language, data structure and algorithm. But, a series of problems are found by author and teaching team in the actual teaching process.According to the feedback of students at class and phenomenon found by teachers, some effective solutions are put forward to make students learn C language more easily and promote the deep understanding of the principle of computer science.
Key words: C language; computer; teaching
1 概述
C語言程序設(shè)計基礎(chǔ)(以下簡稱C語言)是高校理工科尤其是計算機(jī)類專業(yè)教學(xué)的入門課,對后續(xù)的很多專業(yè)核心課程起到了重要的鋪墊作用。C語言作為既接近高級語言又貼近底層硬件的編程語言,有其獨(dú)特的優(yōu)勢,如C語言可以用來開發(fā)操作系統(tǒng)(Linux的大部分代碼用的就是C語言)、多數(shù)外圍設(shè)備接口的硬件驅(qū)動程序、數(shù)據(jù)庫、應(yīng)用軟件(office等)、嵌入式系統(tǒng)、工業(yè)機(jī)器人等[1],最主要的是C語言可以為學(xué)習(xí)其他計算機(jī)語言奠定堅實的基礎(chǔ)。因此,在教學(xué)中如何讓學(xué)生學(xué)好C語言課程對于后續(xù)的課程意義重大。
C語言課程的參考書有成千上百本,但是基本上都是集中講解以下核心內(nèi)容:C語言的基本框架案例、數(shù)據(jù)類型、變量和常量、運(yùn)算符、表達(dá)式、語句、順序結(jié)構(gòu)、選擇結(jié)構(gòu)或分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、轉(zhuǎn)向語句、函數(shù)、預(yù)處理、數(shù)組、地址、指針、動態(tài)內(nèi)存(存儲)分配、結(jié)構(gòu)體、共用體、文件等內(nèi)容[2-4]。
2 C語言教學(xué)中存在的問題及解決方法
2.1 生源問題分析
中西部的地方院校高考生源大部分來自于各個鄉(xiāng)鎮(zhèn)或縣城中學(xué),大部分學(xué)生在大學(xué)入學(xué)前沒有過多地接觸過計算機(jī)深層次的知識和操作,加上很多師范類的院校存在女生較多,被調(diào)劑的比重較大,因此學(xué)生入學(xué)后難以對專業(yè)課程和方向感興趣,因而缺乏學(xué)習(xí)的動力和熱情。
針對以上問題,該課程教學(xué)團(tuán)隊考慮從吸引學(xué)生的興趣入手,在課堂中給學(xué)生們演示四軸飛行器、人形機(jī)器人、輪式和履帶式機(jī)器人等基于嵌入式控制的智能作品,告訴學(xué)生這些基于STM32系列單片機(jī)的智能體都是用C語言開發(fā)的程序,因此學(xué)好C語言后大家也可以做出此類的作品,對以后的學(xué)科競賽,創(chuàng)新創(chuàng)業(yè)起到很好的鋪墊作用。目前國家很重視創(chuàng)新創(chuàng)業(yè)教育,未來的主流技術(shù)包括物聯(lián)網(wǎng)、大數(shù)據(jù)、機(jī)器人等,C語言是其中最基礎(chǔ)的課程之一。經(jīng)過一番教育之后,學(xué)生的學(xué)習(xí)熱情明顯高漲,學(xué)習(xí)興趣濃厚。
2.2 先導(dǎo)課程問題
全國很多院校也都將C語言程序設(shè)計基礎(chǔ)課程放在大一學(xué)年上學(xué)期開設(shè),這其中存在著一些問題,如操作系統(tǒng)、計算機(jī)組成原理等計算機(jī)核心課程還沒有學(xué)習(xí),因此學(xué)生并不能理解內(nèi)存以及存儲器存儲變量或者數(shù)據(jù)的概念,因此難以理解變量、數(shù)組連續(xù)存儲單元、地址和指針內(nèi)容的本質(zhì)。
針對以上問題,課程組討論的結(jié)果是在課程的最初幾節(jié)課中給學(xué)生做一些計算機(jī)軟硬件基本組成部分和工作原理的知識鋪墊,并且拆卸了一些老舊主機(jī)上的CPU芯片、內(nèi)存條、硬盤和主板給學(xué)生演示,讓學(xué)生知道很多主板上的設(shè)備都有配套的接口芯片,內(nèi)存也是一種芯片,內(nèi)部存儲的是高低電平,這種物理電路特征可以抽象成二進(jìn)制數(shù)據(jù)的0和1。
關(guān)于機(jī)器語言是0和1的組合問題,作者覺得有些爭議,容易讓學(xué)生誤解。高級語言往底層的一級為匯編語言,相當(dāng)于英文單詞的縮記符,再往底層的一級為0和1的組合語言。很多教科書將0和1作為機(jī)器語言來定義和闡述,如果這里面存在一個共識,即0和1是相對于硬件抽象出來的語言,則是正確的,但是機(jī)器硬件根本識別不了0和1,只能識別出高低電平。因此,作者認(rèn)為,底層的機(jī)器語言應(yīng)該是高低電平或者電路的通和斷,0和1是抽象出來的機(jī)器語言。
2.3 微機(jī)操作問題
很多學(xué)生剛?cè)雽W(xué)的時候沒有筆記本或者臺式機(jī)電腦,根據(jù)課堂調(diào)查,新生入學(xué)后購買筆記本的人數(shù)不足10%。加上現(xiàn)在智能手機(jī)的普及,學(xué)生練習(xí)打字都是在屏幕較小的手機(jī)觸屏上用單個手指敲字,因此使用實驗室的標(biāo)準(zhǔn)鍵盤后打字速度很慢,對鍵盤的各個按鍵分布不熟悉。平時練習(xí)C語言程序的時候缺乏創(chuàng)造性,大部分同學(xué)都是根據(jù)書上的例程來,先是看著書上代碼的幾個字符,然后看著鍵盤上的相應(yīng)按鍵敲擊,再看著顯示屏上的字符有沒有敲錯,整個過程耽誤課堂時間,效率低下,甚至很多學(xué)生不知道如何切換中英文輸入法,字母大小寫等。endprint
針對以上問題,作者對學(xué)生講解標(biāo)準(zhǔn)鍵盤的大概按鍵分布,然后聯(lián)合教學(xué)團(tuán)隊其他教師向院系申請每周固定時間開放計算機(jī)實驗機(jī)房,在電腦上安裝金山打字等軟件,讓學(xué)生利用課余時間熟悉鍵盤分布和提高打字速度。經(jīng)過幾周的實踐,學(xué)生的打字速度和準(zhǔn)確率明顯得到了提升,在正常實驗課堂教學(xué)中節(jié)約了時間。
2.4 編程軟件問題
目前國內(nèi)主流的操作系統(tǒng)依然是微軟的Windows系列,新生剛從電腦城買的電腦大多數(shù)預(yù)裝的都是Windows 10,并且不知道如何重裝操作系統(tǒng),因此需要考慮到很多編程軟件的兼容性問題。主流的C語言IDE開發(fā)環(huán)境有Microsoft Visual C++6.0、Turbo C、VS studio、C-Free、Dev C++等。由于全國計算機(jī)等級考試二級C語言機(jī)試環(huán)境用的就是Microsoft Visual C++6.0軟件,因此學(xué)校機(jī)房云平臺上預(yù)裝的就是該軟件,在Windows 7操作系統(tǒng)使用很少會出問題,但是Win7 64位、Win8 和Win10上會出現(xiàn)很多兼容性的問題。
針對這些問題,建議學(xué)生在不熟悉重裝操作系統(tǒng)的步驟前,先下載其他的C語言編程環(huán)境安裝使用。VS studio雖然功能強(qiáng)大,但是安裝包太大,因此不建議學(xué)生使用;Turbo C小巧方便,但是鼠標(biāo)在里面難以使用,初學(xué)者使用不方便,耽誤時間,建議熟悉其中的環(huán)境和熟練使用鍵盤后再使用;C-Free軟件是國內(nèi)自主開發(fā)的一個中文版IDE,學(xué)生使用起來特別是英語功底太差的同學(xué)也能很容易看懂菜單和工具欄上的功能按鈕,在win10上兼容性較好,并且C-Free 4.0版是功能比較齊全的免費(fèi)版,很適合初學(xué)者;Dev C++是NOI(全國青少年信息學(xué)奧林匹克競賽)和NOIP(全國青少年信息學(xué)奧林匹克聯(lián)賽)等比賽的指定工具,使用起來快捷方便,是一款自由軟件,遵守GPL許可協(xié)議分發(fā)源代碼。除此之外,如果學(xué)生時間充裕,可以嘗試使用CodeBlocks、Codelite等,擴(kuò)展一下視野,總結(jié)多種IDE的共同點(diǎn),促進(jìn)更好的學(xué)習(xí)。
2.5 初學(xué)者常犯的錯誤
由于學(xué)生剛從高中的應(yīng)試教育轉(zhuǎn)向大學(xué)的開放、自由、創(chuàng)新和應(yīng)用型本科教育轉(zhuǎn)變,很多慣性思維和學(xué)習(xí)方法還未轉(zhuǎn)變,并且C語言教學(xué)中很注重實驗和實踐操作,因此很多學(xué)生在初步學(xué)習(xí)經(jīng)常會犯一些基本錯誤。經(jīng)典的錯誤類型和排錯方法有:新建工程時位置(存儲路徑)不更改,默認(rèn)路徑在C盤的某個目錄下,這樣后面修改或者調(diào)用該工程文件時就很難找到,因此需要更改工程存儲位置在自己新建的某個文件夾下;新建工程時只需要工程名,擴(kuò)展名系統(tǒng)自動生成,工程名中不能包含特殊字符如“.”,否則文件類型就變了;編譯代碼后,發(fā)現(xiàn)錯誤不知道從何下手,應(yīng)根據(jù)debug框的提示信息排錯;函數(shù)名后面不加(),scanf內(nèi)部取變量值忘加&等符號[5,6];C語言的關(guān)鍵詞寫錯等錯誤類型。
這些初學(xué)者常犯的錯誤經(jīng)過一段時間的學(xué)習(xí)和實踐后都能得到糾正,但是一個比較嚴(yán)重的問題是學(xué)生認(rèn)為只要代碼編譯沒有錯就應(yīng)該得到自己所預(yù)料的執(zhí)行結(jié)果。實際操作中任課教師布置的作業(yè)任務(wù),學(xué)生很多在語句框架和語法上沒有錯,但是在邏輯結(jié)構(gòu)上存在著錯誤,因此這類問題需要長時間的跟學(xué)生解釋和案例演示。
2.6 控制臺程序枯燥問題
經(jīng)過幾周的理論和實驗課程學(xué)習(xí)后,學(xué)生逐漸發(fā)現(xiàn)VC++6.0軟件開發(fā)出來的win32控制臺程序只能在編程環(huán)境下執(zhí)行程序,認(rèn)為C語言只能干這些事情很枯燥。
針對這個問題,作者分析了IDE環(huán)境的特征,VC++6.0軟件提供的“!”執(zhí)行程序按鈕,執(zhí)行完程序后控制臺程序保持暫停直到根據(jù)press any key to continue...提示輸入任意按鍵后才結(jié)束,這個是因為IDE提供的功能。但是當(dāng)生成.exe格式可執(zhí)行文件后,雙擊運(yùn)行會看到控制臺程序一閃就消失了。分析原因知道,程序運(yùn)行速度太快(參考CPU的主頻),所以讓學(xué)生在代碼中加入預(yù)處理語句#include
此外,教師團(tuán)隊從網(wǎng)上搜索了一些基于Windows.h的簡單窗口程序,如定時開關(guān)機(jī)軟件、簡易計算器、俄羅斯方塊和貪吃蛇游戲等的源代碼和可執(zhí)行文件,并展示Linux操作系統(tǒng)的源代碼,讓學(xué)生知道C語言的功能很強(qiáng)大,關(guān)鍵在于掌握編程方法,根據(jù)市場的需求開發(fā)相應(yīng)的規(guī)范軟件[7,8]。
3 MOOC時代C語言教學(xué)方法改革
近幾年來,隨著國外MOOC(大規(guī)模開放式在線課程)平臺如Coursera、Edx以及OCWC等在國內(nèi)的興起,引發(fā)了一系列的網(wǎng)絡(luò)視頻課程熱潮。國內(nèi)的CSDN平臺、51CTO、百度傳課、網(wǎng)易云課堂、騰訊云課堂、國家精品課程網(wǎng)等專業(yè)在線視頻學(xué)習(xí)網(wǎng)站均有成百上千的C語言完整課程體系視頻,其中網(wǎng)易云課堂中有浙江大學(xué)翁愷教授的《程序設(shè)計入門-C語言》和《C語言程序設(shè)計進(jìn)階》2套視頻課程。這些MOOC平臺上的大部分課程都是免費(fèi)的,而且提供了很好的師生互動和討論學(xué)習(xí)環(huán)節(jié)和模塊組,部分視頻是專業(yè)的IT培訓(xùn)機(jī)構(gòu)發(fā)布的資源,具有很多的項目經(jīng)驗和案例教學(xué)內(nèi)容。
因此,在新時期的高校教學(xué)中,作者以及教學(xué)團(tuán)隊需要合理利用網(wǎng)絡(luò)資源,與學(xué)校教育形成互補(bǔ),更加注重學(xué)生的實踐能力培養(yǎng)和實驗編程問題的現(xiàn)場及時解答。高校教育最終培養(yǎng)的是一個具備自主學(xué)習(xí)能力、分析問題和解決問題能力的創(chuàng)新創(chuàng)造型人才,因此教學(xué)團(tuán)隊引導(dǎo)學(xué)生利用課余時間多關(guān)注這些開放性的網(wǎng)絡(luò)資源平臺,包括視頻、網(wǎng)站、論壇和專業(yè)技術(shù)群組等。
4 總結(jié)
地方院校的學(xué)生基礎(chǔ)薄弱,在C語言的教學(xué)中需要根據(jù)學(xué)生的實際情況因材施教。隨著互聯(lián)網(wǎng)資源的日益完善,網(wǎng)絡(luò)平臺的多重形式教學(xué)資料可以被用來在高校中互補(bǔ)利用,課堂教學(xué)中更加注重課程內(nèi)容的解析和知識的擴(kuò)展,實驗教學(xué)中主要鍛煉學(xué)生C語言編程的基本語句框架和編程思維邏輯,從而為以后的專業(yè)課程中打好扎實的基礎(chǔ)。
參考文獻(xiàn):
[1] 魏二有.實用C語言教程[M].北京:清華大學(xué)出版社,2015.
[2] 譚浩強(qiáng).C語言程序設(shè)計教程[M].北京:清華大學(xué)出版社,2014.
[3] 楊杰,萬李.C語言程序設(shè)計基礎(chǔ)[M].長春:吉林大學(xué)出版社,2014.
[4] 明日科技.C語言從入門到精通[M]. 2版.北京:清華大學(xué)出版社,2016.
[5] Andrew Koenig.C陷阱與缺陷[M]. 北京:人民郵電出版社,2016
[6] Peter Van Der Linden. C專家編程[M]. 北京: 人民郵電出版社,2016.
[7] 康葦葦. 基于計算思維的C語言教學(xué)模式分析與案例設(shè)計[D].重慶:重慶師范大學(xué),2015.
[8] 劉光蓉. 融入計算思維的C語言實驗教學(xué)設(shè)計[J].實驗室研究與探索,2015,34(10):81-83.