文章編號(hào):1672-5913(2008)16-0109-02
摘要:“C語(yǔ)言程序設(shè)計(jì)”是計(jì)算機(jī)專業(yè)必修課,也是國(guó)家計(jì)算機(jī)等級(jí)考試二級(jí)語(yǔ)言備選課程之一。在實(shí)際教學(xué)過(guò)程中,大多數(shù)師生認(rèn)為這是一門(mén)難教且難學(xué)的課程。為此,筆者根據(jù)多年的教學(xué)體會(huì)和教學(xué)經(jīng)驗(yàn),對(duì)C語(yǔ)言課程的教學(xué)模式進(jìn)行了思考和探索,從教學(xué)目標(biāo)、教學(xué)思路、教學(xué)進(jìn)程等方面闡述自己的認(rèn)識(shí)。
關(guān)鍵詞:C語(yǔ)言;程序設(shè)計(jì);教學(xué)模式
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
1根據(jù)不同專業(yè),分層次設(shè)定教學(xué)目標(biāo)
(1) 計(jì)算機(jī)專業(yè):理解基本概念和基本原理,掌握程序調(diào)試過(guò)程。具備一定的編程能力,能夠閱讀比較復(fù)雜的程序。對(duì)于國(guó)家計(jì)算機(jī)等級(jí)二級(jí)C語(yǔ)言,具備自學(xué)能力,并順利通過(guò)考試。
(2) 非計(jì)算機(jī)專業(yè):理解基本概念和基本原理,掌握程序調(diào)試過(guò)程。具備自學(xué)計(jì)算機(jī)語(yǔ)言的基礎(chǔ)知識(shí)。對(duì)于國(guó)家計(jì)算機(jī)等級(jí)二級(jí)C語(yǔ)言,經(jīng)過(guò)培訓(xùn)能順利通過(guò)考試。
2理論與實(shí)踐相結(jié)合,理順教學(xué)思路
對(duì)“教學(xué)內(nèi)容→實(shí)驗(yàn)內(nèi)容→課程設(shè)計(jì)”三者進(jìn)行科學(xué)安排、緊密相聯(lián)。
“C語(yǔ)言程序設(shè)計(jì)”課程理論教學(xué)內(nèi)容分成兩大塊:第一部分主要講授C語(yǔ)言的核心部分,即基本概念、基本數(shù)據(jù)類型、基本運(yùn)算方法、基本語(yǔ)句和基本程序控制結(jié)構(gòu);第二部分講授函數(shù)、結(jié)構(gòu)數(shù)據(jù)類型、程序設(shè)計(jì)方法和設(shè)計(jì)技巧。
科學(xué)安排實(shí)踐教學(xué)內(nèi)容,緊扣基本概念和基本原理,尤其需要注意前后知識(shí)的連貫,讓學(xué)生在思考和上機(jī)調(diào)試之后能逐步加深對(duì)C語(yǔ)言知識(shí)的理解和融會(huì)貫通。比如對(duì)排序問(wèn)題的編程,以學(xué)生成績(jī)排名為例:
(1) 采用冒泡法,將學(xué)生成績(jī)從高到低進(jìn)行排序,主要是數(shù)組的使用;
(2) 將排序部分用子函數(shù)完成,實(shí)現(xiàn)函數(shù)調(diào)用,主要是函數(shù)的使用;
(3) 用指針實(shí)現(xiàn)數(shù)組的輸入輸出以及數(shù)組的排序,主要將指針、數(shù)組和函數(shù)結(jié)合在一起的使用;
(4) 完成對(duì)學(xué)生成績(jī)文件的管理,主要是文件的使用。
課程設(shè)計(jì)是一個(gè)重要環(huán)節(jié),對(duì)每一個(gè)課程設(shè)計(jì)的課題來(lái)說(shuō),可采用指導(dǎo)復(fù)習(xí)、釋疑講解、書(shū)面設(shè)計(jì)、實(shí)驗(yàn)測(cè)試、課題總結(jié)、書(shū)寫(xiě)報(bào)告六個(gè)步驟。經(jīng)過(guò)人員、課題、實(shí)習(xí)場(chǎng)地和器具以及管理制度的學(xué)習(xí)培訓(xùn)等必要的準(zhǔn)備之后,課程設(shè)計(jì)進(jìn)入實(shí)質(zhì)階段。這個(gè)環(huán)節(jié)可以結(jié)合實(shí)踐教學(xué)的內(nèi)容來(lái)設(shè)計(jì)課題,比如在掌握排序問(wèn)題的各方面的知識(shí)點(diǎn)之后,可以用“學(xué)生成績(jī)管理系統(tǒng)”作為課程設(shè)計(jì)的題目。
3以學(xué)生為主體,科學(xué)安排教學(xué)進(jìn)程
筆者提出一種“問(wèn)題分析→找出算法→算法表示→編寫(xiě)代碼→知識(shí)點(diǎn)講解”的教學(xué)進(jìn)程。
對(duì)于第一部分內(nèi)容,可以圍繞“比較兩個(gè)整數(shù),并輸出較大值”這個(gè)問(wèn)題來(lái)講述:
Step1:先分析問(wèn)題,提出算法;
Step2:利用流程圖和偽代碼表示算法;
Step3:用C語(yǔ)言表示算法,即寫(xiě)出如下程序:
main( )
{int a,b,max;
scanf(“%d%d”,a,b);
if (a>b)max=a;
else max=b;
printf(“max==%d”,max);
}
針對(duì)這個(gè)程序,緊扣教材來(lái)闡述以下6個(gè)方面的知識(shí)點(diǎn):
(1)C程序的構(gòu)成和特點(diǎn);
(2) 如何使用Turbo C來(lái)運(yùn)行C程序?
(3) 算法與流程圖;
(4) 三種基本數(shù)據(jù)類型:整型、實(shí)型和字符型;
(5) 順序程序結(jié)構(gòu)和選擇程序結(jié)構(gòu);
(6) 函數(shù)及其函數(shù)調(diào)用。
當(dāng)然每一方面都需要展開(kāi)來(lái)講述的,比如第6個(gè)問(wèn)題就可以這樣表示:
main( )
{int a,b,c;
int max(int ,int);
scanf(“%d%d”,a,b);
c=max(a,b);
printf(“max==%d”,c);
}
int max(int x,int y)
{int z;
if(x>y)z=x;
elsez =y;
return(z);
}
對(duì)于第二部分內(nèi)容,主要圍繞排序問(wèn)題來(lái)講解。
例:輸入10個(gè)數(shù),然后從大到小輸出。
算法一:起泡法
算法二:選擇法
根據(jù)以上兩種算法,分別按以下步驟進(jìn)行編寫(xiě)程序:
Step1:用一個(gè)主函數(shù)完成輸入輸出和排序工作。
Step2:將排序工作作為一個(gè)模塊,用子函數(shù)完成。
Step3:在上一步的函數(shù)調(diào)用中,用數(shù)組名和指針變量作函數(shù)參數(shù)。
以算法一為例寫(xiě)出源代碼:
(1)main()
{int a[10], i,j,t;
for(i=0;i<10;i++)
scanf(\"%d\",a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]<a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
for(i=0;i<10;i++)
printf(\"%d\",a[i]);
}
(2)main()
{int a[10],i;
for(i=0;i<10;i++)
scanf(\"%d\",a[i]);
sort(a,10);
for(i=0;i<10;i++)
printf(\"%d\",a[i]);
}
sort(int b[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(b[j]<b[j+1])
{t=b[j];b[j]=b[j+1];b[j+1]=t;}
}
(3)main()/*指針變量作實(shí)參,數(shù)組作形參;還可以進(jìn)行替換*/
{int a[10], i,*p;
for(i=0;i<10;i++)
scanf(\"%d\",a[i]);
p=a;
sort(p,10);
for(i=0;i<10;i++)
printf(\"%d\",a[i]);
}
sort(int b[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(b[j]<b[j+1])
{t=b[j];b[j]=b[j+1];b[j+1]=t;}
}
在這一部分內(nèi)容里,主要講清楚數(shù)組和指針的概念及其使用。
參考文獻(xiàn):
[1] 譚浩強(qiáng).C程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999.
[2] 薛小鋒.C語(yǔ)言程序設(shè)計(jì)教學(xué)方法探析[J].福建電腦,2004,(1).