當今,信息技術在人類生活的各個領域發揮著巨大的、難以估價的作用,可以說正確運用信息技術已成為現代人必須具備的基本技能之一。在這種時代背景下,《普通高中技術課程標準(實驗)》(信息技術)選修模塊《算法與程序設計》明確了Visual Basic簡明程序設計的地位和作用。該模塊旨在培養學生的邏輯思維能力,通過程序設計的教學讓學生更深入地理解計算機的工作原理,初步學會程序設計的一般方法,并了解用程序設計的方法解決實際問題的幾個基本步驟,從而為更深入的學習打下基礎。
消除程序設計中的幾個誤區
絕大部分高中學生是初次接觸高級程序設計語言,常常有很多認識方面的誤區。
誤區一:只要將問題給計算機,計算機就能夠自動處理問題。例如,判斷數A是奇數還是偶數,學生往往認為將數A輸入到計算機中,它就會自動給出答案,其實不然。所謂計算機自動給出答案其實要通過預先編好的程序(如果數A除以2的余數為零即為偶數,否則為奇數),最終才能實現計算機自動處理問題。所以,我們要讓學生認識到要計算機解決某一問題,就必須編寫相應的程序,正確地寫出求解步驟,使得計算機如我們所希望的自動處理問題。這就是計算機算法的精髓。
誤區二:在學習程序設計語言時誤把算法當做數學方法,認為只要數學好,學計算機程序設計就沒問題。當然,數學會對程序設計有所幫助,但兩者還是有明顯不同的。數學解題步驟是數學上的各種算法,而程序設計更要求人們注重邏輯思維、會分析和綜合。例如,怎樣將一組數據按從小到大排序?這里我們要用到數學中的數與數比較大小的問題,同時還要注意數與數之間的聯系,即將最小的排在最前面,其次是第二小數,依次類推。我們要讓學生知道算法不單是指數值計算,還有大量的非數值的計算,如排序、查找、檢索信息、判斷和決策等。用計算機編寫程序,實際上是為某一項應用,把問題劃分為一個個小的模塊,分為各個功能去做。這種逐步分解、按步驟加以說明的過程,實質上是表達思想的能力。
誤區三:忽略算法重視語句。學生在編程過程中往往不是把注意力放在所要解決的問題上,而是把注意力放在該用什么語句上。這好比在寫英語作文時,不去表達思想,而是在想要用哪個單詞、要用哪種語法。試想這怎么能寫好作文呢? 在布置學生編程時許多學生并沒有掌握算法的精髓,而是在那里東抄一段程序西抄一段程序,就認為完成了編程。這樣編寫的程序是牛頭不對馬嘴。 所以,編程序是要學語言,但決不是為語言而語言,用語言為了表達思想意圖,更準確解決實際問題才是最重要的。我們要強調的是表達能力,也就是邏輯思維表述的能力。所以教師在學習過程中要時刻引導學生認識到“語法本身只是一個外殼,算法才是其中的靈魂”。
在授課過程中教師要注意使學生消除以上誤區,正確引導學生對結構化設計語言的認識。
化抽象概念為易懂的生活實例
剛開始學習程序設計總讓人感覺是枯燥、難懂的。那么,在程序設計教學過程中,教師如何化枯燥為生動、化難懂為易懂呢?其中運用形象比喻就是一個很好的方法。形象比喻是我們日常描述事理的基本方法,通過在教學過程中使用大量的形象比喻,化晦澀的抽象概念為易懂的生活實例,消除學生在學習程序設計時的畏難情緒,往往能達到事半功倍的效果。
例如,講解對象三要素——屬性、方法和事件時,書本上給出的具體定義為:把屬性看作對象的性質,把方法看作對象的動作,把事件看做對象對外部操作的響應。這樣的定義比較抽象,在實際學習過程中學生很難分清什么是屬性、什么是方法、什么是事件,往往一堂課下來暈頭轉向。那么怎樣使學生更容易理解其含義呢?其實,我們可以列舉身邊的事例,如小孩玩的氣球同樣具有屬性、方法和事件。氣球的屬性包括可以看到的一些性質,如它的直徑和顏色以及其他描述氣球的狀態的屬性,如充氣或未充氣。氣球還具有本身所固有的動作,如放氣的方法(排出氣球中的氣體)和上升的方法(放手讓氣球飛走)。氣球還有預定義的對某些外部事件的響應,如氣球對刺破它的事件響應是放氣,對放手事件的響應是升空。另外就是,講解過程中注重理論聯系實際。例如,在講解程序的三種基本結構時,教師可以列舉身邊具體事例或與其課程相關的內容。
例1:順序結構。
一列火車在某地時的速度為V0=40Km/h,以加速度a=0.15m/s2加速行駛,求2min后的速度v和距開始點的距離s。
例2:分支結構。
輸入一個學生的成績,對其進行等級評定。90分及以上為“優”,80~89為“良”,70~79為“中”,60~69為“及格”,60分以下為“不及格”。通過成績作為條件來判斷最終的結果。
例3:循環結構。
為校園歌手大賽設計一個評分程序。10名評委,去掉一個最高分、一個最低分,計算平均分。
在教學過程中教師要強調理論聯系實際,引導學生注意尋找、發現身邊的實際問題,進而設計出算法和計算機程序去解決這些問題。通過這一些事例的講解使得學生容易理解和接受。
循序漸進增加程序的難度
在學習過程中,書本中的程序相對來說比較簡單,但是對于初次接觸這種結構化設計語言的學生還是不能夠完全理解掌握,例如循環語句,對于該語句的語法一定要講解透徹,書中的例題是求(s=1+2+3+……+100)自然數和的程序。在學生充分掌握這個程序的同時,為了加深對該程序的理解,可以通過在原有程序的基礎上逐漸更改和增加條件的方法來提高同學的綜合編程能力。教師可以對原程序作以下幾種修改。
(1)求1到n之間所有數的和(任意自然數n從鍵盤輸入)。
(2)求1到100之間所有奇數的和(1+3+5+……+99)。
(3)求1到100之間所有偶數的和(2+4+6+……+100)。
讓學生自己思考并且通過上機調試程序。
第一題中要運用到前面所學的知識,即InputBox輸入語句,循環的終值可以通過該語句從鍵盤輸入;第二題和書本中例題基本相同,只要將循環的步長改為2即可;第三題在第二題的原有基礎上只需要修改循環語句中循環變量的初值即可(初值為2)。在學生編寫程序的同時教師從旁引導學生觀察程序中的一些關鍵點的變化,綜合運用以前所學的知識,從而進一步掌握for……next循環。通過這一系列深入淺出的練習使學生的綜合編程能力得以提高。
上述所解決方案看似是簡單程序,但做起來往往要費不少周折,包括設想、寫程、調試、修改、成功。而學生在具體實現過程中,常有“山重水復疑無路,柳暗花明又一村”的感覺,不斷油然而生的成就感,大大激發了學生的求知欲,使得他們的創造性得到淋漓盡致的發揮,思維能力得到跳躍式的提高。
高中階段的程序設計主要是培養學生的邏輯思維能力,了解程序設計的基本思想。只要我們在平時教學中抓住了這一基本點,授之學生的就是“漁”,而不是“魚”。