何勇
【摘要】 筆者認為在高中程序設計模塊教學中教學重點應放在程序算法教學,而語句、語法教學應該是我們程序算法教學的載體。教學中用自然語言描述算法的能力才是我們課堂教學對學生的核心培養目標,只要有一定的語句、語法知識,學生就能把自然語言描述算法用計算機語言表達出來。
【關鍵詞】 高中 信息技術課 編程處理模塊 教學設計
【中圖分類號】 G633.67 【文獻標識碼】 A 【文章編號】 1992-7711(2017)05-169-02
1.教學設計應淡化語句教學,注重對算法的教學
教學實例1
怎樣求已知兩個數中的最大值和最小值?
第一步:給出具體的兩個數值(如:9和5),學生可以用數學方法很快比較出來(是9);
第二步:這時把要求提高一些:已知兩個數變為A、B,要求學生比較;
學生可能用數學方法進行討論:A>Bmax為A、min為B
A 第三步:要求學生用代數式把最大值計算出來? 這時學生就出現思考的難點,體會到找不到方法,教師可以把握時機引導一下學生,重點找出兩數的關系,得到兩個數中的最大值和最小值的關鍵是兩數的差,把最小值加兩數的差就能變成最大值,這個問題就解決了:MAX=(A+B+INT(A-B))/2,反知:MIN=(A+B-INT(A-B))/2 對于高中生初學者來說,算法還不在于優,而在于是否容易理解,讓學生能接受。 教學實例2 如:編程交換兩個變量x、y的值? 有兩種算法: 算法1: ①設一個中間變量t,將x中的數據送給變量t,即t=x; ②將y中的數據送給變量x,即x=y; ③將t中的數據送給變量y,即y=t. 在講授時把這種算法與交換兩杯水的實驗相結合,使知識通俗一些,學生很容易理解。 算法2: ①x=x+y; ②y=x-y; ③x=x-y. 通過三步計算完成交換,是一種優的算法,學生會是一團霧水,不知所云。所以在教學中要把握算法的深度,循序漸近,以學生理解作為課堂教學的標尺。 2.程序設計教學設計要注意對基本算法的總結 在教學就必須要總結適用于高中生學習的理解的基礎算法。 求A、B兩整數相除后的整數部分的算法:INT(A/B)*B 求A、B兩整數相除后的余數的算法:余數=A-INT(A/B)*B 對一個數X的四舍五入算法:INT(X+0.5) 對一個數X的保留小數位N位并四舍五入算法:INT(X*10^N+0.5)/10^N 計算A、B兩數的最大值算法:MAX=(A+B+INT(A-B))/2 計算A、B兩數的最小值算法:MIN=(A+B-INT(A-B))/2 提取一個整數A中的十位數數值和百位數數值及N位數數值的算法: 十位數數值=A/10-INT(A/100)*10 百位數數值=A/100-INT(A/1000)*100 N位數數值=A/N-INT(A/(N*10))*N 判斷數A為奇數或偶數的算法:奇數:A/2<>INT(A/2) 偶數:A/2=INT(A/2) 判斷數A能否被B整除算法:整除:A/B=INT(A/B) 不能整除:A/B<>INT(A/B) 這些算法是后面編程的基礎,對這些算法的教學一定要做到從簡單到復雜,再與一些具體的程序問題相結合,循序漸近,通過這些算法的講解和實踐,就可以提高學生學習編寫程序興趣,從而樹立在程序設計“重算法淡語法”的學習理念。 3.教學設計要注意教學的關鍵點,知識的突破口 程序設計教學有一些程序思維方式高中生不易理解,這就是教學的關鍵點,怎樣突破這樣的教學關健點是我們課堂教學的難點。應緊緊抓住教學設計中的由易到難、循序漸近的法寶。 如:在for-next循環程序教學中,怎樣提高到累加應用就是教學中的難點。 在實踐教學中可以采用由易到難、循序漸近的方式: 教學實例3 例:計算1+2+3+4的問題? S=0 X=1 S=s+x X=2 ‘關注X的變化可以寫為x=x+1 S=s+x X=3 ‘同樣可以寫為x=x+1 S=s+x X=4 ‘同樣可以寫為x=x+1 S=s+x PrintS End 引導學生觀察X的變化,是一種數數的累加程式,則程序變為 S=0 X=0 X=x+1 S=s+x X=X+1 循環體 (重復執行部分) S=s+x X=X+1 S=s+x X=X+1 S=s+x PrintS End 這樣就可以引導學生用學過的for-next循環構建循環簡化程序: 明確循環體為:X=X+1 S=s+x 循環次數(循環體出現次數)為4次, S=0 X=0 Fori=1to4
X=X+1
S=s+x
Nexti
PrintS
End
再進一步觀察X與i的相似性,把程序間化為:
S=0
Fori=1to4
S=s+i
Nexti
PrintS
End
最后進行擴展求1+2+3+4……+100的和,這樣for-next循環程序教學中,怎樣提高到累加應用的教學難點就贏刃而解了。
4.培養學生能夠獨立地編寫程序,是教學設計中最大的難點
在課堂教學中,一般采用以下幾步措施來逐漸使學生能夠獨立編一些簡單的程序。
第一步精講例題:詳細分析其算法,逐一列出解題步驟,給出完整程序;
第二步讓學生閱讀程序,寫出程序執行結果。這一步十分關鍵,讀懂理解人家的程序是以后自行獨立編程的前提,一般精心挑選很多程序題,給學生來閱讀理解;
第三步讓學生做程序填充題和程序改錯題,即給出相應程序,把其中一些關鍵地方留空,讓學生填充,或在程序中提供一些錯誤語句,要求學生修改正確;
第四步出一些類似例題的編程問題,讓學生模仿完成;
第五步讓學生獨立編寫簡單的程序。
教學實例4
為了讓學生獨立解決求s=1-1/2+1/3-1/4+……+1/99-1/100的程序,我首先詳細分析了求s=1+2+3+……+99+100的編程,程序如下:
S=0‘S的初始值為0
ForI=1to100step1‘循環100次,步長為1
S=S+i‘循環體
Nexti
Print“S=”;S
End
然后,我將上題中Fori=1to100step1這一語句略作改動
①Fori=1to100step2;求100以內奇數之和
②Fori=0to100step2;求100以內偶數之和
其余不變,讓學生閱讀程序并分析。
再將上題中S=S+i這一語句改成S=S+1/i,其余不變,那又如何呢?
學生很容易得出程序實際上是求S=1+1/2+1/3+……+1/100,進一步引導學生,這個程序有什么問題?
再引導學生思考,如要求S=1-2+3-4+……+99-100的編程,上題中循環體S=S+i應該怎樣改動?結合相關數學知識,學生很自然得到正確結果S=S+i*(-1)^(i+1)。有了上述的層層鋪墊,相信學生是能夠獨立完成s=1-1/2+1/3-1/4+……+1/99-1/100的程序代碼設計的。
在程序設計教學中,要明確重算法的設計思想,而在教學的內容和深度上應根據實際情況,不同層次學校的學生差異很大,分別加以調整。讓學生了解程序設計過程,重點撐握一些簡單的算法設計,能編一些簡單的程序。總之,產生結論的推理過程往往比對結論的記憶更重要,掌握積極而活躍的思維方法,才是編程的根本,也是學生終身受用的本領。