于 清 吐爾根•依布拉音 阿里甫•庫(kù)爾班
摘要:本文通過(guò)分析C語(yǔ)言教學(xué)中存在的問(wèn)題,提出算法學(xué)習(xí)對(duì)學(xué)生學(xué)習(xí)語(yǔ)法和上機(jī)操作有著積極的作用,進(jìn)而闡述算法為先的教學(xué)方法,實(shí)踐證明,該教學(xué)方法從根本上調(diào)動(dòng)學(xué)生學(xué)習(xí)C語(yǔ)言的積極性和主動(dòng)性。
關(guān)鍵詞:C語(yǔ)言;算法為先;教學(xué)模式
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B
1引言
為適應(yīng)社會(huì)和經(jīng)濟(jì)的信息化需要,掌握計(jì)算機(jī)技術(shù)顯得尤為重要。C語(yǔ)言以它結(jié)構(gòu)化豐富、靈活性大、可移植性強(qiáng)、效率高等優(yōu)點(diǎn),被廣大高校作為計(jì)算機(jī)專業(yè)基礎(chǔ)課,以及許多非計(jì)算機(jī)專業(yè)學(xué)習(xí)程序設(shè)計(jì)的首選課。但是又由于C語(yǔ)言涉及的概念復(fù)雜,規(guī)則繁多,數(shù)據(jù)類型和運(yùn)算符豐富等特點(diǎn),使許多初學(xué)者望而生畏。很多文獻(xiàn)致力于研究好的教學(xué)方法,幫助學(xué)生掌握C語(yǔ)言語(yǔ)法及上機(jī)技巧,這在一定程度上改善了教學(xué)效果,但是學(xué)生的學(xué)習(xí)熱情仍然缺乏積極主動(dòng)。本文通過(guò)分析算法在C語(yǔ)言教學(xué)中的重要作用,進(jìn)一步探討算法的教學(xué)方法,目的是從根本上激發(fā)學(xué)生的學(xué)習(xí)熱情,降低學(xué)習(xí)難度。
2C語(yǔ)言教學(xué)中常見問(wèn)題分析
算法設(shè)計(jì)、基本語(yǔ)法規(guī)則、程序調(diào)試是C語(yǔ)言教學(xué)的核心內(nèi)容。算法注重解決某一問(wèn)題采用的方法步驟,語(yǔ)法注重語(yǔ)言規(guī)范,用規(guī)范的C語(yǔ)言描述的算法必須通過(guò)上機(jī)調(diào)試才能實(shí)現(xiàn),三個(gè)核心內(nèi)容緊密聯(lián)系。然而在教學(xué)環(huán)節(jié)中,教材內(nèi)容基于語(yǔ)法體系,通常采用課堂講語(yǔ)法、上機(jī)調(diào)程序的教學(xué)模式,忽視了算法在教學(xué)中的積極作用,殊不知過(guò)細(xì)的語(yǔ)法知識(shí)易使學(xué)生失去興趣,靈活的編輯環(huán)境讓學(xué)生望而卻步,學(xué)生的學(xué)習(xí)熱情很難調(diào)動(dòng)起來(lái)。
2.1語(yǔ)法細(xì)節(jié)易使學(xué)生失去學(xué)習(xí)興趣
通常C語(yǔ)言是學(xué)生接觸的第一門程序設(shè)計(jì)語(yǔ)言,任何程序主要由數(shù)據(jù)和操作兩部分組成,圍繞這一特點(diǎn),C語(yǔ)言教學(xué)內(nèi)容可歸納為:算法,數(shù)據(jù)結(jié)構(gòu),程序結(jié)構(gòu)三部分。算法是編程的指導(dǎo)思路;數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)的組織形式,可細(xì)分為基本數(shù)據(jù)類型,構(gòu)造類型,指針類型、位運(yùn)算;程序結(jié)構(gòu)是操作語(yǔ)句的組織形式,具體包括預(yù)處理,函數(shù),順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。雖然C語(yǔ)言知識(shí)結(jié)構(gòu)清晰,但是它是面向過(guò)程的編程語(yǔ)言,具有靈活的編程格式及豐富的運(yùn)算符和函數(shù),如果對(duì)語(yǔ)法細(xì)節(jié)不熟悉,以及相關(guān)概念混淆不清,很難編出正確的程序。教師往往投入較多課時(shí),講解C語(yǔ)言語(yǔ)法,而繁多的語(yǔ)法細(xì)則,不僅使學(xué)生難于記憶,而且容易誤導(dǎo)學(xué)生的編程思路。例如scanf函數(shù)的應(yīng)用:
scanf函數(shù)的一般使用形式為:scanf(格式控制,地址表列)。
格式控制是用雙撇號(hào)括起來(lái)的字符串,它包含兩種 信息:
(1)%和格式字符,如%d,%c,%s等,它的作用是按指定的格式輸入數(shù)據(jù);
(2) 普通字符,即在數(shù)據(jù)輸入時(shí),需要原樣輸入的 字符。
地址表列由若干個(gè)地址組成,通常是變量的地址或字符串的首地址。輸入多個(gè)數(shù)據(jù)時(shí),空格,回車鍵,跳格鍵為默認(rèn)分隔符。
如:“scanf(“%d%d%d”,&a,&b,&c);”語(yǔ)句,運(yùn)行時(shí)輸入:6└┘8└┘9↙,可得到變量a,b,c的值。如果輸入語(yǔ)句變?yōu)?“scanf(“%d,%d,%d” ,&a,&b,&c);”,僅添加了兩個(gè)逗號(hào),仍按以上方式輸入,則會(huì)出錯(cuò)。原因在于格式控制部分出現(xiàn)的普通字符“,”,在數(shù)據(jù)輸入時(shí)要原樣輸入,正確的輸入方式為:6,8,9↙??梢奀語(yǔ)言語(yǔ)法格式非常靈活。
運(yùn)用scanf函數(shù)輸入字符時(shí),又出現(xiàn)特殊性。
如:“scanf(“%c%c%c” ,&c1,&c2,&c3);”語(yǔ)句,運(yùn)行時(shí)輸入:a└┘b└┘c↙,目的是將a賦給c1,b賦給c2,c賦給c3。用“printf(“%c,%c,%c”, c1,c2,c3);”語(yǔ)句輸出,結(jié)果卻為a,└┘,b。出錯(cuò)原因在于:%c格式字符不需要空格作為輸入字符的間隔。正確的輸入為:abc↙。
然而,用scanf函數(shù)輸入多個(gè)字符串時(shí),空格又成為有效的分隔符。
如:“scanf(“%s%s%s” ,c1,c2,c3);”語(yǔ)句,其中c1,c2,c3為字符數(shù)組名,若輸入數(shù)據(jù):How are you? ↙,則c1數(shù)組的數(shù)據(jù)是“How”; c2數(shù)組是“are”;c3數(shù)組是“you?”。若將語(yǔ)句改為“scanf(“%s”,c1);”,輸入字符串:How are you? ↙,用“printf(“%s”,c1);”輸出,則只顯示How,與原意不同。如果一定要將帶空格的字符串輸入到字符數(shù)組c1,需要用到另一個(gè)輸入函數(shù),如“gets(c1) ;”。
雖然任何一個(gè)C程序輸入數(shù)據(jù),都可能用到scanf函數(shù),但是它靈活的編程格式,往往使初學(xué)者在具體運(yùn)用時(shí)舉棋不定,忘卻抓住編程題目的實(shí)質(zhì)性要求。教材中還有許多值得注意和思考的語(yǔ)法細(xì)節(jié),學(xué)生編程時(shí),如果缺乏解題思路的引導(dǎo),常因語(yǔ)法的困擾而失去編程興趣。
2.2編程環(huán)境易讓學(xué)生望而生畏
上機(jī)操作是學(xué)習(xí)程序設(shè)計(jì)的必備環(huán)節(jié),學(xué)生可以驗(yàn)證語(yǔ)句的正確性,測(cè)試程序的功能,進(jìn)一步增強(qiáng)對(duì)語(yǔ)法知識(shí)的理解和記憶。但是C語(yǔ)言編輯環(huán)境的一些特點(diǎn),又讓學(xué)生望而生畏。
首先,編輯環(huán)境基于DOS,不像其它可視化語(yǔ)言有友好的交互界面,加之初學(xué)者對(duì)語(yǔ)法知識(shí)不熟悉,編程時(shí)稍有不慎就會(huì)出錯(cuò)。如經(jīng)常字母大小寫不分;語(yǔ)句末尾忘加“;”;關(guān)系運(yùn)算符“= =”誤用為賦值運(yùn)算符“=”等。初學(xué)者對(duì)出錯(cuò)提示缺乏了解,不知道錯(cuò)在哪里,更無(wú)從改正,經(jīng)常一個(gè)小小的錯(cuò)誤導(dǎo)致整個(gè)程序無(wú)法運(yùn)行。
其次,C語(yǔ)言編譯程序?qū)φZ(yǔ)法檢測(cè)不像其它高級(jí)語(yǔ)言那么嚴(yán)格,這種風(fēng)格雖然給編程留下“靈活的余地”,卻常導(dǎo)致一些非語(yǔ)法性和非算法性的隱型錯(cuò)誤。比如程序:
main ( )
{
int a,b;
a = 32767;
b = a+1;
printf(“%d”,b);
}
運(yùn)行結(jié)果為-32768,不正確,原因在于發(fā)生了溢出。系統(tǒng)運(yùn)行時(shí)并不報(bào)錯(cuò),程序中潛伏的隱型錯(cuò)誤,給編程帶來(lái)很多麻煩,增加了調(diào)試難度,對(duì)編程者提出更高要求,只有他們較全面地掌握了計(jì)算機(jī)知識(shí),才可能檢查出錯(cuò)誤。然而初學(xué)者往往只懂得編程的一部分知識(shí),這使他們感到C語(yǔ)言編程即抽象又復(fù)雜。如果沒(méi)有濃厚的興趣驅(qū)動(dòng),很容易在不知所措中放棄編程。
2.3算法為先,激發(fā)學(xué)習(xí)熱情
“C語(yǔ)言”課程長(zhǎng)期沿襲傳統(tǒng)教學(xué)模式,以語(yǔ)法體系為脈絡(luò)展開教學(xué),重視語(yǔ)法細(xì)節(jié)和操作技巧,忽視算法對(duì)編程的指導(dǎo)作用,學(xué)生見木不見林,容易失去興趣,經(jīng)過(guò)一個(gè)學(xué)期的學(xué)習(xí),除了掌握一些零星的語(yǔ)法外,收獲甚微,面對(duì)具體的編程問(wèn)題,無(wú)從下手。從事軟件開發(fā)的人都知道,軟件開發(fā)過(guò)程包括:可行性研究,需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼,測(cè)試,維護(hù)等幾個(gè)階段。重點(diǎn)在于先設(shè)計(jì),后編碼,并且整個(gè)開發(fā)環(huán)節(jié)需要不斷查閱資料,反復(fù)調(diào)試修改,最終才能設(shè)計(jì)出可運(yùn)行的軟件,單靠記憶和背誦一些語(yǔ)法知識(shí),根本無(wú)法適應(yīng)實(shí)際需要。
在教學(xué)過(guò)程中,正確處理語(yǔ)法與算法的關(guān)系,是提高編程能力的關(guān)鍵。算法是程序設(shè)計(jì)的靈魂,沒(méi)有正確的算法,計(jì)算機(jī)解決不了任何問(wèn)題,語(yǔ)言只是實(shí)現(xiàn)算法的工具,要從算法實(shí)現(xiàn)的角度來(lái)介紹語(yǔ)言,而不是用語(yǔ)言來(lái)套用算法。程序設(shè)計(jì)課程本身是綜合性較強(qiáng)的一門課,注重由設(shè)計(jì)算法到書寫程序并進(jìn)行調(diào)試的整個(gè)過(guò)程,它要求學(xué)生首先明晰結(jié)構(gòu)化程序設(shè)計(jì)思路,知道怎么做,其次要求學(xué)生用扎實(shí)的語(yǔ)法知識(shí)實(shí)現(xiàn)編程,最后通過(guò)上機(jī)調(diào)試保證程序正確運(yùn)行。然而,這個(gè)過(guò)程并非一帆風(fēng)順,會(huì)遇到許多意想不到的困難,需要耐心與毅力,只有具備真正的興趣和強(qiáng)烈的好奇心,才容易完成。
經(jīng)過(guò)研究與實(shí)踐,教師在教學(xué)中如果注重算法為先,從算法實(shí)現(xiàn)的角度來(lái)介紹語(yǔ)法,那么不僅可以加深學(xué)生對(duì)語(yǔ)法知識(shí)的理解,增強(qiáng)語(yǔ)言應(yīng)用能力,而且通過(guò)構(gòu)造算法,培養(yǎng)了學(xué)生的邏輯思維,增強(qiáng)了學(xué)生分析和解決問(wèn)題的實(shí)踐能力。學(xué)生面對(duì)新的問(wèn)題,會(huì)從程序設(shè)計(jì)思想的角度出發(fā),先設(shè)計(jì)算法,在迫切想要實(shí)現(xiàn)的好奇心下,克服學(xué)習(xí)語(yǔ)法和調(diào)試程序的各種困難,變被動(dòng)為主動(dòng)。著名計(jì)算機(jī)科學(xué)家Dijkstra曾提到:“學(xué)編程是一個(gè)由新奇到熟悉循序漸進(jìn)的過(guò)程”,繼而又說(shuō):“在這種激進(jìn)的新奇中含有愉悅的嘗試”。
3算法教學(xué)建議
由上分析可知,C語(yǔ)言教學(xué)目標(biāo)不僅僅是要求學(xué)生掌握語(yǔ)法規(guī)則或再現(xiàn)簡(jiǎn)單程序,更重要的是要求學(xué)生具備編程實(shí)踐能力。傳統(tǒng)教學(xué)方式,學(xué)生形成以語(yǔ)言為中心的思維模式,編程能力差。教師應(yīng)引導(dǎo)學(xué)生逐步形成以算法為中心的思維模式,提高編程能力。但是算法的學(xué)習(xí)和掌握并不是一蹴而就,必須依靠平時(shí)訓(xùn)練和知識(shí)積累,以下提幾點(diǎn)學(xué)習(xí)建議。
3.1以結(jié)構(gòu)化程序設(shè)計(jì)思想為核心,開拓算法設(shè)計(jì)思路
學(xué)習(xí)的認(rèn)知規(guī)律是將復(fù)雜問(wèn)題簡(jiǎn)單化,以便于初學(xué)者理解和接收。C語(yǔ)言程序設(shè)計(jì)遵循結(jié)構(gòu)化程序設(shè)計(jì)方法,該方法提高了程序的可讀性,方便了程序的調(diào)試和維護(hù),最重要的是該方法不拘泥于算法多變的外觀形式,總結(jié)出算法結(jié)構(gòu)的內(nèi)在規(guī)律。學(xué)生掌握了這種規(guī)律,面對(duì)新的問(wèn)題,很容易進(jìn)行知識(shí)結(jié)構(gòu)的遷移,復(fù)雜的編程問(wèn)題將變得簡(jiǎn)單。
結(jié)構(gòu)化程序設(shè)計(jì)包括結(jié)構(gòu)化算法設(shè)計(jì)和結(jié)構(gòu)化編程。由順序、選擇、循環(huán)三種基本結(jié)構(gòu)(或基本結(jié)構(gòu)的簡(jiǎn)單變形),按由上到下的順序排列,組成的算法稱為結(jié)構(gòu)化算法。已經(jīng)證明,結(jié)構(gòu)化算法可以解決任何問(wèn)題。對(duì)于特別復(fù)雜的編程項(xiàng)目,可以先采用自頂向下、逐步細(xì)化的分析方法,或采用模塊化設(shè)計(jì)方法,把大任務(wù)分解為容易求解的若干子任務(wù),分而治之。對(duì)于非結(jié)構(gòu)化算法,還可以用等價(jià)的結(jié)構(gòu)化算法替換。在設(shè)計(jì)好一個(gè)結(jié)構(gòu)化算法之后,就可以進(jìn)行結(jié)構(gòu)化編程,C語(yǔ)言提供了與三種基本結(jié)構(gòu)相對(duì)應(yīng)的語(yǔ)句,進(jìn)行結(jié)構(gòu)化編程也并非難事。
由上可知,既然基本結(jié)構(gòu)的順序組合,可以表示任何復(fù)雜的算法結(jié)構(gòu),并且基本結(jié)構(gòu)易于用C語(yǔ)句實(shí)現(xiàn),那么學(xué)生只要深刻理解并熟練掌握這三種基本結(jié)構(gòu),就會(huì)提高設(shè)計(jì)算法和編寫程序的能力。表1對(duì)算法的三種基本結(jié)構(gòu)進(jìn)行了總結(jié)。
說(shuō)明:算法的表示方法很多,其中N-S流程圖最適于表示結(jié)構(gòu)化算法。表1列出了算法的三種基本結(jié)構(gòu)以及相應(yīng)的N-S流程圖和語(yǔ)句的主要表示形式,學(xué)生通過(guò)該表很容易理解算法,N-S圖,編程三者之間的關(guān)系。
教師要向?qū)W生說(shuō)明,任何復(fù)雜算法都是由這三種基本結(jié)構(gòu)構(gòu)成,構(gòu)造算法其實(shí)很容易,大家之所以覺(jué)得困難,是因?yàn)闆](méi)有深刻理解A、B代表的含義。正如表中提到:A、B較靈活,既可以代表選擇結(jié)構(gòu)也可以代表循環(huán)結(jié)構(gòu),選擇結(jié)構(gòu)中還可以再套用一個(gè)循環(huán),循環(huán)結(jié)構(gòu)中還可以再嵌套循環(huán)或選擇……由于A、B代表含義不同,可能構(gòu)造出各種各樣不同的N-S圖,教師邊闡述,邊在黑板上繪制,開拓學(xué)生的思維空間。最后總結(jié):能構(gòu)造多少N-S圖,就可能存在多少算法;順序、選擇、循環(huán)是三塊基本的積木,形式多樣的算法是由它們搭建而成,用于解決實(shí)際問(wèn)題。這種教學(xué)方式,以簡(jiǎn)單的N-S圖為切入點(diǎn),學(xué)生很容易發(fā)現(xiàn)N-S圖的多樣性,算法的多樣性,實(shí)際問(wèn)題的多樣性之間的聯(lián)系,從而激發(fā)設(shè)計(jì)算法的濃厚興趣。
正確的解題算法將減少程序的邏輯錯(cuò)誤,算法用N-S圖描述出來(lái)后,利用相應(yīng)的C語(yǔ)句,學(xué)生很容易編寫出程序的主體代碼,至于其它編程細(xì)節(jié),可以引導(dǎo)學(xué)生查閱資料。這樣,學(xué)生對(duì)語(yǔ)法的學(xué)習(xí)由被動(dòng)變?yōu)橹鲃?dòng)。精心培植的幼苗,一定期盼開花結(jié)果,學(xué)生經(jīng)過(guò)一番努力,編寫出的程序代碼,也一定希望能用計(jì)算機(jī)實(shí)現(xiàn),于是上機(jī)調(diào)試也變得既有目的性,挑戰(zhàn)性又有趣味性。
3.2案例式教學(xué),一題多解,培養(yǎng)設(shè)計(jì)算法的邏輯思維
C語(yǔ)言是實(shí)踐性很強(qiáng)的一門課程,學(xué)生除了掌握結(jié)構(gòu)化程序設(shè)計(jì)方法外,還必須進(jìn)行大量編程訓(xùn)練。通常情況下,一個(gè)程序是用哪種語(yǔ)言實(shí)現(xiàn)的并不重要,關(guān)鍵在于算法設(shè)計(jì)的優(yōu)劣。計(jì)算機(jī)科學(xué)家N. Wirth教授提出了一個(gè)著名公式:算法+數(shù)據(jù)結(jié)構(gòu)=程序,由此可見程序設(shè)計(jì)的本質(zhì)在于先設(shè)計(jì)出解決問(wèn)題的算法。
教學(xué)初期,學(xué)生對(duì)語(yǔ)法知識(shí)了解甚少,教師可以根據(jù)每節(jié)課的教學(xué)目標(biāo)和內(nèi)容,精選程序例題,將重點(diǎn)放在算法的設(shè)計(jì)思路和方法上,逐步培養(yǎng)學(xué)生建立正確的思維模式。學(xué)生設(shè)計(jì)算法時(shí),常犯的錯(cuò)誤是,不會(huì)從計(jì)算機(jī)角度出發(fā),分析實(shí)際問(wèn)題內(nèi)在的邏輯關(guān)系,而習(xí)慣于按照人的思維方式設(shè)計(jì)求解過(guò)程,算法往往無(wú)法用計(jì)算機(jī)操作實(shí)現(xiàn)。因此改變學(xué)生思維習(xí)慣,培養(yǎng)邏輯分析能力,尤為重要。
實(shí)踐證明,對(duì)同一問(wèn)題,設(shè)計(jì)多種有效算法,并對(duì)算法進(jìn)行優(yōu)化選擇,有利于培養(yǎng)學(xué)生邏輯思維。通過(guò)一題多解,既拓展了學(xué)生的解題思路,增強(qiáng)了學(xué)生對(duì)同類問(wèn)題求解的熟練程度,同時(shí)又潛移默化地培養(yǎng)了學(xué)生思維的科學(xué)性、嚴(yán)謹(jǐn)性。通常,不同問(wèn)題間存在某種共性,一些基本算法掌握熟練后,學(xué)生很容易舉一反三解決不同問(wèn)題,樹立起編程的信心。
例如通過(guò)一題多解,讓學(xué)生熟練三個(gè)數(shù)由大到小排序的算法,進(jìn)而引導(dǎo)學(xué)生對(duì)一組無(wú)序數(shù)據(jù)進(jìn)行排列,用N-S圖描述算法,更能反映出不同問(wèn)題之間的聯(lián)系和區(qū)別。
再如典型例題:用100元錢買100只雞,每只公雞5元,每只母雞3元,每3只小雞1元,要求每種雞至少買一只,而且必須是整只,問(wèn)各種雞各買多少只?
對(duì)該問(wèn)題設(shè)計(jì)多種算法,既幫助學(xué)生熟悉了循環(huán)語(yǔ)句,同時(shí)通過(guò)對(duì)各種算法進(jìn)行評(píng)價(jià),學(xué)生又深刻體會(huì)到算法設(shè)計(jì)的優(yōu)劣對(duì)程序執(zhí)行效率的影響。經(jīng)過(guò)這種長(zhǎng)期訓(xùn)練,學(xué)生求解問(wèn)題時(shí),不僅會(huì)注意算法的正確性,也會(huì)注重思維的嚴(yán)謹(jǐn)性。一題多解既培養(yǎng)了學(xué)生創(chuàng)造性思維,又訓(xùn)練了邏輯思維,是提高算法設(shè)計(jì)能力的有效方法。
3.3算法帶動(dòng)語(yǔ)法學(xué)習(xí),全面提高編程能力
在編程訓(xùn)練過(guò)程中,學(xué)生不僅要積累設(shè)計(jì)正確,高效算法的經(jīng)驗(yàn),而且隨著課程內(nèi)容的不斷豐富,還要能將各種算法轉(zhuǎn)化為可執(zhí)行程序,完成整個(gè)結(jié)構(gòu)化程序設(shè)計(jì)過(guò)程。
以往教學(xué)模式過(guò)多重視語(yǔ)句命令格式,教學(xué)內(nèi)容繁瑣,學(xué)生需要識(shí)記的知識(shí)多,并且不易體會(huì)其用途,容易失去學(xué)習(xí)興趣。如果在教學(xué)過(guò)程中,教師采用一些方法,充分利用學(xué)生對(duì)算法的理解和掌握,激發(fā)學(xué)習(xí)語(yǔ)法的興趣,將取得好的教學(xué)效果。
首先,面對(duì)編程問(wèn)題,如果學(xué)生明晰解題思路,在結(jié)構(gòu)化程序設(shè)計(jì)思想的指導(dǎo)下,會(huì)很快設(shè)計(jì)出算法的N-S圖。由前可知,算法是由順序、選擇、循環(huán)三種基本結(jié)構(gòu)構(gòu)成,表1只是簡(jiǎn)單地列出了三種基本結(jié)構(gòu)的C語(yǔ)句實(shí)現(xiàn),教師應(yīng)廣泛搜集并認(rèn)真挑選典型例題,幫助學(xué)生全面掌握三種基本結(jié)構(gòu)的各種語(yǔ)法表示。這樣,學(xué)生根據(jù)算法的N-S圖,就會(huì)很容易編寫出程序的主體代碼。
其次,教學(xué)初期,采用案例式教學(xué),注重培養(yǎng)學(xué)生的算法設(shè)計(jì)能力,學(xué)生的語(yǔ)法知識(shí)比較薄弱,若要求他們將算法的N-S圖完全轉(zhuǎn)換成計(jì)算機(jī)語(yǔ)言,會(huì)遇到較多困難。如果教師能認(rèn)真解析C語(yǔ)言知識(shí),將教學(xué)內(nèi)容有機(jī)組織起來(lái)(見2.1所述),再現(xiàn)在學(xué)生面前,那么學(xué)生在迫切想要實(shí)現(xiàn)算法的心理之下,借助腦海中的知識(shí)體系,會(huì)很容易尋找到相關(guān)章節(jié),查閱還未曾系統(tǒng)學(xué)習(xí)的語(yǔ)法內(nèi)容,獨(dú)自完成編程過(guò)程。這樣既增強(qiáng)了學(xué)生的學(xué)習(xí)自主性,學(xué)生在解決問(wèn)題的同時(shí),又深刻體會(huì)到語(yǔ)句的用途和功能,從而激發(fā)出強(qiáng)烈的編程興趣。
最后,建議教師按照總體教學(xué)目標(biāo)組織教學(xué),制定每節(jié)課的語(yǔ)法教學(xué)任務(wù),針對(duì)教學(xué)任務(wù)挑選例題,通過(guò)對(duì)案例的分析講解,一方面幫助學(xué)生積累設(shè)計(jì)算法的經(jīng)驗(yàn);另一方面,加強(qiáng)學(xué)生對(duì)算法所涉及語(yǔ)法內(nèi)容的理解,掌握和應(yīng)用,學(xué)生只有正確理解并熟練掌握每一個(gè)基本概念,編程時(shí)才會(huì)少犯語(yǔ)法錯(cuò)誤,從而減少不必要的程序調(diào)試,逐漸樹立編程的信心。
4結(jié)束語(yǔ)
C語(yǔ)言是計(jì)算機(jī)基礎(chǔ)教育的重要組成部分,教學(xué)目標(biāo)在于培養(yǎng)學(xué)生的編程能力。多年來(lái),教學(xué)模式一直圍繞語(yǔ)法體系,學(xué)生學(xué)習(xí)興致不高,分析和解決實(shí)際問(wèn)題的能力差。經(jīng)過(guò)多年教學(xué)與實(shí)踐,本文倡導(dǎo)算法為先的教學(xué)模式,以結(jié)構(gòu)化程序設(shè)計(jì)思想為指導(dǎo),通過(guò)案例式教學(xué),提高學(xué)生算法設(shè)計(jì)能力;利用學(xué)生對(duì)算法的理解和掌握促進(jìn)語(yǔ)法學(xué)習(xí),進(jìn)而提高學(xué)生將算法轉(zhuǎn)換為計(jì)算機(jī)語(yǔ)言的能力;算法和編程能力的提高,將有效減少程序中的邏輯錯(cuò)誤和語(yǔ)法錯(cuò)誤,降低調(diào)試難度。由此可見,算法為先的教學(xué)模式,有利于提高學(xué)生的程序設(shè)計(jì)水平。
參考文獻(xiàn):
[1] 譚浩強(qiáng). C語(yǔ)言程序設(shè)計(jì)[M]. 北京:清華大學(xué)出版社,2000.
[2] Edsger W. Dijkstra. On the Cruelty of Really Teaching Computing Science[J]. Comm.ACM,1989(32):1398-1404.
[3] 鐘頻. 高級(jí)語(yǔ)言程序設(shè)計(jì)的精髓—算法設(shè)計(jì)[J]. 株洲師范高等??茖W(xué)校學(xué)報(bào),2005(5):51-53.
[4] 陳元琰. 程序設(shè)計(jì)過(guò)程中“循環(huán)結(jié)構(gòu)”一節(jié)的教學(xué)方法[J]. 高教論壇,2004(1):76-78.