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