《普通高中信息技術課程標準(實驗)》指出,在中學開設《算法與程序設計》課程的主要目的是使學生能從簡單問題出發(fā),設計解決問題的算法,并能初步使用一種程序設計語言編制程序實現(xiàn)算法來解決問題。這對初學《算法與程序設計》的學生來說可不是容易的事。有的學生甚至覺得比學數(shù)學還難。那么,如何搞好《算法與程序設計》這門選修課的教學呢?下面談談我的做法。
明確學習用途,消除學生畏難情緒
學生通過學習必修課中的“用計算機程序解決問題”一課,初步了解編程解題的作用及其主要步驟。但有的學生可能會認為:要計算機解決問題都可以找到相應的軟件,這些軟件都是專業(yè)人員設計好的,對于普通的人不需要再學習編程解題。針對這個問題,我在第一節(jié)課就向學生介紹了我自己在工作中遇到的問題,即如何批量添加server-u用戶的問題。
例1:每學年開學時,我都要在學校的服務器上為每個學生開設一個文件夾,并利用server-uFTP軟件為每個學生設置對自己文件夾的使用權限。一個年級段600人,每人建一個文件夾、設置權限的工作少說要花1分鐘,600個人要600分鐘(10個小時),手工操作工作量大,而且容易出錯。那么,如何解決這個問題呢?
引導學生進行認真分析后,就會發(fā)現(xiàn),學生們的文件夾可以按班級分類存放,每個學生的文件夾名稱也可以設置為g06??**這種形式(其中??表示班級,**表示座號)。server-u中的用戶配置都保存在一個文本文件中,并且用戶與權限都很有規(guī)律。因此,我們可以編寫一個程序,一個班一個班地、每個班一個學生一個學生地進行開辟空間和server-u的用戶添加權限設置。最后,我演示了一下我的程序,并簡要地解析了一下程序。通過以上的例子,我是想讓學生們知道,盡管現(xiàn)在已經(jīng)有各種各樣的軟件可以幫助我們,但仍然會遇到一些現(xiàn)有軟件無法做到的事情,需要我們在原來軟件的基礎上進行二次開發(fā)。因此,學習編程解題是很有必要的。
我還通過實例簡要介紹程序設計語言的發(fā)展,讓學生了解了幾種常見的程序設計語言(機器語言、匯編語言和高級語言),同時,讓學生感受到高級語言比起低級語言是更容易學習的,從而消除了學生對學習這門課的畏難情緒。
這節(jié)課不僅讓學生學習了編程解題的過程,同時,更重要的是向學生傳遞了“編程有用、編程不難”這樣的信
息,進而增強了學生學習本門課程的興趣與信心,為本門課的教學打下了一個良好的基礎。
理解算法設計,引導學生自主學習
眾所周知,算法設計是程序設計的核心。對于任何一個問題,我們要想通過編程解決它,首先要將自己想要如何解決這個問題的方法用一定方式描述出來(這就是算法設計),然后再根據(jù)算法編寫出程序。多年的程序設計教學的經(jīng)驗告訴我們,學生學習這門課的一個很突出的困難就是如何學會和掌握算法設計。因此,在這門課的第2、3節(jié)課中,著重通過一些簡單的例子來讓學生懂得如何進行三種結構的簡單問題的算法設計。
第一,實例入手,引導學生總結出自己的算法
例2(時間轉換):輸入一個以秒為單位的時間t,將其轉換成x小時y分鐘z秒形式。用自然語言描述算法。
這是一個小學數(shù)學問題。首先,讓學生看清題目,抽象出“已知什么?求什么”這樣的模型,即已知t秒,求x小時、y分鐘、z秒,使得t秒=x小時y分鐘z秒。接著,讓學生思考如何解決這個問題。經(jīng)過初步分析,學生們?nèi)杂X得無從下手。于是,我們將問題改為“3800秒是幾小時幾分幾秒”,發(fā)現(xiàn)學生很快算出答案“1小時3分20秒”。究其原因,我覺得學生可能習慣于解決一個具體的數(shù)學問題,而不習慣于解決一個帶變量的問題。這恰恰是數(shù)學解題與編程解題的一個區(qū)別。接下來,我就讓學生說出他們是如何得出以上答案的,并引導學生進行歸納,將3800這個數(shù)換成t,再讓他們嘗試說出求法,經(jīng)過幾次修改,最后得到算法。
通過以上例子,我讓學生明白了什么是算法設計,同時,也讓他們知道,要設計出算法,通常可從實例入手,逐步地把設想的解法用盡量精確的方法描述出來,就能設計出算法。
第二,從學生熟悉的問題出發(fā),進行算法設計訓練
在講解選擇結構問題的算法設計時,我從學生初中階段就知道的“求一元二次方程實根”的問題出發(fā),進行算法設計的訓練。
先讓學生自己描述一下“求實根”問題的算法。由于學生對問題比較熟悉,又有例2中的順序結構算法設計的基礎和教師點撥,學生很快得出了如下的算法描述:①