李艷雄
【摘要】在C語言的學(xué)習(xí)中,算法的設(shè)計的實質(zhì)就是建立問題求解的模型。要想讓學(xué)生學(xué)好C語言,算法的教學(xué)就顯得尤為重要。本文主要講述如何進(jìn)行算法的教學(xué),使學(xué)生更好的掌握算法。
【關(guān)鍵詞】中職學(xué)生;C語言;算法;教學(xué)
一、算法的重要性
算法就是為為解決一個問題而采取的方法和步驟,是分析問題的鑰匙、程序設(shè)計的思想和靈魂,離開算法就談不上程序設(shè)計。在C語言的學(xué)習(xí)中,算法的設(shè)計的實質(zhì)就是建立問題求解的模型。中職學(xué)生在編寫程序經(jīng)常不寫算法,拿起筆就想寫代碼,這樣就經(jīng)常會出現(xiàn)兩個大的問題,一個看到問題,知道是怎么回事,但就是無從下手;另一個則是編寫好一個程序,但結(jié)果卻是漏洞百出,不是這里有毛病就是哪兒出問題。而要解決上述問題必須讓學(xué)生引起對算法的重視,讓學(xué)生用算法來指導(dǎo)編寫程序,從而提高學(xué)生的邏輯思維能力,提高學(xué)生編寫程序的能力,編寫出好的規(guī)范的程序代碼。
二、算法的表示方法
在C語言程序設(shè)計中算法的表示方法大致有:自然語言表示法、流程圖表示法、N—S流程圖表示法、偽代碼表示法和計算機(jī)語言表示法等。各種算法的表示法有各自的優(yōu)點,而算法的主要作用是指導(dǎo)編寫程序,不管用哪種表示法都可以實現(xiàn)這個功能,對于中職學(xué)生在說,如果把所有的算法表示法都講到的話,由于時間關(guān)系可能只能泛講,這樣反而極易造成學(xué)生的困擾;如只講一兩種算法表示法,讓學(xué)生把它學(xué)深學(xué)透,其它也就一通百通了,這樣反而能達(dá)到更好的教學(xué)效果。而對于中職學(xué)生來說選擇基礎(chǔ)的自然語言表示法與普遍使用的流程圖表示法是非常好的選擇。
三、算法的教學(xué)方法
1.循序漸進(jìn)法
自然語言表示法是把算法用文字分步驟表示出來,如:求1+2+3+……+100。用自然語言表示的算法如下:
S1:使i=1,s=0
S2:使s+i, 和仍然放在在變量s中,可表示為s+i→s
S3:使i的值+1,即i+1→i
S4:如果i≤100, 返回重新執(zhí)行步驟S2以及其后的S3和S4;否則,算法結(jié)束。
由以上的實例我們可以看出,自然語言表示法簡單,而且容易實現(xiàn),它對于簡單的程序是非常適合的,對于初識算法的人來說它是簡單的,最容易上手的一種算法表示法,是學(xué)習(xí)其它算法表示法的非常好的基礎(chǔ),是應(yīng)該最先學(xué)習(xí)的一種算法表示法。但對于適合復(fù)雜的程序來說,它書寫太多,而且不太容易看懂。這時我們可以考慮用流程圖。
流程圖表示法是通過箭頭相互連結(jié)的幾何圖形來表示程序運行的方法,如上一個例題如用流程圖來表示算法則如圖1所示。
圖1
從圖1可知流程圖表示算法,直觀形象,易于理解。它是目前一種非常普遍的算法表示法,適合各種大小問題的算法表示。
對于中職學(xué)生來說流程圖算法表示法是最終必須學(xué)會的一種算法表示法,但我們不能一上來就講這種算法表示法,而應(yīng)該循序漸進(jìn)地先講解自然語言表示法,在掌握好自然語言表示法的基礎(chǔ)上,再讓學(xué)生學(xué)習(xí)流程圖表示法,把自然語言轉(zhuǎn)化為流程圖,這樣學(xué)生才容易接受,才會更好的學(xué)好流程圖算法表示法。
2.多看多練經(jīng)典算法
C程序設(shè)計是計算機(jī)語言的一門基礎(chǔ)課程,誕生的歷史悠久。在其發(fā)展過程中,人們積累了許多的經(jīng)驗,產(chǎn)生出對一些問題的經(jīng)典算法,如排序問題的選擇、插入和冒泡排序算法;如搜尋問題的循序搜尋法、帶衛(wèi)兵的循序搜尋法和二分法搜尋法;如判斷素數(shù)的經(jīng)典算法;如輾轉(zhuǎn)法求最大公約數(shù)算法等,讓學(xué)生多看這些算法,從中吸取養(yǎng)分,提高自己的邏輯思維能力。
如果僅僅是看而不自己動手的話,哪是遠(yuǎn)遠(yuǎn)不夠的,在實際的教學(xué)過程過經(jīng)常碰到這樣的學(xué)生,上課認(rèn)真聽,也認(rèn)真看書了,但就是不知道編寫程序,為什么會這樣呢?通過觀察我發(fā)現(xiàn)這樣的學(xué)生平時就不愛做練習(xí),簡單的問題認(rèn)為不值得做,而復(fù)雜的問題又以不會做為借口,久而久之就跟不上教學(xué)進(jìn)度。算法它不是靠死記硬背的就能學(xué)好的,它不只是看看書聽聽課就能學(xué)好的,要學(xué)好,不僅要多看,更要多練,把所學(xué)習(xí)到的知識多去應(yīng)用,從而煅煉自己分析問題和解決問題的能力,提高自己的邏輯思維能力,從而更好的學(xué)好算法,提高自己編寫程序的能力。
3.多歸納總結(jié)
許多時候?qū)W生總是說這個題目與以前老師講過的哪個比較相似,但就是寫不出算法跟代碼,而在實際教學(xué)過程中,老師也不可能把所有的程序都講遍。而要解決這類問題就需要老師在平時的教學(xué)過程中,要多歸納總結(jié),把問題進(jìn)行延伸,實現(xiàn)一種模塊化問題的講解。比如在講解:1+2+3+……+100這個問題的時候,可以這個問題進(jìn)行延伸,引出1+3+5+……+101;1+5+9+……前30項之和;1-3+5-7+……前30項之和;2+22+222+……前7項之和等等這樣一個模塊問題,從而進(jìn)行分析總結(jié)這樣一個模塊問題(累加問題)的模塊算法的特點。從而使學(xué)生從學(xué)會一個程序算法,引申到學(xué)會一個模塊問題的算法,更加有助于訓(xùn)練學(xué)生快速獨立編寫程序,樹立學(xué)習(xí)信心。而在C語言中這樣的模塊化的問題還有很多,比如累乘、查找、求最值、經(jīng)典的星形輸出等等。通過將這些套路模塊化也有助于學(xué)生更快更好地學(xué)習(xí)和編寫程序,激發(fā)學(xué)生程序設(shè)計的興趣和靈感。
4.激發(fā)學(xué)生的學(xué)習(xí)興趣
如果只是讓學(xué)生不停的寫算法,探索算法,學(xué)生就會感覺到非??菰餆o味。我們應(yīng)多讓學(xué)生上機(jī)實踐,讓學(xué)生把自己寫的算法轉(zhuǎn)換成代碼,上機(jī)操作一下,就會極大的增加學(xué)生的學(xué)習(xí)興趣。我們還可以讓學(xué)生設(shè)計一些與生活實際相關(guān)的問題來提高學(xué)生的興趣,如:“輸入一個學(xué)生的成績,如超過80分,輸出優(yōu),60到80之間,輸出良,60分以下輸出差”等等。學(xué)生有興趣后,會更加愿意思考問題,書寫算法,從而形成良性循環(huán),自然而然地學(xué)生就會學(xué)好C語言了。
譚浩強(qiáng)教授認(rèn)為:程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法+語言工具和環(huán)境,它是程序設(shè)計的靈魂,由此可見算法在程序設(shè)計中的重要地位。算法不是一節(jié)二節(jié)課就能學(xué)會的,它是一能力的體現(xiàn),我們應(yīng)在整個C語言教學(xué)過程中都重視算法的教學(xué),從而提高學(xué)生邏輯思維能力,使學(xué)生能獨立設(shè)計出好的算法,編寫出優(yōu)質(zhì)的程序代碼。