姚建峰 李柏樵
[摘要]C語言程序設計是計算機專業(yè)學習中的一門基礎課程,是培訓學生對計算機程序設計學習興趣的關鍵課程。分析C語言教學過程中存在的一些問題,并從方法論的觀點出發(fā),針對不同的學習階段,運用不同的教學方法來提高教學質(zhì)量。
[關鍵詞]C語言程序設計方法論教學方法
[中圖分類號]G642[文獻標識碼]A[文章編號]2095-3437(2014)10-0056-02本文主要從學習C語言的5個階段來闡述如何把方法論運用于C語言教學中。
一、理解計算機程序設計語言的特點
計算機的實質(zhì)是一種在指令的控制下運行的一種電子設備。計算機只能識別二進制編碼的機器指令。因為機器語言難學,難記憶,所以在計算機技術的發(fā)展過程中,逐步出現(xiàn)了匯編語言,高級語言和面向?qū)ο蟮恼Z言。所有這些計算機編程語言出現(xiàn)的目的都是想以盡量“接近”人類的語言來編寫計算機程序。所有的計算機程序設計語言最終都要“翻譯”成計算機可執(zhí)行的機器語言,因此計算機程序設計語言即具有人類自然語言的特點,也具有“計算機”語言的獨特之處。一方面,在學習計算機程序設計語言中,可以借鑒學習自然語言的方法來學習計算機編程語言,讓學生容易理解、接受。如自然語言有字符集,那么各類程序設計語言也有他們各自的字符集。自然語言有語法法則,那么計算機語言也有語法法則,只有符合語言法則,計算機才能識別并翻譯成機器語言。另一方面,計算機程序設計語言,最終要“翻譯”成機器語言,由于CPU只能執(zhí)行特定的某些指令,計算機程序設計語言的語法規(guī)則是由計算機語言設計者所設計,都是規(guī)定“死”了的法則,因此計算機程序設計語言不能像自然語言那樣能夠靈活使用。
二、透徹理解標識符、常量、變量、運算符和表達式
老師講課時,應盡可能多運用各種教學方法講課,如類別法,對比法等,把一些基礎知識講透徹,讓學生容易理解、接受。如講字符集時,可以用漢字字庫來類別;講標識符時,可以用“名字”來類別;講常量時,一定要調(diào)動學生思維,讓學生領悟到計算機是如何識別常量的,并運用對比法,理解各種常量之間的區(qū)別,如字符‘A與字符串“A”的區(qū)別,字符‘1與數(shù)字1的區(qū)別等等;講變量時,講清楚變量的數(shù)據(jù)類型、存儲格式和可進行的運算操作。講運算符時,這種強調(diào)運算符的優(yōu)先級和結(jié)合性,并用數(shù)學中的優(yōu)先級和結(jié)合性的實例進行類比。
三、理解C語言語句
語句是程序設計語言的重要組成部分,如果不把語句理解清楚,學生沒辦法編程。C語言語句包括:控制語句、函數(shù)調(diào)用語句、表達式語句、空語句和復合語句。學生極易在空語句和復合語句這兩個知識點上犯錯誤。講課時,不僅要講清楚空語句和復合語句的概念,而且要結(jié)合控制語句一起,演示空語句和復合語句對程序結(jié)構(gòu)的影響?,F(xiàn)在用2個實例來分別說明空語句和復合語句對程序結(jié)構(gòu)的影響。
例 1假設變量均已定義,執(zhí)行下列語句的結(jié)果是()
for(i=1;i<=5;i++);
printf(“*”);
A *****B *C 有語法錯誤
本題好多學生一看馬上選A,正確的答案是B,因為for語句括號后有1個分號,所以循環(huán)體是空語句,當for循環(huán)執(zhí)行結(jié)束后,順序執(zhí)行后面的printf(“*”);語句,輸出1個“*”。
例 2編一個程序,滿足下面函數(shù)的功能:輸入一個x值,輸出y值。請判斷下面程序是否正確。
y=-1(x<0)0(x=0)1(x>0)
main()
{ int x,y;
scanf(“%d”,&x);
y=0;
if(x>=0)
if(x>0)
y=1;
else
y=-1;
printf(“x=%d,y=%d ”,x,y);}
本例大部分學生都認為是正確的,認為else與if(x>=0)的那個if匹配,實際上else應與if(x>0)的那個if匹配,因為else總是與上面最近沒有匹配的if向匹配。要使else與if(x>=0)的那個if匹配,可以再用一對花括號把if(x>0) y=1;這條語句括起來,由于復合語句里面的結(jié)構(gòu)不能與花括號外面有聯(lián)系,所以按以上方法加花括號后,就改變了程序的流程,使else與if(x>=0)的那個if匹配。修改結(jié)果如下:
main()
{ int x,y;
scanf(“%d”,&x);
y=0;
if(x>=0)
{if(x>0)
y=1;}
else
y=-1;
printf(“x=%d,y=%d ”,x,y);}
在講完語句這部分內(nèi)容之后,要及時給學生做總結(jié),讓學生深刻理解控制語句結(jié)構(gòu)中語句可以是哪些語句。如 if(表達式) 語句,這里的“語句”可以是以下3種:
1.一條簡單的語句;
2.由1對花括號括起來的1條復合語句;
3.只有1個“;”構(gòu)成的空語句;
四、提高學生算法分析的能力
在教書過程中,好多學生總說老師講的內(nèi)容都懂,照著老師編程都會,就是當自己編程時遍不出來。這部分學生其實是算法分析能力較差,并不是C語句基礎知識不好。在講課時,首先讓學生先把C語言拋在一邊,理解題意,分析算法,并用流程圖把算法描述出來,然后根據(jù)流程圖編寫程序。例如:從鍵盤上輸入一個年份,判斷改年是平年還是閏年。
1.讓學生理解閏年的判斷方法:(1)不能被4整除的肯定不是閏年,能被4整除的不能確定;(2)能被4整除但不能被100整除的是閏年,能被4整除且能被100整除的不能確定;(3)能被4整除又能被100整除同時也能被400整除的是閏年,能被4整除又能被100整除但不能被400整除的不是閏年。
2.畫N-S流程圖。
■
3.根據(jù)N-S流程圖編程。
main()
{intyear,leap;
scanf(“%d”,&year);
if(year%4==0)
if(year%100==0)
if(year%400==0)
leap=1;
else
leap=0;
else
leap=1;
else
leap=0;
if(leap)
printf(“%d is a leap year. ”,year);
else
printf(“%d is not a leap year. ”,year);
}
一般題目經(jīng)過這3步后,學生比較容易理解、接受。訓練一段時間后,算法分析能力逐步提高,編程就不在困難了。
五、提高調(diào)試程序的能力。
學生編程出錯在所難免,關鍵是如何讓學生快速地找到錯誤并快速更改過來,確實是一件不容易的事。程序錯誤可以分為語法錯誤和語義錯誤。對于語法錯誤,編譯器可以查出來,并可以定位錯誤,一般錯誤就是在指定的那行,如果那行沒有錯誤,就向上找,如果再找不出來,就看程序的整體結(jié)構(gòu)。對于語義錯誤,讓學生自己把程序“執(zhí)行”一遍,分析錯誤的結(jié)果是怎么執(zhí)行出來的,然后通過對比,就可以發(fā)現(xiàn)語義錯誤。
[參考文獻]
[1]譚浩強.C程序設計第三版[M].北京:清華大學出版社,2005,.
[2]化志章,揭安全,鐘林輝.Java程序設計—從方法學角度描述[M].北京:機械工業(yè)出版社,2012.
[3]盧照,南麗麗,楊秀榮.C語言程序設計教學中問題和改進方法的探討[J].現(xiàn)代計算機,2012,(1).
[責任編輯:左蕓]