一、問題的提出
1.算法在C程序設(shè)計中的重要性
算法是解題的方法和步驟,是計算機的解題過程。算法是程序設(shè)計的靈魂,C程序設(shè)計的步驟如下:提出問題,思考分析方法,建立數(shù)學(xué)模型,人工完成步驟,利用已掌握語句細(xì)化實現(xiàn)每個步驟,編寫程序。其中前三步為算法設(shè)計,前面未解決,后面無法做。因此學(xué)習(xí)編程的重點是鍛煉分析、分解,最終歸納整理出算法的能力。當(dāng)然算法最終必須用計算機語言編寫成程序才能在計算機中實現(xiàn)。
2.C程序設(shè)計算法教學(xué)存在的問題
筆者所選教材內(nèi)容深入淺出,通俗易懂,知識點講解到位,但所選編的例題以數(shù)學(xué)知識居多,缺乏實用性和趣味性。這無形中使數(shù)學(xué)基礎(chǔ)較弱的學(xué)生產(chǎn)生畏難情緒。中職學(xué)生學(xué)習(xí)基礎(chǔ)較差,很多學(xué)生以前并未接觸到算法知識,學(xué)習(xí)興趣不濃、缺乏對新知識的探索,而算法概念復(fù)雜、內(nèi)容抽象、程序設(shè)計語言枯燥,容易使學(xué)生慢慢失去深入學(xué)習(xí)編程的興趣。
二、采用的教學(xué)策略
基于目前算法教學(xué)中存在的問題,在新知導(dǎo)入階段,教師應(yīng)根據(jù)學(xué)生的認(rèn)知特點,引入學(xué)生熟悉的實例,創(chuàng)設(shè)合理的問題情境,以刺激學(xué)生的最近發(fā)展區(qū),讓學(xué)生在原有知識基礎(chǔ)上實現(xiàn)知識的內(nèi)化和遷移,多方位地理解算法的相關(guān)概念,從而推進課堂教學(xué)有序高效地進行。對此筆者認(rèn)為在教授算法知識時,應(yīng)注重與生活中實際問題或數(shù)學(xué)領(lǐng)域經(jīng)典問題緊密結(jié)合,重視與高中數(shù)學(xué)和《算法與程序設(shè)計》課程的銜接,使教學(xué)起到承上啟下,逐漸深入的作用。同時根據(jù)學(xué)生思維特點,采用直觀形象的演示方法,變復(fù)雜、枯燥的算法學(xué)習(xí)為交互沉浸型娛樂學(xué)習(xí)。
1.淡化概念,實例代替
講解算法的概念、描述工具、特征和擇優(yōu)時,應(yīng)盡量使用實例說明,淡化概念,少講、精講(講重點)。要做到這點,就必須正確選取能說明問題的實例。(1)數(shù)學(xué)領(lǐng)域的經(jīng)典問題計算機最原始的功能就是數(shù)值計算,數(shù)學(xué)是學(xué)生接觸最多的課程之一,如小學(xué)數(shù)學(xué)四則運算的順序、分配律的運用、高斯消去法、輾轉(zhuǎn)相除法等數(shù)學(xué)內(nèi)容其實就是算法。在教學(xué)中多舉數(shù)學(xué)領(lǐng)域的經(jīng)典問題,不僅可以提高學(xué)生的學(xué)習(xí)興趣,還能提高學(xué)生研究問題、解決問題的能力。比如已知三角形三條邊,求三角形面積。學(xué)生可能會采用以前知識艱難解題,如果教師告知可以采用海倫公式,效果又當(dāng)如何?比如著名的不定方程解 “百錢買百雞”的數(shù)學(xué)思考題,大多數(shù)學(xué)生在解題時,只能利用已知條件,列出兩個三元一次方程組,成為“無解”方程。但在講“窮舉”算法時,這個問題就能輕而易舉地解決。它的分析過程是:由于100錢最多只能買20只公雞,因此公雞數(shù)應(yīng)該在0~20之間;同理可得母雞數(shù)應(yīng)該在0~33之間;小雞數(shù)應(yīng)該在0~100之間。這樣,利用循環(huán)分別對公雞、母雞和小雞進行枚舉,可得出問題的解。通過這樣的引導(dǎo),充分調(diào)動了學(xué)生的學(xué)習(xí)積極性和求知欲望,從而更好地學(xué)習(xí)編程。另外像“猴子分桃”、“雞兔同籠”、“韓信點兵”、“斐波那契數(shù)列”等都是很有趣味性和實用性的數(shù)學(xué)題目。(2)生活中的實際問題算法的思想,不只是用于數(shù)值計算,它可以廣泛地描述許多操作過程。像舞步的圖譜,是舞蹈演員表演舞蹈時的算法;樂譜是樂隊演奏和指揮的算法等等。例如,2個大人和2個小孩一起過河,渡口只有一條小船,一次只能渡過一個大人或兩個小孩,他們都會劃船,但都不會游泳。依照何種程序才能渡過此河?這個常見的操作步驟就是算法,教師應(yīng)聯(lián)系學(xué)生的生活經(jīng)驗和學(xué)習(xí)經(jīng)驗,深入淺出地加以講解,讓學(xué)生切實感受到算法在現(xiàn)實生活中的應(yīng)用,從而體會算法思想。同時注重引導(dǎo)學(xué)生注意總結(jié)生活中的規(guī)律,從現(xiàn)象看本質(zhì)。比如程序設(shè)計中經(jīng)常用到的兩個數(shù)互換,我們就可以用生活中兩個瓶子里的東西互換借助第三個瓶子完成來說明問題,形象直觀。通過生活中實際問題的分析,有助于思維水平的提高。
2.展示編寫好的程序
在日常生活中,我們經(jīng)?;虿恢挥X地使用編寫好的程序,如超市的收銀系統(tǒng),銀行的自動柜員機,火車訂票系統(tǒng)等等。這些程序用C語言就可以編寫出來,教師也可演示一些C語言編寫的小程序(最好是簡單易懂),因C語言是面向過程的,不能實現(xiàn)所見即所得效果,學(xué)生對演示結(jié)果理解仍有障礙,此時筆者建議可以使用高中信息技術(shù)課中采用的VB教學(xué)軟件編寫的程序,其更接近于Windows操作系統(tǒng)圖形界面,學(xué)生更好理解。比如設(shè)計一個簡單電路模擬的應(yīng)用程序,當(dāng)開關(guān)斷開時電路中的小燈熄滅,當(dāng)開關(guān)閉合時小燈點亮。至此,筆者已經(jīng)達(dá)到采用所學(xué)算法,使用語言編寫程序并演示輸出的目的,這極大程度上減輕了學(xué)生的畏難情緒,增加了學(xué)習(xí)信心。
3.結(jié)合虛擬動畫,加強興趣培養(yǎng)
陶行知認(rèn)為:“學(xué)習(xí)有了興趣,就肯用全部精神去做事,學(xué)與樂不可分”。對于較為復(fù)雜的“排序算法”、“遞歸算法”及“八皇后問題”等算法,單純講解,學(xué)生會感到枯燥乏味,注意力很難集中,嚴(yán)重影響課堂教學(xué)效果。根據(jù)職校學(xué)生具象思維發(fā)達(dá)的特點應(yīng)使用虛擬動畫,讓學(xué)生親自操作感受Flash動畫的生動性與交互性,這樣學(xué)生可以形象直觀地看到算法抽象而隱蔽的運行過程。例如“冒泡排序法”的演示中,學(xué)生可以動態(tài)輸入與數(shù)據(jù)更新,在排序過程中,小的數(shù)就如氣泡一般逐層上冒,而大的數(shù)逐個下沉。 利用好虛擬動畫,可以調(diào)動學(xué)生的學(xué)習(xí)積極性,使其處于思維高度運轉(zhuǎn)之中,久而久之,興趣的培養(yǎng)自然水到渠成。
4.由簡到難,加強學(xué)生練習(xí)環(huán)節(jié)
只學(xué)不練是學(xué)不會算法知識的,教師精心設(shè)計的教學(xué)環(huán)節(jié)最終目的是使學(xué)生學(xué)到知識,所以設(shè)置練習(xí)是檢驗教學(xué)的方法,練習(xí)的問題貼近學(xué)生實際,密切聯(lián)系生活,聯(lián)系社會,能把學(xué)生帶入富有趣味和價值的問題情境中,降低知識點的坡度,引發(fā)學(xué)生學(xué)習(xí)的興趣。例如用流程圖描述學(xué)校上體育課,正常在室外上,下雨下雪天在室內(nèi)上的算法。還有在電視節(jié)目中經(jīng)常出現(xiàn)的商品價格的有獎競猜游戲,學(xué)習(xí)這個實例,可以提高“循環(huán)結(jié)構(gòu)”的教學(xué)有效性,讓學(xué)生在不斷完成任務(wù)中體會自己工作的成就感。
5.重視算法的編程思想,培養(yǎng)算法思維
學(xué)習(xí)算法對于發(fā)展我們有條理的思考與表達(dá)能力,提高我們的邏輯思維能力是很有幫助的?!熬哂兴惴ㄋ季S的人在完成任何任務(wù)或者解決任何任務(wù)問題時,都會認(rèn)識到:問題和任務(wù)是有起點、邊界與限定范圍的,盡管可能沒有直接的方式達(dá)到目標(biāo),也能夠迅速地采取算法思維進行分析,然后按部就班地完成任務(wù)或者解決問題?!苯處煈?yīng)改革課程教學(xué)單元,在講解時立足教材并高于教材。
比如我們在判斷算法的優(yōu)劣時,列舉著名數(shù)學(xué)家華羅庚的統(tǒng)籌論“燒水泡茶”步驟。
方法一:第一步,燒水;第二步,水燒開后,洗刷茶具;第三步,沏茶。
方法二:第一步,燒水;第二步,燒水過程中,洗刷茶具;第三步,水燒開后沏茶。
通過這個實例學(xué)生可知:對于同一個問題可以有不同的解題方法和步驟。授課時注重培養(yǎng)學(xué)生提出不同的算法,并比較這些算法之間的優(yōu)劣,讓學(xué)生根據(jù)分析對算法進行優(yōu)化。筆者認(rèn)為教授課程時結(jié)合古今中外算法間的比較,引導(dǎo)學(xué)生通過閱讀、分析、研究,使學(xué)生逐步了解、領(lǐng)略、感悟算法思想精髓,比如秦九韶“三斜求積”公式與海倫公式,歐幾里得輾轉(zhuǎn)相除法與更相減損法等有助于培養(yǎng)算法思維。而對冒泡排序算法的改進就很好地體現(xiàn)了這一點。
三、結(jié)束語
算法知識是學(xué)習(xí)C程序設(shè)計的關(guān)鍵,筆者認(rèn)為教師不應(yīng)該簡單講解甚至跳過不講。算法在此獨具魅力,可以吸引大多數(shù)學(xué)生的注意力,調(diào)動其積極性,激發(fā)其求知欲,使其在教師設(shè)置的智力活動中如魚得水。教師也應(yīng)注意適當(dāng)處理教材,改革課程內(nèi)容,增加個人知識儲備,備好每堂課,使C程序設(shè)計“難教又難學(xué)”的現(xiàn)象得以改善。
(作者單位:浙江省衢州市技師學(xué)院)