文章編號(hào):1672-5913(2008)18-0105-02
摘要:本文在分析了C語言程序設(shè)計(jì)課程的教學(xué)現(xiàn)狀和教學(xué)困境的基礎(chǔ)上,對(duì)比自然語言和程序設(shè)計(jì)語言的共性以及C語言的特殊性,提出了“從概念入手,側(cè)重程序閱讀和程序設(shè)計(jì)能力培養(yǎng)”而非“語法研究”的教學(xué)角度。
關(guān)鍵詞:C語言;程序設(shè)計(jì);教學(xué)內(nèi)容;教學(xué)角度
中圖分類號(hào):G64 文獻(xiàn)標(biāo)識(shí)碼:A
1教學(xué)現(xiàn)狀
在高等學(xué)校的本科教育中,“C語言程序設(shè)計(jì)”幾乎成了所有專業(yè)的必開課程,從計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程、網(wǎng)絡(luò)工程等相關(guān)專業(yè),到電子信息類理工科各專業(yè),乃至理工科院校的所有非計(jì)算機(jī)專業(yè),有的是專業(yè)基礎(chǔ)課,有的是公共必修基礎(chǔ)課,有的是“非計(jì)算機(jī)專業(yè)的計(jì)算機(jī)基礎(chǔ)課”。只是課程名稍有差異,常見的有“C語言程序設(shè)計(jì)”、“高級(jí)語言程序設(shè)計(jì)”、“C語言”、“C程序設(shè)計(jì)”、“結(jié)構(gòu)化程序設(shè)計(jì)”等。無論叫什么樣的課程名,也無論是哪類專業(yè),其課程的教學(xué)要求和教材選用卻無太大差別,只是課時(shí)分配差異較大。
從網(wǎng)絡(luò)調(diào)查的16所不同類型高校的“C語言程序設(shè)計(jì)”教學(xué)大綱看,普遍都包含“通過本課程的學(xué)習(xí),使學(xué)生了解有關(guān)程序設(shè)計(jì)的基本概念、術(shù)語及C語言的特點(diǎn),掌握C語言基本數(shù)據(jù)類型、語法規(guī)則、程序控制結(jié)構(gòu)、常用的標(biāo)準(zhǔn)庫函數(shù),培養(yǎng)學(xué)生的程序設(shè)計(jì)技能,初步積累編程經(jīng)驗(yàn)”的教學(xué)基本要求;約百分之八十左右的“C語言程序設(shè)計(jì)”課程都選用由譚浩強(qiáng)主編、清華大學(xué)出版社出版的“C程序設(shè)計(jì)”作為主教材;課時(shí)分配從30~108課時(shí)不等,其中80課時(shí)以上的多為應(yīng)用型本科院校的計(jì)算機(jī)相關(guān)專業(yè)以及綜合性大學(xué)的非計(jì)算機(jī)專業(yè),理論課時(shí)與實(shí)驗(yàn)課時(shí)的比例一般為1:1到1:1.2。與此同時(shí),其他專業(yè)基礎(chǔ)課(如計(jì)算機(jī)組成原理、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)等)的課時(shí)一般為54課時(shí),最多不超過72學(xué)時(shí)。相比之下,“C語言程序設(shè)計(jì)”所占課時(shí)是其他專業(yè)基礎(chǔ)課的1.5倍至2倍。
從教學(xué)目的看,非計(jì)算機(jī)專業(yè)的“C語言程序設(shè)計(jì)”課程主要目的是“掌握語法規(guī)則和程序結(jié)構(gòu),具備一定的程序設(shè)計(jì)能力”,而計(jì)算機(jī)相關(guān)專業(yè)的“C語言程序設(shè)計(jì)”課的教學(xué)目的則要分為三個(gè)層次,一是使學(xué)生全面理解計(jì)算機(jī)程序設(shè)計(jì)語言的基本內(nèi)容和結(jié)構(gòu);二是通過算法掌握程序設(shè)計(jì)的基本方法和步驟,并具備一定的程序設(shè)計(jì)能力;三是為后續(xù)課程的算法描述和其他程序設(shè)計(jì)語言的學(xué)習(xí)奠定基礎(chǔ)。
2教學(xué)誤區(qū)
從以上的教學(xué)現(xiàn)狀(特別是課時(shí)分配)看,長期以來,“C語言程序設(shè)計(jì)”的課程教學(xué)存在“教學(xué)內(nèi)容背離教學(xué)要求和教學(xué)目的”的誤區(qū),主要表現(xiàn)在教材誤區(qū)、講授誤區(qū)和考核誤區(qū)三個(gè)方面。
2.1教材誤區(qū)
國內(nèi)高校的“C語言程序設(shè)計(jì)”課大多選用譚浩強(qiáng)主編、清華大學(xué)出版社出版的“C程序設(shè)計(jì)”[1]為主教材,目前使用的是2005年7月修訂出版的第三版,教材共363頁,主體內(nèi)容分為14章,其中,第3章的數(shù)據(jù)類型與表達(dá)式占用30頁,第4章的格式輸入輸出占用12頁,前9章共占用218頁,后5章共占用145頁。占用如此大篇幅的原因是教材中除了介紹相關(guān)語法格式外,還增加了相當(dāng)多“特殊格式”和“特殊情況”的解釋和說明,因此,該教材的最大優(yōu)點(diǎn)就是“內(nèi)容詳盡、解釋清晰”。然而,對(duì)于初學(xué)者來說,學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)語言就是為了“為計(jì)算機(jī)描述求解問題的過程”,過于詳細(xì)但又遠(yuǎn)離現(xiàn)實(shí)問題的“特殊格式”和“特殊情況”的解釋,使得學(xué)習(xí)內(nèi)容復(fù)雜化,增加了程序設(shè)計(jì)語言學(xué)習(xí)的難度,誤導(dǎo)了學(xué)習(xí)者的學(xué)習(xí)重點(diǎn),由此也賦予了該教材無法掩飾的缺點(diǎn),那就是教材編寫的指導(dǎo)思想和教材內(nèi)容的組織脫離了高校各專業(yè)“C語言程序設(shè)計(jì)”課程的教學(xué)目標(biāo),過分強(qiáng)調(diào)語法細(xì)節(jié)而忽略了程序設(shè)計(jì)語言的“正向表達(dá)能力”的應(yīng)用,過分強(qiáng)調(diào)“語言的靈活性”而導(dǎo)致教材主體內(nèi)容的“復(fù)雜化”,從而誤導(dǎo)“C語言程序設(shè)計(jì)”課程的教學(xué)內(nèi)容朝著“重語法學(xué)習(xí)、輕算法描述”的“語言研究”方向發(fā)展。
2.2講授誤區(qū)
由于教材內(nèi)容的“復(fù)雜”,課堂講授自然需要較多課時(shí),教學(xué)重點(diǎn)當(dāng)然也放在了“語法研究”上。從網(wǎng)上下載的“C程序設(shè)計(jì)(第三版)”的配套教學(xué)課件以及有關(guān)院校的“C語言程序設(shè)計(jì)”教學(xué)課件的內(nèi)容組織上可以清楚的給出以上判斷。“語法研究”型的課堂講授,更加放大了教材對(duì)“C語言程序設(shè)計(jì)”課程內(nèi)容的“扭曲”程度,給學(xué)生提供了錯(cuò)誤的程序設(shè)計(jì)語言學(xué)習(xí)方法,把簡單問題復(fù)雜化,更為嚴(yán)重的是,挫傷了學(xué)生學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)語言的興趣和積極性,把本應(yīng)“主動(dòng)學(xué)習(xí)”的課程成引入了“被動(dòng)學(xué)習(xí)”的歧途,直接導(dǎo)致“懂語法、會(huì)做題,但不會(huì)編程序”的教學(xué)后果。
2.3考核誤區(qū)
多年來,“C語言程序設(shè)計(jì)”的主體考試內(nèi)容就是“語法”,無論是選擇題、填空題還是程序閱讀題,大多都無法逃脫“語法”的束縛。考試方式以筆試為主。這在某種程度上肯定了“語言研究”的教學(xué)角度,促使“C語言程序設(shè)計(jì)”的教學(xué)重點(diǎn)更向“語法研究”的方向傾斜,最終誤入“增加課時(shí),強(qiáng)化語法,還是不會(huì)編程序”的怪圈。
3應(yīng)有的教學(xué)角度
按照網(wǎng)上調(diào)查的各專業(yè)教學(xué)大綱中“培養(yǎng)具有一定程序設(shè)計(jì)能力”的教學(xué)目的,“C語言程序設(shè)計(jì)”課程的教學(xué)落腳點(diǎn)應(yīng)該更確切的理解為培養(yǎng)“能用程序設(shè)計(jì)語言描述求解問題過程”的一般程序設(shè)計(jì)者,而不是造就“全面掌握程序設(shè)計(jì)語言語法、能設(shè)計(jì)高效、難懂程序”的程序設(shè)計(jì)語言方面的“作家”。因此,“C語言程序設(shè)計(jì)”課程教學(xué)相當(dāng)于自然語言中的“基本語言能力”教學(xué),而不是“語言研究”或“高級(jí)寫作”能力培養(yǎng)。
3.1自然語言與計(jì)算機(jī)程序設(shè)計(jì)語言
計(jì)算機(jī)程序設(shè)計(jì)語言是用人和計(jì)算機(jī)都能識(shí)別的方式描述計(jì)算機(jī)求解問題過程的過程描述語言,它具有和人所使用的自然語言相同或相似的組成和結(jié)構(gòu)特點(diǎn),對(duì)于已經(jīng)掌握了至少一門自然語言(比如漢語或英語)并具備一定文化程度的人來說,學(xué)習(xí)一種計(jì)算機(jī)程序設(shè)計(jì)語言并非難事。自然語言的基本組成包括符號(hào)集合、字、詞、句、數(shù)據(jù)及其運(yùn)算規(guī)則等基本要素,學(xué)習(xí)過程包括認(rèn)識(shí)符號(hào)、發(fā)音、識(shí)字、組詞、學(xué)語法并造句、學(xué)文法并寫短文、練習(xí)寫文章等基本階段,在具備了基本的語言能力之后,擴(kuò)充詞匯量和提高寫作能力將成為終身學(xué)習(xí)的基本內(nèi)容。按照自然語言的基本組成和學(xué)習(xí)過程,也可將計(jì)算機(jī)程序設(shè)計(jì)語言的基本組成歸納為字符集、標(biāo)識(shí)符(常量、變量、保留字等)、數(shù)據(jù)類型、運(yùn)算符、表達(dá)式、語句、程序格式等基本要素,其中,字符集和數(shù)據(jù)類型是定義程序設(shè)計(jì)語言的基礎(chǔ),字符按一定規(guī)則組成標(biāo)識(shí)符,用來充當(dāng)常量名、變量名或其他標(biāo)識(shí),在自然語言中被人們公認(rèn)的特殊標(biāo)識(shí)符被賦予特定的語言含義,專門為語言系統(tǒng)所用(用戶不得再次定義其意義),稱為保留字;字符集中的特殊符號(hào)(如+、-、*、/)被賦予特定的運(yùn)算意義(如加、減、乘、除)稱為運(yùn)算符;不同數(shù)據(jù)類型的常量、變量用運(yùn)算符按一定規(guī)則連接起來組成的式子就構(gòu)成表達(dá)式;將特定的保留字與表達(dá)式等語言要素按照語法規(guī)則組合起來就形成相應(yīng)的語句;將語句按照要描述的求解問題的邏輯順序排列起來,就構(gòu)成了某種程序設(shè)計(jì)語言求解特定問題的一段程序。
3.2C語言的特殊性
一方面,C語言是程序設(shè)計(jì)語言的一種,具備一般程序設(shè)計(jì)語言的基本組成要素和結(jié)構(gòu)特點(diǎn)。另一方面,C語言能成為面向過程的結(jié)構(gòu)化程序設(shè)計(jì)語言的代表,也有其自身的特殊性。首先,C語言的數(shù)據(jù)類型極為豐富。除了基本數(shù)據(jù)類型外,還有構(gòu)造類型、指針類型、空類型和用戶自定義類型,其中,構(gòu)造類型包括數(shù)組、結(jié)構(gòu)體(struct)、共用體(union)和枚舉類型(enum)等四種數(shù)據(jù)結(jié)構(gòu)。其次,C語言具有位操作能力。除了能夠?qū)Ω黝愖兞窟M(jìn)行操作外,C語言還具備“按位”進(jìn)行邏輯“與”、“或”、“非”、“異或”運(yùn)算和“左”、“右”移位運(yùn)算,這使得C語言具備了更強(qiáng)的系統(tǒng)開發(fā)能力。第三,C語言具有顯著的結(jié)構(gòu)化程序設(shè)計(jì)能力,并通過完整的函數(shù)定義來實(shí)現(xiàn)。第四,C語言的最大特點(diǎn)就是“語法限制不嚴(yán),解釋靈活”。第五,C語言允許直接訪問物理地址,可直接對(duì)硬件端口進(jìn)行操作。第六,C語言沒有輸入/輸出語句,信息輸入/輸出功能由標(biāo)準(zhǔn)函數(shù)庫中相應(yīng)的I/O函數(shù)來完成。
C語言的這些特殊性,決定了C語言的教、學(xué)過程不同于其他程序設(shè)計(jì)語言的教學(xué)過程。
3.3C語言的教學(xué)角度
根據(jù)一般程序設(shè)計(jì)語言的基本組成與結(jié)構(gòu)特點(diǎn),結(jié)合C語言的特殊性,“C語言程序設(shè)計(jì)”課程的教學(xué)角度應(yīng)該是:從介紹程序設(shè)計(jì)語言的基本概念入手,重點(diǎn)介紹語言的“正
向”設(shè)計(jì)功能而非“特殊格式”或“特殊語法”說明,側(cè)重學(xué)生的程序閱讀和程序設(shè)計(jì)能力培養(yǎng),從教學(xué)內(nèi)容的廣度和深度兩個(gè)方面,恰當(dāng)把握教學(xué)角度。
“C語言程序設(shè)計(jì)”課程的內(nèi)容可分為三個(gè)基本模塊,教學(xué)過程從第一個(gè)模塊切入,逐漸擴(kuò)展到第二和第三個(gè)模塊。第一個(gè)模塊可稱為“程序設(shè)計(jì)語言公共模塊”,主要包括程序設(shè)計(jì)語言的基本概念、程序設(shè)計(jì)語言的基本要素(字符集、標(biāo)識(shí)符、常量變量以及保留字、基本數(shù)據(jù)類型、運(yùn)算符、表達(dá)式、語句與控制結(jié)構(gòu)、程序結(jié)構(gòu)以及程序書寫規(guī)范等)以及輸入/輸出格式等內(nèi)容;第二個(gè)模塊是C語言的主體,主要包括函數(shù)、數(shù)組、指針、文件等;第三個(gè)模塊是高級(jí)編程內(nèi)容,主要包括結(jié)構(gòu)體(struct)、共用體(union)、枚舉類型(enum)以及用戶自定義類型等。
在教學(xué)深度方面,各模塊的教學(xué)重點(diǎn)應(yīng)放在“規(guī)范的語法描述和直觀易懂而且正確的語義表述上”,避免涉及各種過細(xì)的“不符合人類閱讀習(xí)慣”的語義描述,暫時(shí)避開“特殊格式”或“特殊情況”的糾纏,擺脫“研究語法”的錯(cuò)誤向?qū)АT诖嘶A(chǔ)上,第一模塊的教學(xué)可與自然語言相比對(duì),通過學(xué)生已有的自然語言學(xué)習(xí)經(jīng)驗(yàn)和語言要素,使學(xué)生快速建立程序設(shè)計(jì)語言的基本概念,正確理解程序設(shè)計(jì)語言的基本要素及其關(guān)系,掌握基本語法和程序基本控制結(jié)構(gòu)(順序、選擇、循環(huán)),并通過算法歸納求解問題的過程,正確理解算法不同描述方式(自然語言、傳統(tǒng)流程圖、N-S流程圖、偽代碼、程序設(shè)計(jì)語言)的作用和差異,特別是從“問題”到“程序”的漸進(jìn)轉(zhuǎn)化過程,從而培養(yǎng)學(xué)生的基本程序設(shè)計(jì)能力。通過第二模塊的教學(xué),使學(xué)生明確函數(shù)、數(shù)組、指針、文件等概念和作用,掌握它們的定義和引用方法,能進(jìn)行相應(yīng)數(shù)據(jù)類型的編程,進(jìn)而掌握用函數(shù)定義的結(jié)構(gòu)化模塊程序設(shè)計(jì)的方法;通過第三個(gè)模塊的教學(xué),將程序的數(shù)據(jù)處理能力擴(kuò)展到結(jié)構(gòu)體、共用體、枚舉類型以及用戶自定義類型等復(fù)雜數(shù)據(jù)類型的處理上來,通過恰當(dāng)?shù)睦討?yīng)用這些數(shù)據(jù)類型,向?qū)W生展示C語言強(qiáng)有力的數(shù)據(jù)表示和處理能力。
另外,可以將C語言中的“語法靈活性”和不同部分的各種“特殊情況”分類總結(jié),歸納整理成“語言參考手冊”等形式,以附錄的形式提供給學(xué)生,以便需要時(shí)“備查”。這樣既可節(jié)省教學(xué)課時(shí),又可向?qū)W生提供學(xué)習(xí)語言的主動(dòng)權(quán)。
3.4教學(xué)策略和方法
“C語言程序設(shè)計(jì)”屬語言類課程,教學(xué)過程充滿了逐步完善和熟練的基本特點(diǎn),因此,從教學(xué)安排的策略上要分重點(diǎn)、分階段逐步進(jìn)行,每個(gè)階段的教學(xué)方法應(yīng)該采用建立在一定基礎(chǔ)上的有重點(diǎn)的“部分教學(xué)法”,以核心內(nèi)容為基礎(chǔ),向外逐漸延伸,部分學(xué)習(xí),漸進(jìn)掌握。盡可能避免不分主次、不論難易、不顧急緩,盲目一次性掃清各類知識(shí)點(diǎn)的“地毯式”教授方法或?qū)W習(xí)方法,同時(shí)強(qiáng)調(diào)自學(xué)和上機(jī)驗(yàn)證,強(qiáng)化在特定環(huán)境下(如Turbo C++ 3.0)的程序設(shè)計(jì)訓(xùn)練,做到“精講多練[2]”,從小程序練起,逐漸過渡到求解較大或?qū)嶋H問題的程序設(shè)計(jì)上來。
4結(jié)束語
從目前的教學(xué)現(xiàn)狀看,無論是計(jì)算機(jī)相關(guān)專業(yè),還是理工科的電子信息類專業(yè),乃至綜合性大學(xué)的非計(jì)算機(jī)專業(yè),“C語言程序設(shè)計(jì)”的課程教學(xué)均占有重要的教學(xué)地位,在全面提高教學(xué)質(zhì)量和教學(xué)效率的今天,不同類型專業(yè)結(jié)合自身優(yōu)勢和程序設(shè)計(jì)語言類課程的特點(diǎn),選擇合適的角度組織和實(shí)施“C語言程序設(shè)計(jì)”課程的教學(xué)活動(dòng)非常重要,而且很有必要。筆者的教學(xué)實(shí)踐證明,避開“語法研究”的程序設(shè)計(jì)教學(xué)不僅可減少課時(shí),更可提高學(xué)生利用程序設(shè)計(jì)語言“表述求解問題過程”的能力。
參 考 文 獻(xiàn)
[1] 譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M]. 北京:清華大學(xué)出版社,2005:1-363.
[2] 雷學(xué)生,胡多.C語言程序設(shè)計(jì)教學(xué)方法探討[J]. 計(jì)算機(jī)教育,2006,(6).