摘要:本文以筆者多年的教學經驗為基礎,結合斯金納的教學理論和小步子原則,探討了這種教學理論在C語言程序設計課程中的具體應用。
關鍵詞:斯金納;程序教學;小步子原則;直線式程序教學模式
中圖分類號:G642文獻標識碼:B
1斯金納教學理論
B·F·斯金納是美國著名的教學心理學家。他通過動物實驗建立了操作行為主義的學習理論,并據此提出了程序教學理論及其教學模式。斯金納認為,所謂教育就是塑造行為,通過塑造來促使某種行為反應,并采取“逐步逼近法”,通過一系列逐漸接近最終行為的各種反映來塑造某種行為。為此斯金納提出了編制程序教學的流程應遵循如下原則:積極反應原則、小步子原則、即時反饋原則、自定步調原則、低錯誤率原則;并提出了直線式程序教學模式。
小步子原則和直線式程序教學模式的基本思想是:將教學內容按內在的聯系分解成一步一步相關的教學程序,并為此組織一系列相關的材料,將這些材料一步一步、由易到難的呈現,盡可能的減小各步之間的難度,這樣前一步的學習為后一步的學習作鋪墊,后一步學習在前一步學習的基礎上進行。只要兩個步子之間的難度相差較小,
學習者的學習過程將比較簡單,學習內容也比較容易接受,并建立起自信,從而促使學生主動、積極地學習。
2教學設計
“C語言程序設計”課程是學生的第一門程序設計類課程,因此幫助學生建立程序設計的思想尤為重要。筆者在多年講授此門課程的基礎上,結合斯金納的小步子原則和直線式程序教學模式的基本思想,設計了一些一步一步分解的案例,以下闡述其中的一個與循環相關的例子。
(1) 提出問題
利用級數和的計算公式 ,計算圓周率 。
在講解循環時,這是一個典型的案例。在講解了循環的基本概念后,將此題展示出來,學生初看此題,一般會覺得有點難度,無從下手。為此按照斯金納的小步子原則和直線式程序教學的模式,先拋開此問題,轉而從另一些簡單的問題入手,逐步向這個問題靠攏,直至解決這個問題。
(2) 計算級數的和:1 + 2 + 3 + 4 …… + n
在提出此問題后,提示學生這就是一個單層循環,只要不斷的進行累加動作,即可輕松解決,設置1個存儲累加和的變量sum,并將其初始值設為0;設置1個控制循環的變量i,其值的變化過程就是級數的各個項的值1、2、…、n,循環的次數就是級數的項數,每循環1次,將循環變量i的當前值累加到和sum 中,循環結束后sum 中存放的就是級數的和。代碼如下:
#include<stdio.h>
void main(void)
{
int i;/* 定義整型循環變量 */
float sum=0.0;/* 定義并初始化累加和 */
int n;
printf(\"n=? \");
scanf(\"%d\",n);/* 輸入項數*/
for(i=1;i<=n;i++)/* 循環條件 */
{
sum = sum+i;/* 不斷累加 */
}
printf(\"sum=%f\ \",sum);/* 輸出累加和 */
}
(3) 計算級數的和:1 + 1/2 + 1/3 + 1/4 …… + 1/n
在解決了上一個問題后,及時地進行總結,以強化學分析此題,無非是將每一項i變為 1/i,即可解決,使用多媒體教學即可當堂修改程序,并運行程序,當學生看到程 序的結果(1)不正確時,及時地強化另一個概念,即類型問題,即1/i為整型,因此從第二項以后的結果為整型0,必須將其中的一個改為浮點型,如果將int i;改為float i;,則不利于循環,可將1/i改為1.0/i,即可解決,代碼如下:
#include<stdio.h>
void main(void)
{
int i;/* 定義整型循環變量 */
float sum=0.0;/* 定義并初始化累加和 */
int n;
printf(\"n=? \");
scanf(\"%d\",n); /* 輸入項數*/
for(i=1;i<=n;i++) /* 循環條件 */
{
sum = sum+1.0/i; /* 不斷累加 */
}
printf(\"sum=%f\ \",sum);/* 輸出累加和 */
}
(4) 計算級數的和:1 + 1/3 + 1/5 + 1/7 + …… + 1/n
解決了上一個問題后,再分析此題,無非是產生跳躍,即隔項累加,這也簡單,將循環的步長設為2,即將循環的for(i=1;i<=n;i++)語句改為for(i=1;i<=n; i=i+2),即可解決。
(5) 計算級數的和:1 - 1/3 + 1/5 - 1/7 + …… 1/n
解決了上一個問題后,繼續分析此題,必須解決正負相間的問題,如何解決這個問題呢?此時可以為學生提供2個案例,一是電燈的開關,按一次為“開”,則再按一次為“關”,并具有不斷反復的功能;二是負負得正的特性,即如果有一個值為-1的數,乘以數值-1后,其值變為1,在此基礎上再乘數值-1,值又變為-1。那么學生很快即可推倒出結論,即每一次都在前一次的基礎上乘數值-1,即可解決正負相間的問題。在學生的思想有了一些火花后及時地提出實現此思想的技術手段,為此在程序中增加一個變量sign,設其初值為-1,在循環中增加語句sign= -sign,那么在循環的控制下,此變量sign實現了正負相間,代碼如下。
#include<stdio.h>
void main(void)
{
int i;/* 定義整型循環變量 */
float sum=0.0;/* 定義并初始化累加和 */
float sign=-1;
int n;
printf(\"n=? \");
scanf(\"%d\",n); /* 輸入項數*/
for(i=1;i<=n;i=i+2) /* 循環條件、步長為2 */
{
sign = -sign;/* 正負相間 */
sum = sum+ sign*(1.0/i);/* 不斷累加 */
}
printf(\"sum=%f\ \",sum);/* 輸出和 */
}
(6) 回到原始的問題,計算圓周率
在帶領學生逐個解決上述問題后,回到原始的問題,此時學生立刻會得出結論,將上述代碼中的語句printf(\"sum=%f\ \",sum);改為printf(\"sum=%f\ \",4*sum);,即可解決。
3結束語
教師在進行教學前,應仔細地考慮在特定的時間里計劃教學的內容是什么,其次要考慮有哪些可以利用的案例。同時應盡可能做到:所選案例可以調動學習者在學習過程中強烈的興趣;同時在學習過程中及時進行強化,并給予學生鼓勵,接著將非常復雜的行為模式逐漸精致地分解為較小的單位或步驟,也就是把教學目標進行具體分解,確定每個步驟所保持行為的強度,以使強化的效果提高到最大限度。教師應盡可能集中精力設計“小步子”,提出適應程度不同的學生的學習要求,并做到及時反饋?!敖档推露取?,“及時反饋”等,體現了直線式程度教學思想。
以上是筆者在教學過程中,結合斯金納的小步子原則和直線式程序教學模式的基本思想,設計出的一步一步分解的案例。以這種教學模式,既降低了學習的難度,又增加了學生的信心,從而調動學生進行積極的思考。
參考文獻:
[1] 張劍平. 現代教育技術[M]. 北京:高教出版社,2004.
[2] 李明. C語言程序設計教程[M]. 上海交通大學出版社,2008.
[3] 南麗麗. 階梯式教學法在C語言教學中的應用[J]. 計算機教育,2008,(4).
[4] 王振巖. 探究式教學方法在C語言教學中應用的一些體會[J]. 計算機教育,2008,(3).
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文