文章編號:1672-5913(2008)07-0075-02
摘要:本文探討了一種新式的C語言教學方法——階梯式教學法,并展示了在具體授課內容中加入階梯式教學思想的兩個案例。
關鍵詞:階梯式教學;C語言教學;教學探索
中圖分類號:G642
文獻標識碼:B
1 階梯式教學法的基本概念
\"階梯式教學法\"是由程鴻勛老師首創的,它是指導學生一步一步地養成良好的學習習慣的方法。宗旨是使學生愛學、會學,使不同程度的學生,尤其是學習有困難和問題較多的學生,都能得到提高和發展。主要特點是目標具體,升級適度,符合學生的心態,使學生有成就感,形成積極向上的人生態度。
下面介紹一下筆者將“階梯式教學法”與C語言教學相結合的具體步驟。
●備課時,將同類型問題找出來
●將這些問題按難易程度排隊
●上課時,先讓學生解決最簡單的問題,按從易到難的順序,依次提高問題的難度
●注意提示學生由易到難的關鍵問題
這樣,通過教學,學生們對于同類問題的解決就有了比較深刻的認識。同時通過教師在教學過程中的不斷提問,每提問一次,問題的難度就加大一次,有利于培養學生主動思考、創新性的思維能力。
2 具體實施案例
案例1:
問題:打印規則圖形
第1層問題:打印輸出由“*”組成的4*4矩陣
第2層問題:在上題基礎上,使輸出格式變為平行四邊形
第3層問題:在上題基礎上,使輸出格式變為三角形
第4層問題:在上題基礎上,使輸出格式變為菱形
第1層問題的解決:
#include \"stdio.h\"
void main( )
{int i,j;
for(i=1;i<=4;i++)
{for(j=1;j<=4;j++)
printf(\"*\");
printf(\"\\");
}
}
第2層問題的解決:提醒學生注意,平行四邊形特點及每行第一個字符的起始位置!
#include \"stdio.h\"
void main( )
{int i,j,k;
for(i=1;i<=4;i++)
{for(k=1;k<i;k++)
printf(\" \");
for(j=1;j<=4;j++)
printf(\"*\");
printf(\"\\");
}
}
第3層問題的解決:提醒學生注意每行第一個字符的起始位置及該行的字符數目
#include \"stdio.h\"
void main( )
{int i,j,k;
for(i=1;i<=4;i++)
{for(k=1;k<i;k++)
printf(\" \");
for(j=1;j<=2*(4-i)-1;j++)
printf(\"*\");
printf(\"\\");
}
}
第4層問題的解決:提醒學生注意菱形是由兩個三角形構成的(由一個兩重循環如何實現?)
#include \"stdio.h\"
void main( )
{int i,j,k;
for(i=-2;i<=2;i++)
{for(k=1;k<=abs(i);k++)
printf(\" \");
for(j=1;j<=5-2*abs(i);j++)
printf(\"*\");
printf(\"\\");
}
}
案例2:
問題:排序
第1層問題:任意給定10個數,排序
第2層問題:任意給定n個數,排序
第3層問題:任意給定n個字符串排序
第1層問題的解決:采用冒泡法進行排序
#include \"stdio.h\"
main( )
{int i,j,t;
int a[10];
printf(\"請輸入要排序的數組\\");
for(i=0;i<10;i++)
scanf(\"%d\",a+i);
printf(\"\\");
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;}}
printf(\"已排序的數組如下:\\");
for(i=0;i<10;i++)
printf(\"%d,\",a[i]);
printf(\"\\");
}
第2層問題的解決:如何由用戶決定每次排序的數據個數,注意數組的特點。
#include \"stdio.h\"
main( )
{int number;
void sort(int n);
printf(\"請輸入要排序的數字個數\\");
scanf(\"%d\",number);
sort(number);
}
void sort(int n)
{int i,j,t;
int a[n];
printf(\"請輸入要排序的數組\\");
for(i=0;i<n;i++)
scanf(\"%d\",a+i);
printf(\"\\");
for(i=0;i<n-1;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;}
printf(\"已排序的數組如下:\\");
for(i=0;i<n;i++)
printf(\"%d,\",a[i]);
printf(\"\\");
}
第3層問題的解決:注意字符串存儲的特點。
#include \"string.h\"
#include \"stdio.h\"
main( )
{int number;
void sort(int n);
printf(\"請輸入要排序的字符串個數\\");
scanf(\"%d\",number);
sort(number);
}
void sort(int n)
{int i,j;
char str[n][30];
char string[30];
printf(\"請輸入要排序的字符串\\");
for(i=0;i<n;i++)
scanf(\"%s\",str[i]);
for(i=0;i<n-1;i++)
{for(j=0;j<n-1-i;j++)
if(strcmp(str[j],str[j+1])>0) {strcpy(string,str[j]);strcpy(str[j],str[j+1]);strcpy(str[j+1],string);}}
printf(\"已排序的字符串如下:\\");
for(i=0;i<n;i++)
puts(str[i]);
}
注:如果再更進一步的話,可在此問題上可提出采用指針數組的方法來解決。在這里可以為后續章節的學習埋下一個伏筆。
3 結束語
除了上述兩個案例外,還有很多問題的教學可以采用階梯式教學,例如求素數、打印日歷、鏈表操作等。以上兩個案例的教學思想是我結合程鴻勛老師的“階梯式教學法”和個人在教學中的一些想法而提出的,希望能夠給讀者提供一定的幫助。由于C語言課程的地位比較突出,因此進行課程設計是很必要的,而教學方法的革新又是至關重要的,這就需要我們全體教育工作者不斷努力探索,摸索出更多更好的適合C語言教學的教學方法。
參考文獻
[1] 譚浩強. C程序設計(第三版)[M]. 北京:清華大學出版社,2005.