摘 要:C語(yǔ)言是計(jì)算機(jī)專業(yè)的一門基礎(chǔ)課,也是很多高等院校學(xué)生初次接觸的編程語(yǔ)言,C語(yǔ)言的學(xué)習(xí)效果對(duì)于以后的學(xué)習(xí)至關(guān)重要,文章中針對(duì)C語(yǔ)言實(shí)驗(yàn)教學(xué)的特點(diǎn),結(jié)合筆者在實(shí)驗(yàn)教學(xué)中的體會(huì)和初學(xué)者的實(shí)際情況,總結(jié)了實(shí)驗(yàn)教學(xué)過程中經(jīng)常出現(xiàn)的問題,對(duì)于常見問題進(jìn)行分析,提出了相應(yīng)的解決措施,以此為依據(jù)將實(shí)驗(yàn)教學(xué)過程進(jìn)行相應(yīng)的調(diào)整,使學(xué)生在實(shí)驗(yàn)中提高編程能力,同時(shí)強(qiáng)化對(duì)于理論知識(shí)的理解,二者相互促進(jìn),提高了C語(yǔ)言的教學(xué)效果,同時(shí)也培養(yǎng)了學(xué)生的自我學(xué)習(xí)能力。
關(guān)鍵詞:實(shí)驗(yàn)教學(xué) C語(yǔ)言 常見問題
中圖分類號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2015)04(b)-0111-02
在編程語(yǔ)言中,C語(yǔ)言使用的比較廣泛,很多高校都以C語(yǔ)言程序設(shè)計(jì)作為程序設(shè)計(jì)的入門教材,許多初學(xué)者在學(xué)習(xí)編程時(shí),都會(huì)首先選擇C語(yǔ)言,C語(yǔ)言是面向過程的編程語(yǔ)言,在軟件開發(fā)中也被廣泛應(yīng)用,其功能強(qiáng)大,程序的編寫比其他許多高級(jí)語(yǔ)言簡(jiǎn)潔,書寫形式比較靈活,使用起來(lái)很方便,多樣化的表達(dá)式類型,以及運(yùn)算符的靈活應(yīng)用,使得許多在其他語(yǔ)言中難以實(shí)現(xiàn)的的復(fù)雜運(yùn)算在C語(yǔ)言中得以實(shí)現(xiàn)。C語(yǔ)言還是許多計(jì)算機(jī)專業(yè)課程的前導(dǎo)課程,例如數(shù)據(jù)結(jié)構(gòu),嵌入式程序設(shè)計(jì),編譯原理,計(jì)算方法等都可以在C語(yǔ)言的基礎(chǔ)上得以實(shí)現(xiàn)。
1 C語(yǔ)言實(shí)驗(yàn)教學(xué)中的常見問題及其應(yīng)對(duì)策略
在學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言的過程中,編程實(shí)踐是最重要的一個(gè)組成部分,基本的語(yǔ)法學(xué)習(xí),語(yǔ)句的掌握,結(jié)構(gòu)化設(shè)計(jì)的概念,都需要在程序的編寫中得以實(shí)現(xiàn)和檢驗(yàn),現(xiàn)在的本科教學(xué)中,實(shí)驗(yàn)課程是實(shí)踐教學(xué)的重要環(huán)節(jié),但目前的實(shí)驗(yàn)教學(xué)普遍存在如下一些實(shí)際問題。
(1)初次接觸編程語(yǔ)言,學(xué)生沒有程序設(shè)計(jì)的概念,對(duì)于寫代碼一無(wú)所知。在實(shí)驗(yàn)教學(xué)中,應(yīng)引導(dǎo)學(xué)生從簡(jiǎn)單的程序入手,然后再進(jìn)行擴(kuò)充,例如,要求在屏幕上顯示“你好!”,只需要在主函數(shù)體寫入語(yǔ)句printf(“你好!”)即可,運(yùn)行此程序可以讓學(xué)生了解到printf函數(shù)最基本的用法,然后對(duì)程序進(jìn)行擴(kuò)充,在主函數(shù)函數(shù)體最開始部分定義一個(gè)整形變量i,且為其賦初值0,要求輸出i的值,此時(shí)的printf語(yǔ)句為:printf(“%d”,i);通過此語(yǔ)句的書寫,向?qū)W生介紹格式控制符的用法,和printf函數(shù)的更多用法。隨著實(shí)驗(yàn)內(nèi)容的加深,逐漸加大難度,讓每一次實(shí)驗(yàn)課都是一次實(shí)驗(yàn)內(nèi)容的提升和學(xué)生能力的提高。
(2)只注重編寫代碼,忽略程序調(diào)試。程序的調(diào)試也是編程過程中的一個(gè)很重要的組成部分,掌握調(diào)試方法和技巧,能夠在編程中達(dá)到事半功倍的效果。調(diào)試工具在學(xué)習(xí)循環(huán)和指針這一部分內(nèi)容時(shí)顯得尤為重要,例如,循環(huán)語(yǔ)句有for語(yǔ)句,while語(yǔ)句,do-while語(yǔ)句,三種語(yǔ)句都能實(shí)現(xiàn)循環(huán)運(yùn)算的功能,例如,計(jì)算1+2+....+50的值,sum為累加和,初值為0。
①for語(yǔ)句:
......
for(j=1;j<=50;j++)
sum=sum+j;
......
②while語(yǔ)句:
......
j=1;
while(j<=50)
{
sum+=j;
j++;
}
③do-while語(yǔ)句
......
j=1;
do
{
sum+=j ;
j++ ;
} while(j<500)
......
以上只是針對(duì)一個(gè)簡(jiǎn)單的求解問題用3種循環(huán)來(lái)實(shí)現(xiàn),在do-while循環(huán)中,循環(huán)條件的設(shè)置是有問題的,漏掉了j=50的情況,對(duì)于簡(jiǎn)單的求解問題,很容易發(fā)現(xiàn)這個(gè)問題,而對(duì)于復(fù)雜的循環(huán)語(yǔ)句,不容易通過觀察發(fā)現(xiàn),就必須使用調(diào)試工具,設(shè)置斷點(diǎn),設(shè)置需觀察的變量,查看變量的值,根據(jù)變量的變化找到問題所在,斷點(diǎn)的設(shè)置和程序的單步執(zhí)行在調(diào)試指針程序中使用的尤為頻繁,可以根據(jù)指針變量的值檢查指針設(shè)置是否合理,從而在復(fù)雜程序開發(fā)中很容易找到問題所在。對(duì)于初學(xué)者來(lái)說,程序的調(diào)試技巧也很重要,除了使用調(diào)試工具進(jìn)行代碼調(diào)試,還可以通過插入輸出語(yǔ)句來(lái)檢查變量的值是否正確。
(3)沒有形成結(jié)構(gòu)化程序設(shè)計(jì)的概念,在初入門寫程序時(shí),不知從何處入手。在程序設(shè)計(jì)中,解決問題的辦法是代碼編寫的前提,C語(yǔ)言中有順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu),在實(shí)驗(yàn)教學(xué)中,實(shí)驗(yàn)教師也要不斷把結(jié)構(gòu)化的概念引入到教學(xué)實(shí)踐中,遇到待解決的問題,先畫出流程圖,讓學(xué)生養(yǎng)成畫流程圖的習(xí)慣,隨著學(xué)習(xí)難度的加大,在復(fù)雜的問題求解時(shí),也能有很清晰的思路,迅速找到解決問題的方法,結(jié)構(gòu)化程序設(shè)計(jì)的概念貫穿在所有的編程語(yǔ)言學(xué)習(xí)中,掌握結(jié)構(gòu)化程序設(shè)計(jì)方法,也就是掌握了程序設(shè)計(jì)的精髓。
(4)程序設(shè)計(jì)停留在“就事論事”的階段,缺乏程序測(cè)試的概念,考慮問題不夠完整,筆者在教學(xué)中發(fā)現(xiàn),很多學(xué)生在編程中,只注重代碼的編寫,而沒有考慮到問題求解過程中會(huì)遇到的問題,學(xué)生在編程中,只是考慮到最理想狀態(tài)下的問題解決方案,例如,輸入學(xué)生成績(jī),給出成績(jī)的等級(jí),60分以下為bad,60分~79分為middle,80分~89分為good,90分~100分為excellent,程序代碼如下:
int main( )
{
int score;
....
if(score<60) printf(“bad”);
else if(score<=79) printf(“middle”);
else if(score<=89) printf(“good”);
else printf(“excellent”);
....
}
程序在運(yùn)行中只要輸入的是1~100之間就可以得到相應(yīng)的成績(jī)等級(jí),若分?jǐn)?shù)不合法,則沒有任何提示,例如輸入-10分,則還是bad,此例只是涉及到最基本的軟件測(cè)試的概念。
類似的例子還很多,例如編寫銀行賬號(hào)登陸程序,在代碼中學(xué)生通常只考慮到輸入時(shí)嚴(yán)格按照規(guī)范輸入的情況,但是在實(shí)際應(yīng)用中,可能輸入的不是數(shù)字,那么在代碼中,就必須要驗(yàn)證輸入的賬號(hào)或密碼格式是否合法,是不是都由數(shù)字構(gòu)成,如果用戶在輸入時(shí)不合法程序會(huì)怎么處理,這是其中的一個(gè)方面,在銀行賬號(hào)登陸程序中還要考慮到每天密碼的輸入錯(cuò)誤不能超過3次,那么在程序中就要設(shè)置輸入次數(shù)的限制,這樣在實(shí)驗(yàn)教學(xué)中,雖然學(xué)生接觸的是最基本的編程實(shí)踐,但是在每一次的練習(xí)中,都給學(xué)生傳授最簡(jiǎn)單的軟件測(cè)試的概念,使學(xué)生在編程中逐漸樹立軟件測(cè)試的概念,把代碼的編寫和實(shí)際情況結(jié)合起來(lái),從開始學(xué)習(xí)編程就具備嚴(yán)謹(jǐn)慎的思維,把簡(jiǎn)單的編程和實(shí)際情況結(jié)合起來(lái),培養(yǎng)良好的編程思想。
(5)對(duì)函數(shù)的概念模糊,不會(huì)使用函數(shù),不理解函數(shù)定義和函數(shù)調(diào)用的概念,缺少模塊化設(shè)計(jì)概念,筆者在C語(yǔ)言實(shí)驗(yàn)教學(xué)中發(fā)現(xiàn),學(xué)習(xí)到了函數(shù)這一部分內(nèi)容時(shí),實(shí)驗(yàn)要求用函數(shù)實(shí)現(xiàn)某一功能,但是很多學(xué)生還是不能理解函數(shù)的概念,即便是使用了函數(shù),在主函數(shù)調(diào)用函數(shù)時(shí),還將函數(shù)的返回類型和參數(shù)的類型寫出來(lái)了,有些學(xué)生甚至不用函數(shù)實(shí)現(xiàn),直接在主函數(shù)里實(shí)現(xiàn)函數(shù)的功能,將代碼直接寫在主函數(shù)中,學(xué)生認(rèn)為結(jié)果正確就可以了,導(dǎo)致代碼看上去很凌亂,不規(guī)范,修改起來(lái)不方便。作為實(shí)驗(yàn)教師,在實(shí)驗(yàn)教學(xué)中,從簡(jiǎn)單的程序設(shè)計(jì)開始,就要求學(xué)生要有模塊化的概念,逐漸引入函數(shù)的概念,將主函數(shù)中的某些功能性代碼獨(dú)立出來(lái),放到函數(shù)中,將前后的程序加以對(duì)比,讓學(xué)生理解函數(shù)的功能,使用函數(shù)會(huì)帶來(lái)什么樣的效果。函數(shù)在程序中的應(yīng)用就好比,我們制了一張學(xué)生信息表,但只是一張空表,需要的時(shí)候,我們就復(fù)印一份,然后填上內(nèi)容;不使用函數(shù)就好比我們需要時(shí),就去制一張表,讓后填上內(nèi)容,如果還需要表,就再去制一張表,再填上內(nèi)容。函數(shù)的功能還在于,函數(shù)能夠被不同的程序調(diào)用,提高代碼的利用率,修改起來(lái)也很方便。
(6)代碼看起來(lái)雜亂無(wú)章,編程格式不規(guī)范。良好的代碼風(fēng)格在開發(fā)中也起著重要作用。筆者在實(shí)驗(yàn)教學(xué)中發(fā)現(xiàn),學(xué)生更看重具體代碼的編寫,認(rèn)為編程就是代碼的堆砌,在程序編寫中,不注重格式和一些符號(hào)的使用,代碼不夠美觀,至于是否空格的問題并不關(guān)心。作為實(shí)驗(yàn)老師,在實(shí)驗(yàn)開始就要求學(xué)生注意編程的格式,既要求格式美觀,也要求看起來(lái)很清晰,能夠很快清楚哪些語(yǔ)句是一個(gè)整體,尤其是對(duì)于復(fù)雜的程序。在編程練習(xí)中,筆者還要求學(xué)生養(yǎng)成良好的書寫習(xí)慣,例如,像大括號(hào){ },小括號(hào)(),雙引號(hào)“”等符號(hào),都是成對(duì)使用的,在用到符號(hào)的地方,將兩個(gè)符號(hào)一并寫出來(lái),然后再添加其他的內(nèi)容,這樣就可以避免因?yàn)槿绷艘话敕?hào)而產(chǎn)生錯(cuò)誤,在比較長(zhǎng)的程序中,這種錯(cuò)誤尤其多見,養(yǎng)成符號(hào)成對(duì)書寫的習(xí)慣可以減少不必要的錯(cuò)誤,提高編寫代碼的效率。
2 結(jié)語(yǔ)
C語(yǔ)言是一門最基礎(chǔ)的編程語(yǔ)言,筆者結(jié)合了自身在實(shí)驗(yàn)教學(xué)中遇到的一些問題,針對(duì)不同的問題,在每一次實(shí)驗(yàn)教學(xué)中加以改進(jìn),從實(shí)驗(yàn)教學(xué)的第一節(jié)課開始,把學(xué)生作為一個(gè)軟件開發(fā)者來(lái)要求,隨著學(xué)習(xí)難度的加大,學(xué)生會(huì)有新的問題出現(xiàn),但是卻逐漸具備了軟件開發(fā)的思想,其自學(xué)能力也得到了很大的提高,這也是實(shí)驗(yàn)課程取得的良好效果。
參考文獻(xiàn)
[1]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì):[M].4版.北京:清華大學(xué)出版社,2010:1-36.
[2]盧瑾,張健,陳晉音.C語(yǔ)言程序設(shè)計(jì)階段式分層實(shí)驗(yàn)教學(xué)研究[J].計(jì)算機(jī)教育,2014(14):74-76.