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