文章編號:1672-5913(2008)18-0095-01
摘要:本文介紹了筆者在教學(xué)中如何通過一題多解的開放性思維方法來提高學(xué)生編程能力的。
關(guān)鍵詞:算法分析;創(chuàng)新能力;語法;
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
1靈活運(yùn)用啟發(fā)式教學(xué)方法
為避免學(xué)生強(qiáng)于應(yīng)試而弱于編程實(shí)踐,應(yīng)在教學(xué)過程中以程序設(shè)計為主線進(jìn)行教學(xué),有意識地淡化計算機(jī)語言本身語句的介紹,而重點(diǎn)介紹程序設(shè)計方法,在分析程序和程序設(shè)計中熟悉語法、應(yīng)用語句,將軟件工程、數(shù)據(jù)結(jié)構(gòu)及算法設(shè)計等思想貫穿于程序設(shè)計過程中。另外,在教學(xué)過程中,靈活運(yùn)用啟發(fā)式教學(xué)方法,將比較抽象,不易被學(xué)生接受和理解的教學(xué)內(nèi)容化繁為簡,在教學(xué)中巧用生活中的實(shí)例,運(yùn)用比喻、游戲、實(shí)驗(yàn)等方法使學(xué)生盡快掌握編程的方法。
例1:如高教出版社《全國計算機(jī)等級考試——二級教程——C語言程序設(shè)計》第五章“循環(huán)結(jié)構(gòu)”,課后習(xí)題中有這樣一道題:“編寫程序,求1-3+5-7+9-…-99+101的值”這道題與例題5.2“用p/4=1-1/3+1/5-1/7+1/9…公式求p的近似值,直到最后一項的絕對值小于10-6為止”題目有些相似。學(xué)生自然而然會想到用例題的這種方法求這道題。程序如方法一:
#include\"stdio.h\"
main()
{
int s=1,n,sum=0;
for(n=1;n<=101;n=n+2)
{
sum=sum+s*n;
s=-s;
}
printf(\"%d\\",sum);
}
這道題除以上的解法以外還有許多種。我讓同學(xué)們撇開計算機(jī),就當(dāng)成是一堂數(shù)學(xué)課,去試著解決這個問題。大家爭先恐后地講出自已的想法。我將他們的想法一一歸類,并且告訴同學(xué)們這就是解決這個問題的算法,同學(xué)們感覺有些不可思議,課堂氣氛頓時活躍起來,我再讓同學(xué)們冷靜下來將這些想法轉(zhuǎn)化為C語言形式,同學(xué)們這時都來勁了,同學(xué)們給出了許多個解決問題的思路。
方法二:將1-3+5-7+9-…-99+101=(1+5+9+…+101)-(3+7+…+99),經(jīng)過這樣的組合后,先分別求和,再作差。具體程序如下:
#include”stdio.h”
void main()
{
int sum=0,sum1=0,sum2=0,i;
for(i=1;i<=101;i=i+4)
sm1=sum1+i;
for(i=3;i<=99;i=i+4)
sum2=sum2+i;
sum=sum1-sum2;
printf(“%d\”,sum);
}
方法三:根據(jù)“+”、“-”間隔的規(guī)律,籠統(tǒng)地去求和,只不過將數(shù)分為正數(shù)和負(fù)數(shù)。具體程序如下:
#include\"stdio.h\"
void main()
{
int i,sum=0;
for(i=1;i<=51;i++)
{
if(i%2!=0)
sum=sum+(2*i-1);
else
sum=sum-(2*i-1);
}
printf(\"%d\\",sum);
}
方法四:利用求通項T=(-1)i-1*(2*i-1),程序如下:
#include\"math.h\"
#include\"stdio.h\"
void main()
{
int i,sum=0;
for(i=1;i<=51;i++)
sum=sum+pow(-1,i-1)*(2*i-1);
printf(\"%d\\",sum);
}
2賞識學(xué)生,注重學(xué)習(xí)興趣的培養(yǎng)
在教學(xué)過程中,教師應(yīng)運(yùn)用多種信息技術(shù)適時的輔導(dǎo),創(chuàng)設(shè)豐富的情境,發(fā)揮最佳效應(yīng),運(yùn)用多種教學(xué)手段激發(fā)學(xué)生主動學(xué)習(xí)獲取知識的熱情。
例2輸出由“*”構(gòu)成的一個菱形。我讓同學(xué)們考慮了5分鐘左右大多數(shù)同學(xué)都在想辦法用for語句來實(shí)現(xiàn)。有些同學(xué)受前面例子的影響開始學(xué)著分析問題了,最后有同學(xué)舉手膽怯地說:“老師,您看這樣行嗎?我用7條printf語句實(shí)現(xiàn)?!奔矗?/p>
#include\"stdio.h\"
void main()
{
printf(\" *\\");
printf(\"***\\");
printf(\" *****\\");
printf(\"*******\\");
printf(\" *****\\");
printf(\"***\\");
printf(\" *\\");
}
當(dāng)然這種方法是正確的,只是說與編寫教材人的思想不能統(tǒng)一起來,編教材人原本是想利用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)。
3深化實(shí)踐教學(xué)效果,培養(yǎng)創(chuàng)新精神
(1) 優(yōu)化實(shí)驗(yàn)教學(xué)環(huán)境,讓學(xué)生成為實(shí)驗(yàn)的“主角”。
學(xué)生創(chuàng)新能力的培養(yǎng),對于語言課,在于解決同一個問題采用不同的思路,用不同的方法進(jìn)行解決。在學(xué)生上機(jī)前,我要求學(xué)生提供算法,最好是一題多解。
(2) 改革評價體系,鼓勵求實(shí)創(chuàng)新。對學(xué)生的評價,不能僅用卷面來解決,教師要在學(xué)生學(xué)習(xí)的過程中進(jìn)行跟蹤,課堂教學(xué)、上機(jī)指導(dǎo)、網(wǎng)絡(luò)等一系列信息就能夠給予學(xué)生評價,要注重學(xué)習(xí)的過程,而不是結(jié)果,向動手能力強(qiáng),勇于探索的同學(xué)傾斜。我明確地告訴同學(xué)們,我強(qiáng)調(diào)的是學(xué)習(xí)的過程,而不是看結(jié)果,即使你期未不參加考試我也能了解你的水平,對同學(xué)們的整個學(xué)習(xí)過程做到了如指掌。
參 考 文 獻(xiàn)
[1] 田淑青. 全國計算機(jī)等級考試二級教程. C語言程序設(shè)計[M]. 北京:高等教育出版社,2007.
[2] 譚浩強(qiáng). C語言程序設(shè)計[M]. 北京:清華大學(xué)出版社,2000.
[3] 南麗麗. 階梯式教學(xué)法在C語言教學(xué)中的應(yīng)用[J]. 計算機(jī)教育,2008,(7):75-76.