文章編號(hào):1672-5913(2008)06-0063-02
摘要:本文介紹了筆者根據(jù)自己多年來(lái)的教學(xué)經(jīng)驗(yàn),在C語(yǔ)言程序設(shè)計(jì)教學(xué)中應(yīng)用探究式教學(xué)方法的一些經(jīng)驗(yàn)。
關(guān)鍵詞:探究式;C語(yǔ)言;教學(xué)方法
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
“成功的教學(xué)依賴于一種和諧安全的氣氛?!?羅杰斯)“心理安全”和“心理自由”是兩個(gè)最重要的條件,教師要充分尊重學(xué)生,尊重他們的興趣愛(ài)好、思維方式、思想感情,要真正“蹲”下來(lái),傾聽(tīng)學(xué)生的心聲,做學(xué)生的朋友,構(gòu)建親、助、樂(lè)的人際環(huán)境,呵護(hù)學(xué)生們的好奇心。有了這種平等、寬松、無(wú)責(zé)怪的氛圍,學(xué)生才敢提出問(wèn)題、思考問(wèn)題、探究問(wèn)題,進(jìn)而找到解決問(wèn)題的方法。在課堂上我鼓勵(lì)學(xué)生隨時(shí)提出問(wèn)題,對(duì)敢于提出問(wèn)題的學(xué)生大加贊賞,并允許“插嘴”,因?yàn)椤安遄臁敝型N(yùn)涵著創(chuàng)造思維的火花,還允許學(xué)生大聲發(fā)笑、實(shí)話實(shí)說(shuō),因?yàn)檫@是情感的真實(shí)流露,更允許學(xué)生之間有爭(zhēng)論,因?yàn)闋?zhēng)論說(shuō)明學(xué)生在思考、有創(chuàng)見(jiàn)。課堂上敢于提問(wèn)的學(xué)生越來(lái)越多,即使有的問(wèn)題幼稚可笑,我也倍加珍視,向他豎起大拇指。
實(shí)例一:在介紹了數(shù)組的知識(shí)和指針的概念后,開(kāi)始學(xué)習(xí)指針的加減法運(yùn)算。我首先舉了一個(gè)形象的例子。有一排房子共有20個(gè)房間,規(guī)定四個(gè)家庭每家各占有連續(xù)的5個(gè)房間,即第一個(gè)家庭占有1到5號(hào)房間,第二個(gè)家庭占有6到10號(hào)房間,以此類推。此時(shí),指針的加減運(yùn)算,就如同計(jì)算每個(gè)家庭的房間號(hào)一樣,第二個(gè)家庭從6號(hào)房間開(kāi)始,那么第三個(gè)家庭就是第二個(gè)家庭上加1,此時(shí)1的單位是一個(gè)家庭,而一個(gè)家庭占有5個(gè)房間,則第三個(gè)家庭開(kāi)始的房間號(hào)就應(yīng)該是6+1*5=11,而不是6+1=7。
實(shí)例二:在學(xué)習(xí)指針的加減法運(yùn)算時(shí),我把學(xué)生安排在每人一機(jī)的計(jì)算機(jī)教室,提供一組指針運(yùn)算的練習(xí)題,請(qǐng)學(xué)生編程、調(diào)試、運(yùn)行、分析結(jié)果、得出結(jié)論。本次課的前提是學(xué)生已學(xué)習(xí)了數(shù)組的知識(shí)和指針的概念。
上課前,我發(fā)給學(xué)生需要在課堂上填寫(xiě)的實(shí)驗(yàn)報(bào)告。然后,在與計(jì)算機(jī)相連的屏幕上給出了一個(gè)問(wèn)題:
設(shè)int a=3;
則a-1=,a+2=
提問(wèn):哪個(gè)同學(xué)可以告訴我這兩個(gè)表達(dá)式的值是什么?學(xué)生們不由得輕聲笑了出來(lái):“太簡(jiǎn)單了”。當(dāng)學(xué)生說(shuō)出分別是4和5之后,在屏幕上給出第二個(gè)問(wèn)題:
設(shè)int *pa,a[30];
pa=a[1];
若a[1]的地址為3000,則pa-1= ,pa+2=
提問(wèn):這兩個(gè)表達(dá)式的值是什么呢?學(xué)生們有的立即回答:“2999和3002唄”。有的學(xué)生在遲疑:“不對(duì)吧”??吹綄W(xué)生的反應(yīng)后,我指出:“這就是本次上機(jī)實(shí)踐研究的問(wèn)題——指針的加減法運(yùn)算”。
在交代了實(shí)驗(yàn)報(bào)告的填寫(xiě)方法之后,課堂的大部分時(shí)間由學(xué)生在計(jì)算機(jī)上動(dòng)手實(shí)踐。與傳統(tǒng)課堂不同,所有的學(xué)生都全神貫注地進(jìn)行編程、調(diào)試、運(yùn)行、討論運(yùn)行結(jié)果,填寫(xiě)實(shí)踐報(bào)告。
在學(xué)生對(duì)運(yùn)行結(jié)果感到困惑時(shí),我會(huì)提示:如果pa不是整型指針,a不是整型數(shù)組;而是字符型、長(zhǎng)整型、單精度類型、雙精度類型呢?
所有的學(xué)生再一次投入到實(shí)踐中。經(jīng)過(guò)幾次類似問(wèn)題的解決以及相互的交流,學(xué)生們開(kāi)始運(yùn)用歸納法對(duì)問(wèn)題的結(jié)果進(jìn)行分析——這正是我所期待的!
在實(shí)驗(yàn)的結(jié)論一欄,學(xué)生們寫(xiě)著:指針加1,不是指針內(nèi)容加1,而是加上1個(gè)它所指那個(gè)類型的長(zhǎng)度;加2就是加2個(gè)那個(gè)類型的長(zhǎng)度。
教師們對(duì)這節(jié)課的收獲很滿意,正準(zhǔn)備總結(jié),有一名學(xué)生舉手:“老師,指針要是指向數(shù)組,一旦加1,就把整個(gè)數(shù)組跳過(guò)去了”?!皼](méi)錯(cuò)!”我知道該進(jìn)行表?yè)P(yáng)了。這對(duì)下一次的學(xué)習(xí)是個(gè)很好的鋪墊。
這節(jié)課的突出特點(diǎn)是:學(xué)生的學(xué)習(xí)方式變了,他們通過(guò)自己的活動(dòng)探索獲得知識(shí),而不是通過(guò)聽(tīng)講獲取“現(xiàn)成”的知識(shí)。“問(wèn)題情境—編程實(shí)踐—課堂交流—課堂操作與聯(lián)系”代替了過(guò)去的“聽(tīng)講—筆記—練習(xí)”,充分調(diào)動(dòng)了學(xué)生學(xué)習(xí)的積極性,使學(xué)生處于學(xué)習(xí)的主體地位,讓學(xué)生主動(dòng)探索、觀察,得出結(jié)論,取得了較好的教學(xué)效果。
實(shí)例三:在對(duì)for語(yǔ)句的深入學(xué)習(xí)時(shí),我們把學(xué)生安排在每人一機(jī)的計(jì)算機(jī)教室,提供一組簡(jiǎn)單的for程序段,請(qǐng)學(xué)生編程、調(diào)試、運(yùn)行、分析結(jié)果、得出結(jié)論。本次課的前提是學(xué)生已學(xué)習(xí)了for與while的對(duì)應(yīng)關(guān)系和break、continue在循環(huán)語(yǔ)句中的功能。
我們給出了一個(gè)for程序段:
for (k=1;k<=10;k++)
{
scanf (“d”, d );
printf (“%d”, d );
}
提出要求:編程并調(diào)試運(yùn)行,觀察這個(gè)程序段的結(jié)果。然后將它轉(zhuǎn)換成while語(yǔ)句,觀察結(jié)果。交待完要求后,指出:本次課的教學(xué)目的是探索for與while的對(duì)應(yīng)關(guān)系。學(xué)生們認(rèn)真進(jìn)行了修改,而且很快編寫(xiě)出了不同方式 的while程序段:
Ak=1; Bk=1;
while ( k<=10 )do
{ scanf ( “%d\”,d ) ;{ scanf ( “%d\”,d ) ;
k++;printf ( “d\”,d ) ;
printf ( “d\”,d ) ;k++;
}} while ( k<=10 )
經(jīng)過(guò)對(duì)比,結(jié)論很快出來(lái)了:三個(gè)程序段的功能都是將鍵入的10個(gè)整數(shù)打印出來(lái)。這時(shí),我們給出了第二個(gè)程序段:
for ( k= 1 ; k<=10 ; k++ )
{ scanf (“%d”, d );
if (d<0 ) continue;
printf (“%d\”, d );
}
提出了同樣的要求。學(xué)生們讀完后知道,此for程序段的功能是將鍵入的10 個(gè)整數(shù)中的非負(fù)整數(shù)打印出來(lái)。于是又開(kāi)始對(duì)此程序段進(jìn)行修改,而且很快編寫(xiě)出了不同方式的while程序段:
Ak=1;Bk=1;
while ( k<=10) while ( k<=10)
{ k++; { scanf ( “%d”,d);
scanf ( “%d”,d ); if ( d<0 ) continue;
if ( d<0 ) continue; k++;
printf ( “%d\”,d ); printf ( “%d\”,d);
} }
可這兩個(gè)程序段的功能卻不相同,A段程序的功能與給出的程序功能相同,B段程序卻是一共打印出了10個(gè)非負(fù)整數(shù)。
學(xué)生們展開(kāi)了激烈的討論,經(jīng)過(guò)長(zhǎng)時(shí)間的討論、實(shí)驗(yàn),得出結(jié)論:有continue的for語(yǔ)句轉(zhuǎn)換成while語(yǔ)句時(shí)對(duì)應(yīng)關(guān)系要調(diào)整,循環(huán)變量的位置一定要正確。
最后,我們給出了第三個(gè)程序段:
for ( k=1;k<=10; )
{
scanf (“%d”, d );
if (d<0 ) continue;
printf (“%d”, d );
k++;
}
仍然提出同樣的要求,學(xué)生們又投入了新一輪的實(shí)踐。按照剛得到的對(duì)應(yīng)關(guān)系,兩個(gè)程序段的功能又不一致了。按照原來(lái)的對(duì)應(yīng)關(guān)系,兩個(gè)程序段的功能一致。討論、實(shí)踐、痛苦地否定、再肯定。終于找到了問(wèn)題的關(guān)鍵:continue和第三表達(dá)式。在教師的指導(dǎo)下,把for與while的對(duì)應(yīng)問(wèn)題分成了兩類:不含表達(dá)式3的for語(yǔ)句的轉(zhuǎn)換規(guī)則與包含表達(dá)式3并且不含continue的for語(yǔ)句轉(zhuǎn)換規(guī)則一致;含表達(dá)式3并且含continue的for語(yǔ)句用新的轉(zhuǎn)換規(guī)則。下課的時(shí)候,教室里一陣歡呼。
以上實(shí)例說(shuō)明:在教師輔導(dǎo)的探究式學(xué)習(xí)模式下,學(xué)生不再處于被動(dòng)接受的地位,在教師指導(dǎo)下的探索使教學(xué)效果大大提高。