?

從1至100的累加看計算思維的教學實現

2017-05-18 16:29王榮良
中國信息技術教育 2017年9期
關鍵詞:高斯例子編程

王榮良

編程學習是進入計算機專業領域的入門課程。大學一年級計算機專業的學生都會學習一門程序設計語言的課程,他們在學會一種計算機高級語言的同時,也大致理解了計算解決問題的一般過程。我國基礎教育也開設了類似的程序設計課程,該課程從早期的BASIC語言、LOGO語言,到后來的Pascal語言、VB、VC,直到現在流行的Scratch、Pathon,已經有30多年的歷史了。在這30多年中,有關中小學生開展計算機編程學習教育價值的爭論一直就沒有停息過。當前,計算思維教育的興起給中小學生學習編程提供了新的價值取向。顯然,計算思維作為計算機科學的學科思維,主要是在計算機專業的知識與技能學習過程中滲透的。因此,編程學習也應該是計算思維教育的有效途徑。但這并不等于說,學習編程就一定能培養計算思維。

在程序設計“循環結構”教學中,有一個經典題例,就是“1+2+3+……+100”的求和。如果在高中階段學習該知識點,學生們都已經知道了高斯公式,并且還會質疑這一算法為何不用高斯公式而要用笨拙的循環,那么,是不是可以說,用循環就是體現計算機解決問題的思路,用循環就是體現計算思維呢?教師不妨站在計算機科學基礎概念的角度,對計算機進行“1+2+3+……+100”的求和操作進行細致的分析。

第一,這是編程學習中的一個典型例子,但這個典型例子引用的初衷并不是從計算思維教育的角度出發的。其典型之處在于為講解循環結構提供方便,非常直觀地提供了循環結構的基本要素,即循環體和循環條件。例子本身很容易理解,是否正確實現也很容易判斷。因此,該例子的教學功能是學習一個典型累加求和的算法,同時也幫助學生理解循環結構。僅就這點而言,這個例子對計算機執行循環的過程的技術細節理解有幫助,但不能算是計算思維的典型例子。

第二,關于循環結構實施“1+2+3+……+100”求和的價值判斷問題。評價一種計算的優劣,時間開銷和空間開銷是兩個重要指標。對于已知計算量的運算,如本例中的99次求和運算,是可以用順序結構來完成的。而站在計算開銷的角度來考慮,用順序結構來解決,時間開銷是小的,但程序代碼所占的存儲容量較大。那么,為什么要用循環結構來實現呢?一方面,是因為很多應用是不能用順序結構來簡單代替的;另一方面,是因為不便于人的思維和表達。要讓計算機為人類做事,就需要讓計算機知道做什么,這就需要簡約、明確地告訴計算機,這種表達方式是為人服務的,也是人的思維。這種形式化表達是計算思維的一部分,這也從一個側面說明計算思維是人的思維,而不是計算機的。

第三,在實際應用中,如果已知高斯公式,那么應該用高斯公式來計算,還是用這種求和的方法來計算呢?答案是肯定的,那就是用高斯公式來計算。因為用高斯公式來計算,就不需要用累加的方法來實現,降低了計算的復雜度,這也是計算學科追求的目標。這一點在教學過程中應該向學生交代清楚,不能讓他們產生這樣的錯誤理解:不用高斯公式,而采用求和的笨辦法,是為了滿足計算機的需求,計算機總是用最原始的方法來解決問題的。事實上,如果一個計算問題有現成的解析公式,那么計算機肯定用現成公式。用高斯公式來表達“1+2+3+……+100”的求和,是一種建模的過程。這是在計算公式層面上的建模,而建模也是計算思維的一部分。

第四,同樣的問題,如果學生并不知道高斯公式,那么教師教學過程的開展可能有兩條途徑:①采用累加求和的方式用循環結構實現;②先推導出高斯公式,然后用高斯解析式,直接用賦值語句編程。用累加方法還是用公式計算,取決于人的需要,或者說哪種方式更能為人解決問題提供便捷。這兩種教學的方式,體現了計算思維不同的側重點:①在于循環結構的形式化表達;②對有待解決問題的抽象和數學建模的過程。當然,有一點還是需要注意的,就是在教學過程中推導高斯公式所花費的開銷。如果需要花費相對比較多的時間和精力去推導高斯公式,那么整個解決求和問題的教學過程就成了數學課,而不是程序設計課。

第五,有一些例子很難用數學解析式來表達答案,但可以用循環結構來實現。例如,上海高中信息科技教材中有關“循環結構”的典型例子:一張單據上一個5位數字組成的編號,其千位數和百位數處已變得模糊不清,只知道這個5位數是57或67的倍數,求這個滿足條件的5位數。這個問題可以通過兩重循環枚舉算法來解決。但對于另外一個形式的問題——求解一元二次方程,如果已知存在整數解和解的范圍,那么可以用循環的方法來解決;如果學生已經學習了一元二次方程的求解公式,那么應該直接用公式,使用解析法來求解,因為這種方法更直接,效率更高。更進一步,針對“雞兔同籠”的問題,對小學生而言,可以用枚舉的方法來解決,這是一個典型的發揮計算機特長彌補人的智力的解決問題的方法,在培養學生應用計算機解決問題的能力的同時,也反映出利用計算機解決問題這一思想,即讓計算機用構造的方法通過簡單重復計算來解決人類復雜的智力問題;反之,如果讓學生先學習推導反映“雞兔同籠”問題的方程式,然后用解析法由計算機來實現,那么,這主要就是考驗學生的奧數技能了。

綜上所述,用循環的方法實現“1+2+3+……+100”的累加求和,是一個用于編程學習的典型例子,但不能算是計算機實際應用的典型例子,因為在實際程序實現中,一般只會在已有循環結構實現其他功能的情況下用這種方法,很少會專門編寫循環語句只為單一累加求和。其實,更為典型的應用是計數器,即i=i+1的實現,在循環體中計算循環次數,這是一個將人解決問題的方法用計算機來實現的實例。

從計算思維教育的角度出發,其關鍵在于能對需要解決的問題進行抽象,形成計算機能夠理解的形式化表達,并且讓計算機自動地去計算。至于是用循環結構累加實現,還是用高斯公式來編程序,則取決于完成這一計算的工作基礎以及價值判斷,這兩種實現方法都能體現計算思維。

在計算思維成為熱點的當下,在大規模開展計算思維教育的時刻,教師需要對計算思維的本質和細節仔細研究,而不是簡單地把編程教育理解成計算思維教育。周以真教授提出的“計算思維是運用計算機科學的基礎概念進行問題求解、系統設計,以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動”不是一句空洞的話,而是基于對計算機科學基礎知識和基本理論的理解。對中小學生而言,學習Word、Excel等應用軟件的使用,只是體驗了計算機技術給人們生活、學習帶來的便捷,而學習計算機編程,則是為理解計算機學科這個神秘世界打開了一扇小門。教師若要把計算思維有效地傳達給學生,讓學生在學習計算機學科知識的前提下接受計算思維教育,就要對計算機學科知識有一個清晰的認識,對計算過程有一個明確的判斷,對計算思維有全面而深刻的理解。

猜你喜歡
高斯例子編程
玩游戲學編程,Blockly Games上手玩
紡織機上誕生的編程
數學王子高斯
編程屋完成數百元萬天使輪融資
學編程,先畫畫
動腦算算題
如此樂觀
猴哥來了
商界求生
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合