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