文章編號:1672-5913(2008)18-0098-02
摘要:本文通過一個例子來說明結(jié)合實例教學(xué)法和啟發(fā)式教學(xué)方法的教學(xué)過程,旨在為C語言程序設(shè)計課程提供一些有益的教學(xué)方法。
關(guān)鍵詞:程序設(shè)計;實例教學(xué);啟發(fā)式教學(xué)
中圖分類號:G642 文獻標識碼:B
1傳統(tǒng)的實例教學(xué)方法
在一些教學(xué)改革的文章中,都提出了通過實例來進行教學(xué),并且取得了較好的效果。這些文章中,所列的例子分為兩類:趣味程序[1-3]和實例程序[4-6]。
趣味程序的例子可以激發(fā)學(xué)生的學(xué)習(xí)積極性,從而在實例中掌握C語言的語法和程序設(shè)計方法,因而趣味程序的例子的選擇至關(guān)重要。對于實例程序例子來說,分為章節(jié)實例和綜合實例。其中章節(jié)實例是為了章節(jié)教學(xué)服務(wù),而綜合實例是在學(xué)習(xí)整個課程后,提高學(xué)生能力,培養(yǎng)團隊合作能力服務(wù)。這些章節(jié)和綜合實例的選擇中,有些是前者與后者有聯(lián)系,這可以省去理解實例的時間,使學(xué)生掌握軟件開發(fā)的能力;有些是前者與后者沒有必然聯(lián)系,這樣就要做每個實例前,必須理解實例花費時間。
這種方法的優(yōu)點是可以根據(jù)教學(xué)內(nèi)容,選擇合適的例子,以使學(xué)生掌握所學(xué)內(nèi)容。但是在每次舉例子時,沒有很好的、更深入的挖掘?qū)嵗械囊恍┥顚拥闹R點,這樣浪費了實例資源。并且,每個實例要花許多時間來理解實例,這給有限的課堂教學(xué)時間帶來了浪費。在此,我們通過較少的實例,并將此實例用不同章節(jié)的內(nèi)容實現(xiàn),這樣既可以節(jié)約分析實例的時間,又加深了對C語言的語法的理解和程序設(shè)計方法的訓(xùn)練。
為了解決上面的問題,我們可以在每個實例的基礎(chǔ)上,對學(xué)生多提問,以進行擴展實例,以復(fù)習(xí)前面學(xué)過的知識,也可以鞏固當(dāng)前學(xué)習(xí)的內(nèi)容。下面通過一個簡單的例子說明具體的過程。在C語言程序設(shè)計時,許多教課書都用“Hello World”這個程序作為入門程序,此例只是讓我們對C語言程序有一個初步認識,但是在此后的教學(xué)中,我們已經(jīng)忘記了這個入門的例子,其實還可以挖掘出更多新的知識點。
2啟發(fā)式教學(xué)
在我們所見的教材中,“Hello World”例子除了在講C語言入門的知識外,別的地方?jīng)]有出現(xiàn)。而我們以它為例進行啟發(fā)式教學(xué),讓學(xué)生做更多的練習(xí),以加深對語法和程序設(shè)計方法的理解,并掌握其課程的精髓。我們采用兩種方法:第一種是針對同一問題使用多種方法處理;第二種是針對每一處理方法提出新的問題。
2.1同一問題使用多種方法處理
針對上的同一問題使用所講述的不同內(nèi)容的方法處理。具體過程如下:
(1) 數(shù)組方式
在講解字符數(shù)組時,我們知道字符串是如何保存在計算機中,并可以用數(shù)組的方式實現(xiàn)上述實例。如下程序:
#include
main()
{
char wh[]=\"Hello World!\";
printf(\"%s\\",wh);
}
上例說明了數(shù)組的定義及初始化方式,在上述程序的基礎(chǔ)上,也可以將數(shù)組中的元素單個輸出,即printf(\"%s\\",wh); 語句換為int i; for(i=0;wh[i]!='\\0';i++) printf(\"%c\",wh[i]);語句。也可以使用字符串輸入輸出方式來實現(xiàn)同樣的功能。如下程序:
#include
main()
{
char wh[20];
gets(wh);
puts(wh);
}
如果將上面的程序中的gets(wh);語句換成scanf(\"%s\",wh);語句會出現(xiàn)什么情況,然后分析出現(xiàn)這種情況的原因。
(2) 指針方式
指針是C語言的核心,也是C語言的靈魂,所以它是教學(xué)法中的重點,也是難點。在教學(xué)法中,我們應(yīng)通過簡單的生活常識來說明它,也要用具體的實例來掌握它。在此,以上述實例說明,其實現(xiàn)過程是:
#include
main()
{
char *hp=\"hello World!\" ;
printf(\"%s\\",hp);
}
在上面的例子中,可以將某一地址賦予指針變量,然后對其進行操作。前面講過數(shù)組內(nèi)容,其實數(shù)組就是一個連續(xù)的內(nèi)存空間,數(shù)組名代表其開始地址,所以也可用指針實現(xiàn)。其實現(xiàn)過程是:
#include
main()
{
char wh[]=\"hello World!\",*hp;
hp=wh;
printf(\"%s\\",hp);
}
由于指針變量指向某一開始地址,所以我們可以處理連續(xù)空間中的單個元素。上述的兩個程序中的printf(\"%s\\",hp);語句可以改為for(;*hp!='\\0';) printf(\"%c\",*hp++); printf(\"\\");語句,其運行結(jié)果不變。
(3) 函數(shù)方式
C語言程序是一系列函數(shù)的集合,每個函數(shù)都具有相對獨立的單一功能。我們可以將上述的功能作為一個函數(shù),以實現(xiàn)字符串的輸出。在此,可以實現(xiàn)整個串的輸出,也可以單個輸出其每個元素。其實現(xiàn)過程是:
#include
void sayhello1(char hello[])
{
printf(\"%s\\",hello);
}
void sayhello2(char hello[])
{
int i;
for(i=0;hello[i]!= '\\0';i++)
printf(\"%c\",hello[i]);
printf(\"\\");
}
main()
{
char wh[]=\"hello World!\";
sayhello1(wh);
sayhello2(wh);
}
在上面的程序中,可以將形參char hello[]改為char *hello,程序的運行結(jié)果沒有任何變化。實際上,如果用數(shù)組向函數(shù)傳遞數(shù)據(jù)時,形參與實參的形式可以是指針、數(shù)組組合的任何形式。
由于main()也是函數(shù),它也可以接受傳遞的參數(shù),也就是我們所說的命令行方式,但是main()函數(shù)的形式參數(shù)一般是固定的形式,如main(int argc,char *argv[]),其中argc是指參數(shù)個數(shù),argv是一個指向字符串的指針數(shù)組。其實現(xiàn)過程是:
#include
main(int argc,char *argv[])
{
while (argc>1)
{
++argv;
printf(\"%s\\",*argv);
--argc;
}
}
(4) 文件方式
文件是存儲在外部介質(zhì)上的數(shù)據(jù)集合,它可以長期保存數(shù)據(jù)。在此,我們可以使用文件形式,將保存上述程序的結(jié)果。其簡單的實現(xiàn)過程是:
#include
#include
main()
{
FILE *fp;
char wh[] = \"hello World!\";
char msg[20];
if ((fp=fopen(\"savehi.txt\", \"w\"))==NULL)
{
printf(\"cannot open file!\");
exit(0);
}
fputs(wh,fp);
fclose(fp);
if ((fp=fopen(\"savehello.txt\", \"r\"))==NULL)
{
printf(\"cannot open file!\");
exit(0);
}
fgets(msg,strlen(wh)+1,fp);
printf(\"%s\\",msg);
fclose(fp);
}
上面的程序中是通過字符串的讀寫方式對文件進行操作,也可以使用單個字符方式對文件操作。在此基礎(chǔ)上,我們還可以練習(xí)文件操作的其他方法。
通過上述的數(shù)組、指針、函數(shù)、文件等方式來實現(xiàn)“Hello world!”程序,不但加深了和擴展了各章節(jié)的知識,而且開拓了學(xué)生的編程思路。同時,也將C語言的知識串接起來了,有利于教師的講授和學(xué)生的學(xué)習(xí)。
2.2針對每一處理方法提出新的問題
由于篇幅的原因,下面只提出教學(xué)過程中的方法,不給出具體實現(xiàn)的程序。
在講到數(shù)組一章時,我們可以上述實現(xiàn)程序的基礎(chǔ)上,提出以下問題,供課堂或?qū)W生課后練習(xí)。問題是:
如何定義一個字符串?
通過輸入/輸出函數(shù)來顯示“Hello World!”如:scanf()/printf()、gets()/puts()?
統(tǒng)計字符串長度/單詞個數(shù)/單詞分行顯示?
將字符串中的字母進行大小寫轉(zhuǎn)換?
字符的倒置存貯/字符串的倒置顯示?
等等。
上述所提出的問題,我們也可以用指針方式、函數(shù)方式、文件方式等來實現(xiàn)。只有通過多練習(xí)、多思慮,才能掌握C語言的語法和程序設(shè)計方法。
在實際的教學(xué)法中,應(yīng)該將上述提到的兩種方法有機的結(jié)合起來。因此,在具體的教學(xué)過程中,對于實際的問題,教師與學(xué)生要互動交流,想出更多的方法和提出更多的問題并以實現(xiàn)。
3結(jié)束語
總之,通過C語言程序設(shè)計的學(xué)習(xí),重點是培養(yǎng)學(xué)生掌握程序設(shè)計的思想和方法。在教學(xué)中,應(yīng)當(dāng)遵循“算法重于語法,語法重于編碼”的原則組織實施。本文所介紹的啟發(fā)式實例教學(xué)方法正是符合上述原則,并且將此法用于教學(xué)實踐中,尤其是在上機實踐中,讓學(xué)生按照上述所講的方法進行練習(xí),取得了良好的效果。另外,在其他編程語言(如Java、C#等)的教學(xué)中,也同樣借鑒上述介紹的方法進行教學(xué)。在Java、C#等語言程序設(shè)計中,也可以通過網(wǎng)絡(luò)傳輸“Hello World!”字符串。在此,我們通過“Hello World!”程序起到一個拋磚引玉的作用。在實際中,根據(jù)具體的情況,采用具體的實例和方法,以獲得最佳的教學(xué)效果。
參 考 文 獻
[1] 宋毓震,李兆鋒.C語言教學(xué)實踐與思考[J].內(nèi)江科技,2007,(07):14-15.
[2] 張建珍.C語言教學(xué)方法探討[J].計算機教育,2007,(18).
[3] 胡科.“C程序設(shè)計”實驗教學(xué)與實踐[J].計算機與信息技術(shù),2006,(12) :99-101.
[4] 涂剛.“C語言”實驗教學(xué)的探討[J].中國水運(學(xué)術(shù)版),2006,(12):256-257.
[5] 周余玲.C程序設(shè)計語言課程教學(xué)方法探析[J].科技資訊,2007,(05):197-198.
[6] 許建豪.計算機語言教學(xué)方法探討[J]. 廣西教育學(xué)院學(xué)報,2006,(05):156-157.