摘要:C語言是目前廣泛使用的一門程序設(shè)計(jì)語言,C語言程序設(shè)計(jì)課程在計(jì)算機(jī)、通信等相關(guān)專業(yè)教學(xué)中占有及其重要的位置。文章分析嬰幼兒“學(xué)習(xí)語言”的過程,討論C語言程序設(shè)計(jì)課程的教學(xué)目的和教學(xué)方法,提出更重視C的庫函數(shù)學(xué)習(xí),通過程序?qū)嵗龑W(xué)習(xí)C語法的教學(xué)方法,并指出了該方法的優(yōu)點(diǎn)。
關(guān)鍵詞:C程序設(shè)計(jì);C語言;課程;教學(xué)
1概述
C語言是當(dāng)今計(jì)算機(jī)應(yīng)用中最重要且被廣泛使用的一門程序設(shè)計(jì)語言,它兼具高級(jí)和低級(jí)語言的優(yōu)點(diǎn),特別適合于編寫計(jì)算機(jī)系統(tǒng)軟件。高校的很多計(jì)算機(jī)專業(yè)課程,如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、算法設(shè)計(jì)等,多選用C語言作為教學(xué)語言。學(xué)生學(xué)好C語言,不僅是一門課和一種技能的問題,而且涉及到能否學(xué)好整個(gè)專業(yè)課。因此,C語言程序設(shè)計(jì)的教學(xué)越來越被提高到重要的位置,各校紛紛進(jìn)行C語言教學(xué)方法的改革和試點(diǎn)工作[1-3],并取得了一定的經(jīng)驗(yàn)和成績。
筆者所在高校也進(jìn)行了有益的探索[4]。在國家級(jí)教學(xué)團(tuán)隊(duì)“計(jì)算機(jī)基礎(chǔ)系列課程教學(xué)團(tuán)隊(duì)”共同確立的教改思想和指導(dǎo)原則下,各授課教師根據(jù)自己的教學(xué)經(jīng)驗(yàn),進(jìn)行了多種教學(xué)方法的嘗試,取得了良好的成果。其核心思想是,不斷加大C語言的實(shí)踐課時(shí),注重學(xué)生編程技巧和編程能力的提高。盡管如此,部分學(xué)生仍然不能很好地掌握C程序設(shè)計(jì)技術(shù)。在C語言考試中,學(xué)生更易于完成填空、選擇、判斷正誤等檢驗(yàn)“基礎(chǔ)知識(shí)”的題型,程序設(shè)計(jì)或上機(jī)編程題則完成質(zhì)量較差。直到學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)等課程時(shí),部分學(xué)生仍然難以用C語言編寫算法,這直接影響到了數(shù)據(jù)結(jié)構(gòu)等課程的教學(xué)效果,對(duì)后續(xù)課程造成了影響,甚至嚴(yán)重影響了畢業(yè)論文的進(jìn)度和質(zhì)量。
C語言是一門程序設(shè)計(jì)語言,它是程序員和計(jì)算機(jī)相互交流的語言。作為語言學(xué)習(xí),它也遵守人學(xué)習(xí)語言的最一般規(guī)律:在實(shí)踐中學(xué)習(xí)語言,重視單詞的學(xué)習(xí)和積累,重視語言的交流能力。
2像嬰幼兒學(xué)習(xí)說話一樣,學(xué)習(xí)計(jì)算機(jī)語言
嬰幼兒學(xué)習(xí)語言的方法對(duì)C語言程序設(shè)計(jì)課程的教學(xué)組織具有很大的啟示作用。
2.1跟著大人,重復(fù)學(xué)習(xí)說話
嬰兒學(xué)習(xí)說話,是從“mama、baba”開始,爸爸媽媽積極應(yīng)答,并鼓勵(lì)孩子繼續(xù)“說話”。期間沒有人在意,孩子是有意識(shí)或者是無意識(shí)的,孩子的發(fā)音是否準(zhǔn)確,只要有聲音,就給予足夠的鼓勵(lì)。之后,嬰兒繼續(xù)學(xué)習(xí)其他稱呼和各種詞匯,會(huì)說“開門、媽媽抱”等短句,直到“我要出去”等簡單的句子。這一語言學(xué)習(xí)的過程特征很明顯:跟著大人,重復(fù)說話,不在乎語法是否正確,能簡單表達(dá)意思,大人能聽懂即可。
C語言學(xué)習(xí)也一樣。教師把自己看作大人,學(xué)生就是嬰兒。從語言教學(xué)上看,不首先去強(qiáng)調(diào)語法等規(guī)則,而是教授“例子”。教師可以在課堂上重點(diǎn)講授一個(gè)又一個(gè)例子,在課堂上編譯、連接并調(diào)試運(yùn)行程序,讓學(xué)生課后去重復(fù)這些程序。這種方法可以讓學(xué)生在最短的時(shí)間內(nèi),真正“接觸”到C語言,通過老師的程序?qū)嵗陀?jì)算機(jī)實(shí)現(xiàn)對(duì)話。教師通過作業(yè),鼓勵(lì)和引導(dǎo)學(xué)生修改這些簡單的程序,并鼓勵(lì)學(xué)生獨(dú)立完成一些新的程序。這種方法使學(xué)生在剛開始上課時(shí)就接觸計(jì)算機(jī),重視學(xué)生快速和計(jì)算機(jī)建立聯(lián)系,讓學(xué)生在編輯、排錯(cuò)、調(diào)試和運(yùn)行程序的實(shí)踐過程中,和計(jì)算機(jī)對(duì)話,達(dá)到從實(shí)踐中學(xué)習(xí)的目的。
“在例子中,學(xué)習(xí)和計(jì)算機(jī)的對(duì)話,讓計(jì)算機(jī)訓(xùn)練自己?!?br/> 2.2不斷學(xué)習(xí)單詞,豐富語言的內(nèi)涵
會(huì)說話的嬰兒有了新的渴求,他需要通過不斷學(xué)習(xí),拓展自己的知識(shí)和生存空間,大人們也非常配合他,不斷教他新的“知識(shí)”,這些新知識(shí),首先就是“單詞”。嬰兒會(huì)指著電視機(jī)“啊啊”地叫,大人們教給他說“電視”,于是嬰兒學(xué)會(huì)了“電視”這個(gè)單詞。他可能說“寶寶要電視”,雖然不符合語法,但他已經(jīng)勇敢地清楚地表達(dá)了自己的需求。寶寶在大人的糾正過程中不斷學(xué)習(xí),掌握的詞匯越來越多,他也越來越具有和人交流的能力。這種能力是通過不斷學(xué)到“新詞”開始的,是不斷被大人們糾正提高的。
C語言學(xué)習(xí)也一樣。教會(huì)學(xué)生編寫基本的C程序后,接下來的工作,不是要寫復(fù)雜的“讓計(jì)算機(jī)唱歌跳舞”的程序,而是讓學(xué)生不斷掌握新詞匯,擴(kuò)大和計(jì)算機(jī)的交流范圍。在C中,這些新詞匯就是C的庫函數(shù)。C語言提供了豐富的庫函數(shù),程序員不可能脫離開這些庫函數(shù)妄談編程。以往的C教學(xué)中,可能會(huì)忽視這些庫函數(shù)的介紹,只有在課本的附錄里,才能找到他們的索引。教師課堂上的主要時(shí)間,花費(fèi)在介紹C的各種語法上。考試中,這些語法就是“基礎(chǔ)”知識(shí),這又會(huì)把學(xué)生的學(xué)習(xí)重點(diǎn),引導(dǎo)在學(xué)習(xí)和背這些語法上,無形中又忽視了實(shí)際編程能力的培養(yǎng)和鍛煉。這是造成學(xué)生不會(huì)“寫程序”重要原因。
嬰兒不認(rèn)識(shí)新事物,就無法開口說話。學(xué)生如沒有很好地掌握庫函數(shù),就難以寫程序。比如,若沒有printf()函數(shù),學(xué)生就不可能知道如何把信息顯示在屏幕上。因此,學(xué)習(xí)寫C程序,首先需要學(xué)好C的庫函數(shù)。教師在課堂上的重點(diǎn),就在于在例子中,盡可能多地使用庫函數(shù)。讓學(xué)生“見過”并“知道”有這樣的庫函數(shù)可以用,再通過編程作業(yè),促使學(xué)生掌握庫函數(shù)。庫函數(shù)就是C語言中的“單詞”,有了這些單詞,才能開始編程,和計(jì)算機(jī)“對(duì)話”。
“不僅要會(huì)和計(jì)算機(jī)說話,而且可以天南海北地聊?!?br/> 2.3多說多練
學(xué)會(huì)說話的嬰幼兒對(duì)這個(gè)世界充滿了好奇,他已經(jīng)長大了。他不僅和他的爸爸媽媽說話,他還要和其他人說。他要去上幼兒園,可以和老師說話,可以和幼兒園的其他小朋友說話,他的語言能力不斷進(jìn)步,他會(huì)唱歌,會(huì)背唐詩、三字經(jīng)、弟子規(guī),他已經(jīng)像個(gè)大人了。
學(xué)生學(xué)習(xí)C語言也一樣。最開始模仿老師的程序,編寫程序,按照老師布置的作業(yè)練習(xí)編程,最后可以根據(jù)自己的興趣,編寫一些應(yīng)用程序。學(xué)生解決問題的能力越來越強(qiáng),可以排除程序中的錯(cuò)誤,掌握調(diào)試程序的方法,逐漸能夠書寫小規(guī)模的程序了。
這些能力的提高和培養(yǎng)不是教師在課堂上能夠完成的,需要學(xué)生在實(shí)踐中提高。此時(shí)教師可以使用特殊資源了,即上機(jī)課時(shí)。高校中C語言的課時(shí)一般由3部分構(gòu)成:課堂學(xué)時(shí)、課后機(jī)時(shí)和專門的上機(jī)課時(shí)。利用上機(jī)課時(shí),教師可以布置小規(guī)模的系統(tǒng)編程作業(yè),讓學(xué)生去完成。通過這種作業(yè),讓學(xué)生系統(tǒng)掌握C的編程知識(shí),提高程序設(shè)計(jì)能力和水平。
“多寫多練,可以和計(jì)算機(jī)討論問題。”
2.4上學(xué)后,我們?cè)賹W(xué)語法
嬰幼兒長成了小學(xué)生,他要開始上學(xué)了。在學(xué)校,他開始學(xué)習(xí)課文,通過課文認(rèn)字、認(rèn)詞、認(rèn)成語,寫字、寫詞、寫句子,他開始鍛煉寫作文。不知不覺中,他讀了很多書,從童話開始,到小說、散文、詩歌,最后是名著。他開始系統(tǒng)學(xué)習(xí)語法,主謂賓定狀補(bǔ),不勝枚舉。
C語言的學(xué)習(xí)也沒有止步。實(shí)際上,C語言程序設(shè)計(jì)課程只能完成上述2.1~2.3部分的內(nèi)容,這些部分教會(huì)了學(xué)生寫程序,而不是教會(huì)了學(xué)生C語言的語法。C語言的語法,可以融于課堂的例子中,通過程序設(shè)計(jì)和調(diào)試,直觀地介紹C的語法,通過程序練習(xí)和調(diào)試,由計(jì)算機(jī)來告訴學(xué)生,怎樣符合規(guī)則,怎樣不符合。對(duì)于一般的語法,要求學(xué)生自學(xué)。C程序中的眾多語法,比如C語言從main()函數(shù)開始執(zhí)行、變量定義位置、注釋寫法、函數(shù)命名、參數(shù)以及函數(shù)返回、變量作用域、運(yùn)算符的優(yōu)先級(jí)等,多是規(guī)則,并不難理解,需要學(xué)生記住并掌握,而單調(diào)的看書和記憶,效果遠(yuǎn)不如在程序排錯(cuò)和調(diào)試過程中學(xué)習(xí)。
通過程序?qū)嵺`和例子學(xué)習(xí)語法,而不是只是在課堂上講授語法。這樣,當(dāng)學(xué)生有了一定的編程能力后,再回過頭去研究語法,可以更好地提高對(duì)C語言的理解水平。如果在一開始就把重點(diǎn)放在語法上,可能反而無法掌握C程序設(shè)計(jì)技術(shù)。
實(shí)際上,C的一些語法細(xì)節(jié)在實(shí)際工作中是不常用的。例如,判斷閏年的邏輯表達(dá)式:( Year%4==0 && year%100!=0 )||year%400==0,其中涉及到運(yùn)算符、運(yùn)算表達(dá)式以及運(yùn)算符優(yōu)先級(jí)等問題。若要計(jì)算該表達(dá)式的值,當(dāng)然需要記住表達(dá)式的優(yōu)先級(jí)順序等語法知識(shí)。但實(shí)際工作中,是不鼓勵(lì)把程序?qū)懗赡欠N樣子的,實(shí)際工作中,要求程序書寫清晰明了,簡單易懂,強(qiáng)調(diào)程序的可讀性。因此,上述代碼可以寫為:
(( ( year%4 == 0 ) && ( year%100 != 0 )) || ( year%400 == 0 ))
“不僅讓計(jì)算機(jī)能聽懂,而且要易于聽懂。”
2.5學(xué)無止境
經(jīng)過了中學(xué)階段的學(xué)習(xí),孩子已經(jīng)完全掌握了“漢語”這一門語言,此后能否成為編輯、記者、作家、詩人,則需要更多的學(xué)習(xí)和鍛煉。他需要研讀名著,體驗(yàn)生活,筆耕不輟。
C語言也如此。C語言課程結(jié)束后,學(xué)生可以通過參加課外興趣小組、各種計(jì)算機(jī)編程競賽、后續(xù)的專業(yè)課學(xué)習(xí)、畢業(yè)設(shè)計(jì)等,不斷錘煉自己用C語言進(jìn)行程序設(shè)計(jì)的能力。他可能逐漸接觸到C語言課程永遠(yuǎn)無法講授的東西,比如socket編程、進(jìn)程與多線程、并發(fā)與競態(tài)、Linux驅(qū)動(dòng)程序、Windows驅(qū)動(dòng)程序、研究開源代碼等。他成了一名高級(jí)程序員、資深程序員、專家,他開始“用Word寫程序”。
“計(jì)算機(jī)編程,一個(gè)玩具(計(jì)算機(jī))的更高級(jí)的玩法(寫軟件)而已?!?br/> 3結(jié)語
C語言是一門程序設(shè)計(jì)語言,教學(xué)的目標(biāo)在于讓學(xué)生“掌握”C語言。所謂掌握,不僅指C的基礎(chǔ)知識(shí)、語法結(jié)構(gòu)等,最重要的目的是會(huì)用C語言寫程序。C的其他所有知識(shí),都在程序編寫和調(diào)試中得到學(xué)習(xí)和掌握。
本文根據(jù)嬰幼兒學(xué)習(xí)語言的特點(diǎn),提出了C語言的教學(xué)思想和教學(xué)方法,其主要思想為:教學(xué)目的在于教會(huì)學(xué)生用C語言寫程序,讓學(xué)生在不斷實(shí)踐中提高程序設(shè)計(jì)的水平;課堂上,主要通過程序講授編程的方法和技巧,強(qiáng)調(diào)C語言的庫函數(shù)學(xué)習(xí)及其使用方法,通過程序重點(diǎn)介紹難點(diǎn)和重要語法知識(shí),一般語法由學(xué)生自學(xué);強(qiáng)調(diào)大量的C程序鍛煉,在C語言的編寫、調(diào)試中,由計(jì)算機(jī)教會(huì)學(xué)生編寫程序,在編寫程序和調(diào)試程序中,學(xué)習(xí)C語言的語法。
致謝:本論文得到了國家級(jí)教改項(xiàng)目“國家級(jí)教學(xué)團(tuán)隊(duì)——計(jì)算機(jī)基礎(chǔ)系列課程教學(xué)團(tuán)隊(duì)”的支持。
參考文獻(xiàn):
[1] 李莉. C語言程序設(shè)計(jì)的教學(xué)改革[J]. 計(jì)算