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