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