文章編號(hào):1672-5913(2008)18-0013-01
摘要:本文結(jié)合作者近幾年指導(dǎo)本科生C語(yǔ)言實(shí)驗(yàn)的一些經(jīng)驗(yàn),探討了如何在C語(yǔ)言實(shí)驗(yàn)教學(xué)中提高學(xué)生的綜合實(shí)踐能力;并就如何在第二課堂培養(yǎng)IT人才,提出了合理有效地利用ACM、開(kāi)源軟件、網(wǎng)絡(luò)論壇等多種國(guó)外先進(jìn)教學(xué)手段進(jìn)行培養(yǎng)的觀點(diǎn)。
關(guān)鍵詞:C語(yǔ)言;實(shí)驗(yàn)教學(xué);第二課堂;ACM;開(kāi)源軟件
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B
目前C語(yǔ)言程序設(shè)計(jì)課程是高等院校的重點(diǎn)課程之一,是眾多計(jì)算機(jī)和軟件專業(yè)的學(xué)生接觸的第一門(mén)專業(yè)基礎(chǔ)課,所以編程能力的培養(yǎng)顯得尤為重要。
1在實(shí)驗(yàn)教學(xué)中培養(yǎng)學(xué)生能力
1.1培養(yǎng)學(xué)生獨(dú)立思考的能力
教師應(yīng)避免直接回答學(xué)生提出的問(wèn)題,而是給出必要的提示,引導(dǎo)他們?nèi)ゲ殚喗滩暮凸P記,去認(rèn)真思考與分析,找出錯(cuò)誤的原因。記得一次C語(yǔ)言上機(jī)實(shí)驗(yàn)中,有同學(xué)問(wèn)了這樣一個(gè)問(wèn)題:“通常函數(shù)參數(shù)的個(gè)數(shù)都是固定的,但我們最常用到的printf、scanf這些函數(shù)的參數(shù)個(gè)數(shù)可以是不固定的,這在C語(yǔ)言里是如何實(shí)現(xiàn)的?”由此可看出這個(gè)同學(xué)在問(wèn)這個(gè)問(wèn)題之前,獨(dú)立進(jìn)行了思考,可能也查閱了很多參考資料。這種經(jīng)過(guò)深思熟慮而提出的問(wèn)題是非常有價(jià)值的,相信他會(huì)得到真正的提高。
1.2培養(yǎng)學(xué)生動(dòng)手調(diào)試的能力
計(jì)算機(jī)是一門(mén)需要實(shí)踐的學(xué)科,多動(dòng)手、多動(dòng)腦是學(xué)好語(yǔ)言所必須的,在C語(yǔ)言實(shí)驗(yàn)中,對(duì)于程序中出現(xiàn)的問(wèn)題要自己多動(dòng)手、多調(diào)試,盡量來(lái)自己解決,因?yàn)橛行﹩?wèn)題看似簡(jiǎn)單,實(shí)則包含著很多內(nèi)容,再簡(jiǎn)單的程序都要結(jié)合語(yǔ)言的自身特點(diǎn),以一種最優(yōu)化的結(jié)構(gòu)去表達(dá),不能忽視任何小問(wèn)題。比如有這樣一個(gè)小程序求兩個(gè)數(shù)之和。
main1()
{
int a, b, s;
scanf(“a=%d, b=%d”,a, b);
s=a + b;
printf(“s = %d”, s);
}
對(duì)于初學(xué)者來(lái)說(shuō),寫(xiě)出這樣的程序還是很好的,無(wú)論從語(yǔ)法上還是語(yǔ)義上都沒(méi)有錯(cuò),可是上機(jī)運(yùn)行時(shí)就會(huì)發(fā)現(xiàn)不能得出結(jié)果,通過(guò)調(diào)試會(huì)發(fā)現(xiàn)scanf函數(shù)實(shí)際上還有許多約束。動(dòng)腦寫(xiě)程序和動(dòng)手調(diào)試程序都是學(xué)習(xí)計(jì)算機(jī)必備的能力,因?yàn)榫幾g通過(guò),不等于程序正確;一種輸入正確,不等于所有的輸入都正確;一次運(yùn)行正確,不等于次次運(yùn)行都正確。程序總會(huì)出一些莫名其妙的錯(cuò)誤,想解決這些錯(cuò)誤,唯一的手段就是調(diào)試。調(diào)試不僅是解決程序問(wèn)題的重要手段,也是學(xué)習(xí)的好工具。實(shí)驗(yàn)指導(dǎo)教師一定要并引導(dǎo)學(xué)生通過(guò)調(diào)試而不是對(duì)著屏幕干看來(lái)尋找程序的錯(cuò)誤。同學(xué)們?nèi)フ{(diào)試程序不僅可以發(fā)現(xiàn)程序中存在的問(wèn)題,同時(shí)還可以更好地相互交流學(xué)習(xí),可使同學(xué)們的編程能力得到迅速提高。
1.3培養(yǎng)學(xué)生自己發(fā)現(xiàn)問(wèn)題和解決問(wèn)題的能力
在指導(dǎo)實(shí)驗(yàn)過(guò)程中實(shí)驗(yàn)教師要引導(dǎo)為主,傳授為輔。既不能只指而不導(dǎo),為圖省事給學(xué)生包辦代替、什么都替學(xué)生去做,又不能放任自流、對(duì)學(xué)生不聞不問(wèn)。一定要通過(guò)啟發(fā)等方式來(lái)引導(dǎo)學(xué)生自己解決遇到的問(wèn)題。教師要鼓勵(lì)學(xué)生通過(guò)個(gè)人實(shí)踐來(lái)獲得判別能力。在這個(gè)過(guò)程中,學(xué)生不可避免地會(huì)犯各種錯(cuò)誤,甚至?xí)鎸?duì)失敗,但失敗的經(jīng)驗(yàn)也是學(xué)生積累的最寶貴的財(cái)富。這樣可以讓學(xué)生充分地感受自己發(fā)現(xiàn)問(wèn)題、獨(dú)立解決問(wèn)題的樂(lè)趣,提高他們的動(dòng)手能力和分析問(wèn)題、解決問(wèn)題的綜合能力。
1.4培養(yǎng)學(xué)生創(chuàng)新的能力
創(chuàng)新是對(duì)未知的探索與求解,教學(xué)不僅要向?qū)W生傳授知識(shí)和技能,還要?jiǎng)?chuàng)造必要的條件,培養(yǎng)學(xué)生的獨(dú)立創(chuàng)造的個(gè)性品質(zhì),培養(yǎng)他們的創(chuàng)新素質(zhì)。
具體為同一問(wèn)題可讓學(xué)生設(shè)計(jì)出不同的解決方案,給他們無(wú)限的發(fā)揮空間。如一個(gè)簡(jiǎn)單問(wèn)題:猴子吃桃問(wèn)題,猴子第一天摘下若干只桃子,當(dāng)即吃了一半零一個(gè),第二天又吃了剩余桃子的一半零一個(gè),以后每天都吃前一天剩余桃子的一半零一個(gè),到第十天想吃時(shí),發(fā)現(xiàn)只剩下一個(gè)桃子了,求第一天猴子共摘了多少桃子。大多數(shù)同學(xué)都用循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的方法來(lái)編程,可實(shí)際上還可以用遞歸等方法來(lái)編,教師不應(yīng)給出題目的解決辦法和思路,至多只能提示一下思考方向,完全讓學(xué)生通過(guò)自己的能力來(lái)解決問(wèn)題,對(duì)在此過(guò)程中出現(xiàn)的失誤和失敗,也要肯定學(xué)生的探索精神。這樣學(xué)生在糾正缺點(diǎn)彌補(bǔ)不足的過(guò)程中就已經(jīng)使自己的實(shí)踐能力得以提高,每位同學(xué)的創(chuàng)新思維也大大加強(qiáng)了。
2在第二課堂上培養(yǎng)學(xué)生
2.1利用ACM提高學(xué)生的編程能力
ACM國(guó)際性大學(xué)生程序設(shè)計(jì)競(jìng)賽自1970年開(kāi)始,其宗旨是使大學(xué)生能通過(guò)計(jì)算機(jī)充分展示自己分析問(wèn)題和解決問(wèn)題的能力。參加本項(xiàng)比賽的選手至少需要掌握計(jì)算機(jī)科學(xué)的常用算法,基本的計(jì)算理論(如離散數(shù)學(xué),具體數(shù)學(xué),組合數(shù)學(xué)基礎(chǔ)),數(shù)據(jù)結(jié)構(gòu)基礎(chǔ),程序設(shè)計(jì)語(yǔ)言(規(guī)定是C/C++或者是Java)。在本項(xiàng)比賽中考察學(xué)生的不僅僅是能夠完成指定任務(wù)的程序,更要求在完成程序的功能的基礎(chǔ)之上提高程序的運(yùn)行效率與空間占用率。時(shí)時(shí)刻刻都應(yīng)當(dāng)去考慮如何去最大限度的優(yōu)化,改善你的程序結(jié)構(gòu),以達(dá)到用最小的空間,最優(yōu)的算法實(shí)現(xiàn)程序的功能。從數(shù)學(xué)角度考慮,題目主要的方向集中在工程數(shù)學(xué),一般題目都會(huì)給出要求和幾組輸入和輸出作為程序設(shè)計(jì)的參考,也是檢驗(yàn)程序正確性的標(biāo)準(zhǔn)之一。現(xiàn)在很多大學(xué)都有ACM在線答題系統(tǒng),同學(xué)們課余只要有時(shí)間,就可以在線做題,見(jiàn)識(shí)到各種各樣的題型,編程能力自然得到提高。
2.2充分利用互聯(lián)網(wǎng)、利用開(kāi)源軟件
我們可以查看、研究開(kāi)源軟件的源代碼,并且可以在遵從一定規(guī)則的前提下使用這些源代碼開(kāi)發(fā)新的軟件。
網(wǎng)絡(luò)論壇通常是一個(gè)很大的網(wǎng)站,在這個(gè)網(wǎng)站上注冊(cè)有成百上千甚至數(shù)萬(wàn)個(gè)正在開(kāi)發(fā)的開(kāi)源軟件項(xiàng)目,每個(gè)人都可以注冊(cè)自己的項(xiàng)目,也可以想辦法參加自己感興趣的項(xiàng)目的開(kāi)發(fā)。參與這樣的項(xiàng)目開(kāi)發(fā),不僅能鍛煉技術(shù)、還能鍛煉英語(yǔ)以及溝通的能力,更重要的是能開(kāi)拓眼界,知道世界上其他國(guó)家的計(jì)算機(jī)專業(yè)的學(xué)生們都在做什么。當(dāng)學(xué)生們?cè)谑褂媚硞€(gè)開(kāi)源軟件的過(guò)程中發(fā)現(xiàn)了不足,就可以其進(jìn)行改進(jìn),并把改進(jìn)的結(jié)果回饋給開(kāi)源社區(qū),并慢慢地真正融入這個(gè)社區(qū)當(dāng)中。當(dāng)學(xué)生們慢慢地在這個(gè)社區(qū)當(dāng)中成長(zhǎng)了,也許就可以慢慢地創(chuàng)建自己的項(xiàng)目了。
2.3效仿國(guó)外Linux社區(qū),舉辦各種實(shí)踐活動(dòng)
有許多同學(xué)想學(xué)習(xí)一下Linux,因?yàn)長(zhǎng)inux和Windows差別很大,學(xué)生們碰到的第一個(gè)問(wèn)題往往是不會(huì)安裝。因此可效仿國(guó)外Linux社區(qū)的做法,搞一次小型的Linux Install Festival,即讓Linux高手幫助新手們安裝Linux系統(tǒng)。這既讓新手們提高了能力,也給校內(nèi)的同學(xué)們一個(gè)相互交流的機(jī)會(huì)。
3結(jié)束語(yǔ)
通過(guò)以上活動(dòng),同學(xué)們能夠在實(shí)驗(yàn)教學(xué)中提高綜合實(shí)踐能力。在今后學(xué)習(xí)離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、算法、組合數(shù)學(xué)、人工智能、計(jì)算機(jī)組成原理、匯編語(yǔ)言、操作系統(tǒng)、數(shù)據(jù)庫(kù)原理、計(jì)算機(jī)網(wǎng)絡(luò)、編譯原理等專業(yè)課和其他基礎(chǔ)課的過(guò)程中,如果同學(xué)們嘗試著多做一些實(shí)踐,那么學(xué)習(xí)效果一定會(huì)事半功倍。
參 考 文 獻(xiàn)
[1] 朱清時(shí). 什么樣的基礎(chǔ)課教材是最好的[J]. 中國(guó)大學(xué)教學(xué),2006,(8).
[2] 譚浩強(qiáng). C程序設(shè)計(jì)[M]. 北京:清華大學(xué)出版社,2002:120.