發(fā)布時間:2022-03-17 13:31:36
序言:寫作是分享個人見解和探索未知領(lǐng)域的橋梁,我們?yōu)槟x了8篇的c語言程序設(shè)計樣本,期待這些樣本能夠為您提供豐富的參考和啟發(fā),請盡情閱讀。
關(guān)鍵詞:教學(xué)內(nèi)容;教學(xué)手段;教學(xué)方法;考核方式
C語言是早期最經(jīng)典、最強大的面向過程的程序設(shè)計語言之一。雖然現(xiàn)在面向過程已經(jīng)全面轉(zhuǎn)向面向?qū)ο?,但是C本身的中級語言的設(shè)計理念以及對現(xiàn)有VC/C#等語言的深刻影響,使其至今仍是程序設(shè)計入門的首選語言,也是工科院校計算機專業(yè)學(xué)生接觸的第一門程序設(shè)計語言。對于計算機類專業(yè)學(xué)生來說,一旦掌握了C語言,就可以較為輕松地學(xué)習其他任何一種程序設(shè)計語言,為后續(xù)的面向?qū)ο蟪绦蛟O(shè)計以及Java程序設(shè)計等語言的學(xué)習打下基礎(chǔ);對于其他非計算機專業(yè)的工科學(xué)生來說,比如電子、機電專業(yè)來說,該課程為學(xué)生用計算機編程解決實際問題提供了方法,是學(xué)習單片機技術(shù)教學(xué)的基礎(chǔ)和重要工具。
一、C語言教學(xué)中面臨的問題
C語言程序設(shè)計是一門基于dos操作系統(tǒng)下的面向過程的程序設(shè)計語言,隨著面向?qū)ο笳Z言的開發(fā),C語言在界面交互性上遜色不少,作品上也不如Flash、三維動畫效果吸引眼球,難學(xué)、難懂、難以應(yīng)用的課程,對學(xué)生越來越缺乏吸引力。針對這種狀況筆者認為,更新教育觀念、探索新的教學(xué)模式才是根本出路。筆者根據(jù)多年的教學(xué)經(jīng)驗,對C語言程序設(shè)計課程從教學(xué)內(nèi)容、教學(xué)手段、教學(xué)方法、考核方法方面進行了一系列的創(chuàng)新改革。教學(xué)內(nèi)容主要解決如何調(diào)動學(xué)生積極性,激發(fā)學(xué)生創(chuàng)新能力,如何提高學(xué)生的創(chuàng)新能力、實踐能力、研究能力、發(fā)現(xiàn)問題和解決問題能力等綜合素質(zhì);教學(xué)方法主要解決如何實現(xiàn)“以人為本”,分層次教育,如何通過引導(dǎo)、啟發(fā)等方法,激發(fā)學(xué)生的發(fā)散性思維。同時要利用目前課堂和實驗教學(xué)在培養(yǎng)學(xué)生創(chuàng)新能力和實踐能力方面的優(yōu)點,利用大學(xué)生實訓(xùn)基地,為學(xué)生的創(chuàng)新和實踐能力的鍛煉和培養(yǎng)提供一個良好的平臺。
二、教學(xué)內(nèi)容的創(chuàng)新
課程內(nèi)容的選取與組織是課程教學(xué)改革的基礎(chǔ)。人才培養(yǎng)方案對C語言程序設(shè)計教學(xué)內(nèi)容進行重新整合,把課程學(xué)習劃分成培養(yǎng)學(xué)生的基本程序設(shè)計能力和培養(yǎng)學(xué)生的專業(yè)程序設(shè)計能力兩個階段。
第一階段安排在大一第一學(xué)期,主要針對沒有程序設(shè)計經(jīng)驗的大一新生,重點講授C語言的基本知識,包括三種基本結(jié)構(gòu)、數(shù)組、函數(shù)的概念。在第一階段教學(xué)中,筆者采用案例教學(xué)方法結(jié)合具體的程序?qū)嵗?,?chuàng)設(shè)情境,引導(dǎo)學(xué)生自己總結(jié)掌握C語言的基本語法和程序設(shè)計的基本方法。第一階段的學(xué)習結(jié)束的時候,學(xué)生可以具備基本的程序設(shè)計能力,獨立編寫具有初等難度、幾十行的程序,并且能夠較順利地完成程序調(diào)試與測試。第二階段教學(xué)放在大一第二學(xué)期初,針對具備基礎(chǔ)程序設(shè)計能力的學(xué)生,重點培養(yǎng)學(xué)生的專業(yè)程序設(shè)計能力。在第二階段的教學(xué)中,以學(xué)生為主體、以教師為引導(dǎo),采用國家火炬計劃河北省軟件人才工程實訓(xùn)課程,使學(xué)生融會貫通所學(xué)知識,完成一個具體的項目,以達到提高學(xué)生程序開發(fā)能力的目的。迄今為止,學(xué)生完成的項目包括“銀行儲蓄管理系統(tǒng)”“彩票信息查詢系統(tǒng)”。教學(xué)實踐證明,這種理論和實踐技能并行的教學(xué)模式,更加有助于學(xué)生的創(chuàng)新能力的提高,使學(xué)生在不斷實踐中掌握技能,在技能學(xué)習中提高基礎(chǔ)理論。
三、教學(xué)手段的創(chuàng)新
在學(xué)習過程中除了發(fā)揮教師的引導(dǎo)作用,還需要充分調(diào)動學(xué)生的參與主動性。在授課期間靈活采用多種教學(xué)手段,如:自學(xué)、演示、對比、課堂提問、學(xué)生演練和討論等,通過不同方法,尋找創(chuàng)意思維“契機”,安排創(chuàng)意鋪墊內(nèi)容,培育學(xué)生的創(chuàng)意萌芽,營造創(chuàng)意環(huán)境,引發(fā)學(xué)生爭鳴,為學(xué)生提供更多的思維空間,誘發(fā)學(xué)生的思維靈感。例如,在教學(xué)中講解“循環(huán)結(jié)構(gòu)的循環(huán)嵌套”的時候,提出馬克思手稿中的數(shù)學(xué)題的案例:偉大的思想家馬克思的手稿中有這樣一道有趣的數(shù)學(xué)題:有30個人,其中有男人、女人和小孩。他們在一家飯館中吃飯,共花費50先令。如果每個男人吃飯要花3先令,女人要花2先令,每個小孩要花1先令,問男人、女人、小孩各多少人?先提出問題,引導(dǎo)學(xué)生分析、討論案例,提問學(xué)生運用數(shù)學(xué)知識完成案例提出的問題需要進行哪些操作,這樣學(xué)生就會比較有興趣,課堂氣氛就活躍起來。然后幫助學(xué)生從案例分析中理解并掌握什么是多重循環(huán),并且如何使用雙重循環(huán)解決問題,最終完成程序的編寫。
在學(xué)習的第二階段采用開放式訓(xùn)練教育方式,利用專題設(shè)計和課外指導(dǎo)方式,鼓勵學(xué)生課外自主進行訓(xùn)練。如:完成的項目“彩票信息查詢系統(tǒng)”,教師提出設(shè)計方案,學(xué)生完成基本功能以后,自己可以對其他功能進行完善。
四、教學(xué)方法的創(chuàng)新
課程每個章節(jié)內(nèi)容結(jié)構(gòu)主要由三部分組成:
知識點:介紹本章需要掌握的知識或技術(shù)。
應(yīng)用案例:介紹本章知識應(yīng)用的案例。
創(chuàng)新訓(xùn)練:針對具體的問題,應(yīng)用本章技術(shù)來完成知識點的應(yīng)用。
在整個教學(xué)過程中,教師采用框架式教學(xué),像建筑工程師修建筑一樣,先采用精講的方式,讓學(xué)生建立整門課程的知識框架;接著通過案例教學(xué)、項目式教學(xué)等多種教學(xué)方式,讓學(xué)生逐步去進行細節(jié)知識點的填充;最后通過綜合訓(xùn)練方式,完成整門課程的學(xué)習。
例如,在講解C語言程序設(shè)計中的函數(shù)時,搭建出例如綜合排序等程序的框架,給學(xué)生留出函數(shù),讓學(xué)生自由開拓思想,獨立完成一些小型實例的編程,經(jīng)過具體知識點的訓(xùn)練后,還要重點進行綜合知識的應(yīng)用訓(xùn)練,開展一系列的創(chuàng)新應(yīng)用,以達到知識綜合運用和培養(yǎng)創(chuàng)新能力的目的。
五、考核方式的創(chuàng)新
傳統(tǒng)的C語言程序設(shè)計考核模式一般以標準化的筆試題為主,這種考核方式側(cè)重語法知識的考核,忽視編程實踐能力的培養(yǎng)。為此,筆者改革傳統(tǒng)的考核方式,將考核分為平時實驗和期末考核兩部分。平時實驗成績考核的是學(xué)生每一章知識,實訓(xùn)作業(yè)就是在每一章節(jié)結(jié)束的時候,布置相關(guān)的習題,學(xué)生利用業(yè)余時間編程,并且在實訓(xùn)期間進行調(diào)試,調(diào)試成功后上傳到服務(wù)器上。期末考核成績采用的是教研室開發(fā)的上機考試系統(tǒng)。上機考試系統(tǒng)模擬C語言二級考試建立了知識面齊全、題量充足、難易度合理的試題庫,采取隨機抽題的形式重點考查學(xué)生的程序設(shè)計能力和程序調(diào)試能力。這種考核方式督促學(xué)生在平時學(xué)習中加強對編程舉一反三的實踐環(huán)節(jié)。實踐證明,這樣不僅能有效培養(yǎng)學(xué)生的實踐編程能力,還激發(fā)了學(xué)生動手實踐解決問題的興趣。
總之,經(jīng)過不斷的摸索與實踐,通過以上的教學(xué)方法與教學(xué)手段的改革和實踐,不僅提高了學(xué)生的學(xué)習興趣,讓學(xué)生從枯燥無味的語言學(xué)習中解放出來,從被動學(xué)習走向主動學(xué)習,同時也培養(yǎng)了學(xué)生分析問題、解決實際問題的能力,充分發(fā)掘了學(xué)生的創(chuàng)造潛能,鍛煉了創(chuàng)新和協(xié)作精神。
參考文獻:
[1]郭芹.對高職高專計算機專業(yè)程序設(shè)計教學(xué)的思考[J].中國科技信息,2008(1).
1.1教學(xué)只注重課程的講解,不注重教學(xué)過程的質(zhì)量控制
傳統(tǒng)的教學(xué)以課程內(nèi)容的講解為主,通過講解變量、循環(huán)、數(shù)組、指針等內(nèi)容,并結(jié)合一定的教學(xué)案例來推進教學(xué)過程的實施。這種傳統(tǒng)的教學(xué)方法沒有考慮到本階段學(xué)生的特點,往往造成教學(xué)效果差,教學(xué)質(zhì)量難以控制。C語言程序設(shè)計課程在大一新生中開設(shè),許多學(xué)生缺乏程序的思維和一定的動手能力,學(xué)生難以跟上教學(xué)進度,造成一定數(shù)量的學(xué)生對學(xué)習語言失去興趣,從而影響整個專業(yè)課程的學(xué)習。
1.2教學(xué)過程缺乏有效的互動
C語言程序設(shè)計的教學(xué)過程中主要使用PPT來講解,案例程序也通過PPT展示,甚至包括程序運行結(jié)果也以截圖的形式在PPT中顯示。雖然在PPT中可以添加很多的動作,動態(tài)地標注、顯示程序的運行過程,但這種方法以投影為中心,缺少與學(xué)生交流的環(huán)節(jié),加上程序類課程相對枯燥,以致學(xué)生難以集中精力做到全程聽課。
1.3代碼編寫規(guī)范強調(diào)不夠
編碼規(guī)范是軟件專業(yè)學(xué)生必須要牢記并遵守的,良好的編碼規(guī)范不僅能體現(xiàn)軟件從業(yè)人員的素質(zhì),而且使代碼有更好的可讀性,更容易被別人所理解和交流。該課程的講解主要以編寫簡單邏輯來解決一些日常問題、數(shù)學(xué)問題,編程的環(huán)節(jié)側(cè)重于算法的實現(xiàn),往往忽略了編碼規(guī)范
。1.4考試以筆試為主,難以檢驗學(xué)生的動手能力
傳統(tǒng)的C語言程序設(shè)計課程考試以筆試為主,考查學(xué)生對C語言基本的語法、簡單邏輯編寫的掌握情況。這種考試機制脫離了程序語言的實現(xiàn)介質(zhì),即計算機。雖然在試卷中也可以用編程題目來考查學(xué)生的編程能力,但在紙上寫程序與在計算機上寫程序有本質(zhì)的不同。在紙上寫程序只需要寫出大致的邏輯即可,而在計算機上寫程序不僅要寫出正確的代碼,而且需要調(diào)試和跟蹤代碼,最終保證程序的正確執(zhí)行。因此,筆試并不能很好地檢驗學(xué)生的動手實踐能力。
2教學(xué)改革措施
2.1加強教學(xué)過程的質(zhì)量控制
C語言程序設(shè)計課程是一門實踐性強的課程,僅通過做一些常規(guī)練習無法達到教學(xué)質(zhì)量監(jiān)控的目的。為了更好地控制教學(xué)質(zhì)量,需要從學(xué)生語法規(guī)則的掌握到動手編程這一系列環(huán)節(jié)進行掌握和跟蹤。為此,我們開發(fā)了一套在線作業(yè)系統(tǒng)用于教學(xué)質(zhì)量的控制。⑴作業(yè)題庫的建設(shè)C語言程序設(shè)計的任課教師根據(jù)自己的經(jīng)驗和理解來搜集和設(shè)計C語言題目,包括基礎(chǔ)知識的題目和編程實踐的題目?;A(chǔ)知識的題目主要用于C語言知識點的訓(xùn)練,包括填空題、選擇題、判斷題和程序閱讀題;編程實踐的題目主要用于編程能力的訓(xùn)練,這類題目需要學(xué)生對問題進行正確分析、設(shè)計算法、編程并運行,最終得到結(jié)果。教師在給出題目時,需要提供測試數(shù)據(jù)和對應(yīng)的結(jié)果。⑵作業(yè)的布置與批改教師可以根據(jù)每次課的教學(xué)大綱、課程內(nèi)容,從作業(yè)題庫中選擇一些填空題、選擇題、程序閱讀題、編程題來建立課程作業(yè)供學(xué)生在課外完成。學(xué)生在規(guī)定的時間之內(nèi)完成作業(yè)后提交作業(yè),系統(tǒng)根據(jù)教師預(yù)先設(shè)定的答案進行自動批改,形成每個學(xué)生的作業(yè)記錄。如果學(xué)生在規(guī)定的時間之內(nèi)沒有完成作業(yè)并提交則失去本次作業(yè)的記錄。教師通過查閱部分學(xué)生的解答來掌握學(xué)生對相關(guān)知識的掌握情況,特別是需要整理學(xué)生所犯的共性問題,并有針對性的開設(shè)習題課進行解答。⑶配套政策為了使學(xué)生重視平時作業(yè)的完成,課程的期末成績將考查平時作業(yè)的情況。如果學(xué)生沒有提交作業(yè)的次數(shù)在30%以上,則平時成績計0分,其他情況按照提交作業(yè)次數(shù)和作業(yè)得分根據(jù)一定的公式進行計算得到學(xué)生的平時成績。這種策略的主要目的在于督促學(xué)生跟著教學(xué)進度進行學(xué)習和訓(xùn)練,不至于嚴重滯后于教學(xué)進度而失去學(xué)習的興趣,可有力地保證教學(xué)質(zhì)量。
2.2加強教學(xué)過程中的互動
課堂教學(xué)應(yīng)該在一定程度上脫離PPT的教學(xué),這樣才可以調(diào)動學(xué)生的積極性。加強師生之間的互動可以結(jié)合本課程特點進行。在講解課程知識點后,配以適合的案例進行教學(xué),這些案例都是需要編寫C語言程序來實現(xiàn)的。此時,編程實現(xiàn)的環(huán)節(jié)不要通過PPT展示,而要在教師的計算機上動手編寫并運行得到結(jié)果,這樣可以改變教學(xué)節(jié)奏,吸引學(xué)生的注意力。C語言課程案例程序的一大特點是代碼量少,一般在20~30行之間,適宜在課堂上完成。教師在編寫程序的過程中,可以向?qū)W生展示編程中需要注意的問題,同時,進一步講解C語言的語法和基本知識點。教師在編寫程序的過程中難免會犯小錯誤,或者是有針對性的故意犯一些學(xué)生經(jīng)常犯的錯誤,在編程后的編譯運行時會有錯誤報出,這時對于提高師生交互是很好的機會。從學(xué)生的角度來說,他們的編程往往會有很多錯誤,編譯時會出現(xiàn)大量的錯誤提示。此時,學(xué)生可能就比較迷茫,不知道如何定位并解決錯誤。因此,當老師也出現(xiàn)錯誤,而且是學(xué)生經(jīng)常遇到的錯誤時,學(xué)生往往是比較興奮的,希望能知道老師是如何處理錯誤的。從老師的角度來說,真實地反映程序編寫、編譯的過程,展示程序錯誤的發(fā)現(xiàn)、定位、解決的方法,能夠更快地提高學(xué)生的動手實踐能力。面對錯誤,教師還可以引導(dǎo)學(xué)生參與程序錯誤的解決,消除學(xué)生對程序錯誤的恐懼感。在解決程序錯誤時可以參考以下步驟。首先,教師要把所有錯誤信息讀出來給學(xué)生聽,因為一般編譯出來的錯誤是用英文寫的,而且有些單詞學(xué)生不熟悉,因此,老師需要指出錯誤是變量重定義、變量沒有定義、還是其他錯誤;然后,指出核心錯誤的位置,教師要告訴學(xué)生程序報出很多錯誤信息往往是由一個小錯誤導(dǎo)致的,因此,老師要指導(dǎo)學(xué)生學(xué)會確定引起其他錯誤的核心錯誤;最后,在源程序中找到錯誤的位置,修改錯誤并重新編譯,得出運算結(jié)果。這個錯誤處理過程是針對簡單語法錯誤的處理方法,如果程序中出現(xiàn)了邏輯錯誤,即程序編譯正確,但運行結(jié)果不是預(yù)期結(jié)果,此時,錯誤的處理方法更為復(fù)雜,可能需要重新檢查程序邏輯,并使用編譯環(huán)境進行程序中可疑變量的監(jiān)視,通過觀察變量中的數(shù)值在程序運行過程的變化來確定錯誤。通過實地編寫程序并調(diào)試,發(fā)現(xiàn)和解決程序錯誤,最終得到正確的計算結(jié)果,不僅能使同學(xué)更好地掌握程序編寫的方法,而且還能更好地與學(xué)生進行互動,提高教學(xué)效果。
2.3強調(diào)代碼規(guī)范
有些老師在教學(xué)的過程別是演示程序時,注重于解決問題而忽視代碼規(guī)范,甚至是自己寫程序也是這樣,沒有代碼規(guī)范。雖然遵守代碼規(guī)范并不能改善程序的性能,但遵守代碼規(guī)范能夠使程序具有更好的可讀性、可維護性,是軟件代碼實施過程中軟件從業(yè)人員良好素質(zhì)的重要體現(xiàn)。改善代碼規(guī)范可以從以下幾個方面進行。⑴適當?shù)目s進每一行代碼不要頂格書寫,而要根據(jù)情況縮進。具有良好縮進格式的代碼不僅能少犯語法錯誤,還能夠使閱讀者快速掌握程序內(nèi)容。⑵適當?shù)目招泻瘮?shù)與函數(shù)之間增加必要的空行,使得程序構(gòu)成一目了然。⑶適當增加代碼注釋程序中函數(shù)的開頭最好加上注釋說明該函數(shù)的作用、參數(shù)的意義,在函數(shù)中重要邏輯的部分加入注釋說明該邏輯的主要思路、算法。⑷代碼塊要用花括號界定代碼塊盡量使用花括號來界定代碼范圍,即使代碼塊里只有一行代碼,這樣可以提高代碼的可閱讀性,防止閱讀者誤解程序。⑸變量和函數(shù)的命名盡量使用多個字母來命名變量和函數(shù),使得程序閱讀者通過名稱即可大致了解變量的意義、函數(shù)的作用,提高程序的可讀性。通過編碼規(guī)范的強調(diào)和實施,使學(xué)生認識到軟件開發(fā)的專業(yè)素質(zhì),對于提高學(xué)生的專業(yè)素養(yǎng)具有潛移默化的作用。
2.4上機考試
上機考試采用在線考試的方式進行,考試環(huán)節(jié)包括如下幾個部分。⑴試題庫的建設(shè)C語言程序設(shè)計的任課教師負責組建上機試題庫,試題庫中的題目都是編程的題目,用于考核學(xué)生的編程能力。教師在組建試題庫時,標明每個試題的知識點和大致難度,并提供測試案例和對應(yīng)的答案。題庫負責人負責查看、重新編輯每個題目,從題庫整體的角度更新每個試題的難度。⑵上機考試的實施為單次考試準備7個知識點和1個綜合知識點的題目,教師在考試之前為每個知識點選定難度相當?shù)?個題目。每個學(xué)生登錄系統(tǒng)后,系統(tǒng)自動建立考卷,具體策略是從為每個知識點準備的5個題目中隨機選擇1題組成一個考卷,因此,該考卷包含8個題目,這8個考題要求學(xué)生在4小時內(nèi)完成編程??荚嚂r間一般定為上午8:00至中午12:00點。學(xué)生根據(jù)隨機組成的考卷題目進行解答,為每道題目編程求解,并在學(xué)生機上利用示例測試用例檢驗代碼的正確性。如果在本地沒有通過檢測,則進行邏輯檢查,修改程序;如果本地通過測試,學(xué)生需要將代碼提交到服務(wù)器。服務(wù)器接收到代碼后,自動調(diào)用教師提供的更多的測試用例來檢測程序運行結(jié)果是否與預(yù)先設(shè)置的結(jié)果匹配,進行代碼邏輯黑盒測試。如果全部通過,則說明學(xué)生的編程邏輯是正確的,此時將學(xué)生成績記錄中對應(yīng)的題目標為通過,并回顯“通過”給學(xué)生,學(xué)生繼續(xù)做下一道題目;如果其中有的用例運行結(jié)果不正確,則返回“錯誤”給學(xué)生,學(xué)生可以接著做本道題目,也可以選做另外一道題目,同時,在學(xué)生成績記錄中對應(yīng)的題目標為錯誤。教師在考試現(xiàn)場調(diào)取并查看所有學(xué)生成績記錄信息,如果發(fā)現(xiàn)異常信息,如在很短的時間內(nèi)完成了過多的題目,則可能學(xué)生在作弊。此時,根據(jù)異常學(xué)生信息中的IP地址找到該學(xué)生,進行現(xiàn)場查證,如果確認為作弊則立即處理。如果學(xué)生正確完成了8道題中的5道題,則學(xué)生通過上機測試,否則,學(xué)生沒有通過上機測試。為了減輕學(xué)生的壓力,上機考試可以分兩次進行,如果第一次沒有通過上機考試,還可以組織學(xué)生進行第二次考試,取這兩次考試的較高分作為學(xué)生成績。
3結(jié)束語
關(guān)鍵詞:C語言;實驗教學(xué);實踐能力
C語言程序設(shè)計課程是計算機和軟件專業(yè)學(xué)生接觸的第一門專業(yè)基礎(chǔ)課,也是許多高等院校非計算機專業(yè)學(xué)生的一門必修公共基礎(chǔ)課,是高等院校的重點課程之一。它的應(yīng)用領(lǐng)域非常廣泛,既可以編寫系統(tǒng)軟件,又可以根據(jù)用戶需要編寫應(yīng)用軟件。C語言具有較強的邏輯性,處理問題周密、嚴謹。學(xué)生一旦掌握了C語言,就可以較為輕松地學(xué)習其他任何一種程序設(shè)計語言。因此,C語言成為學(xué)生學(xué)習程序設(shè)計的入門課程,而C語言程序設(shè)計是一門實踐性很強的課程,實驗教學(xué)是該課程不可缺少的重要組成部分。
C語言的數(shù)據(jù)類型較多、表達式豐富、語法結(jié)構(gòu)復(fù)雜,它也是教師難教、學(xué)生難學(xué)的課程之一。由于種種原因,傳統(tǒng)的實驗教學(xué)多是學(xué)生按實驗教材和教師指導(dǎo)的程序一步一步完成,學(xué)生雖然有一定收獲,但是也束縛了手腳。學(xué)生完全是被動的接受者,沒有充分發(fā)揮主體作用[1]。因此,我們需要更新理念,在實驗教學(xué)環(huán)節(jié)中不斷探索,用實驗教學(xué)拓廣課堂教學(xué),使學(xué)生真正領(lǐng)會并掌握程序設(shè)計的基本思想和基本要領(lǐng)。實踐教學(xué)是大學(xué)本科教學(xué)的重要組成部分,應(yīng)不斷探索其新的教學(xué)模式和教學(xué)方法,以提高大學(xué)生的綜合素質(zhì)和創(chuàng)新能力[2]。
1加大實驗教學(xué)管理力度
為了培養(yǎng)學(xué)生應(yīng)用所學(xué)知識解決實際問題的能力,樹立學(xué)生的團隊合作精神,鍛煉學(xué)生的邏輯思維能力和創(chuàng)新思維能力,我們加大了實驗教學(xué)的管理力度,組建了一支由6名教師和2名博士生組成的結(jié)構(gòu)完整的實驗指導(dǎo)梯隊,由4名主講過C語言程序設(shè)計課程的老師主要負責解答專業(yè)方面的問題,并對學(xué)生加以引導(dǎo),重點培養(yǎng)學(xué)生的自主學(xué)習能力和創(chuàng)新意識;兩名實驗室的指導(dǎo)教師在開發(fā)環(huán)境的應(yīng)用方面給學(xué)生提供強有力的支撐;兩名博士生發(fā)揮其編程能力強、掌握新技術(shù)等特長,在算法的程序?qū)崿F(xiàn)上,給予學(xué)生更多的指導(dǎo)。
實驗教師的水平與修養(yǎng)對學(xué)生的影響是巨大的,所以實驗教師應(yīng)不斷提高自身理論與實踐水平,鉆研業(yè)務(wù)。在每次實驗課開始前,我院擔任實驗指導(dǎo)的老師們都集中到一起,從實驗內(nèi)容的具體安排到實驗中學(xué)生會遇到的問題等,都會進行討論。在管理上,我們更加強調(diào)了分工責任制,每個老師負責哪個班的哪些同學(xué),都做了明確規(guī)定,從答疑到驗收,都由這個老師主要負責。有了這樣一支實驗指導(dǎo)梯隊和相應(yīng)的管理策略,就為完成實驗教學(xué)任務(wù)、達到良好的實驗效果提供了必要的保證。
2探索實驗教學(xué)方法
C語言程序設(shè)計實踐性非常強,學(xué)生只有通過實踐才能真正理解其含義,真正掌握其本質(zhì)并學(xué)會編程。盡管學(xué)生學(xué)習C語言有不少困難,但興趣是最好的老師,要最大限度地激發(fā)學(xué)生的學(xué)習興趣。有了興趣,學(xué)生就能積極地思考,大膽地探索,變被動接受為主動思考。因此,實驗教學(xué)總的思路就是要以激發(fā)學(xué)生興趣為主線,充分發(fā)揮學(xué)生的積極性和創(chuàng)造性。
2.1抓好實驗預(yù)習工作,培養(yǎng)學(xué)生良好的學(xué)習習慣
每次上機實驗之前,就要布置好上機任務(wù),要求每位同學(xué)做好預(yù)習,寫出上機實驗的內(nèi)容、編好程序、準備好調(diào)試所需的數(shù)據(jù),并進行初步的結(jié)果分析,對每個題目做到心中有數(shù),避免學(xué)生上機實驗時現(xiàn)看教材、現(xiàn)編程序的現(xiàn)象。長期如此,便可養(yǎng)成良好的學(xué)習習慣,學(xué)習效果自然就有很大的提高。
例如,在選擇結(jié)構(gòu)編程練習實驗前,我們給學(xué)生布置了這樣一個實驗題目,編程設(shè)計一個簡單的計算器程序,要求根據(jù)用戶從鍵盤輸入的表達式:
操作數(shù)1運算符op操作數(shù)2
來計算表達式的值。指定的運算符為加(+)、減(-)、乘(*)、除(/)[3]。這道題學(xué)生拿過來一看非常簡單,只是簡單的輸入與輸出與條件判斷。
有的同學(xué)定義了兩個float型變量a、b來分別代表兩個操作數(shù),兩個char型變量c、answer來分別代表運算符和答案。用scanf函數(shù)讀入數(shù)據(jù):
scanf("%f%c%f",&a,&c,&b);
學(xué)生在程序編譯通過后發(fā)現(xiàn)并沒有得到預(yù)想的結(jié)果,程序好象“提前”結(jié)束了,而且編譯沒有問題,錯誤不易被檢查出來。學(xué)生這時就會產(chǎn)生好奇,得不到正確結(jié)果的原因是什么?為什么有的同學(xué)的程序看起來與自己的完全相同卻能得到正確結(jié)果?
經(jīng)過啟發(fā)研究,通過跟蹤變量發(fā)現(xiàn),發(fā)現(xiàn)是scanf函數(shù)讀取緩沖區(qū)中數(shù)據(jù)的問題。學(xué)生在輸入運算符時為了與兩個操作數(shù)相隔,兩側(cè)都用了空格。所有的scanf語句都執(zhí)行了,并沒有提前結(jié)束。只不過有的scanf讀取到了空格符而已。學(xué)生恍然大悟:原來看似簡單的問題實際上并不一定那么簡單。這樣在實驗課中,學(xué)生帶著問題去修改自己所編寫的程序,觀察修改后的結(jié)果,實際上就是了解改動部分在整個程序中所起的作用,這種作用的認識和理解不是通過說教得來的,而是他們親身體驗的,學(xué)生對它的理解、記憶就要深刻得多,同時還體會到實驗預(yù)習的重要性。
2.2鍛煉學(xué)生發(fā)現(xiàn)問題、解決問題的能力
在每次實驗課開始時,實驗教師對上一次主講教師講課的內(nèi)容作簡要回顧,對本次實驗的重點、難點以及一些基本算法、編程思路、解題技巧進行必要的分析和講解,讓學(xué)生對本次實驗的大致思路和目的心中有數(shù)。教師主要起引導(dǎo)的作用,實驗前的講解以重點、難點和注意事項為主,不應(yīng)面面俱到,可以先給出一些問題,讓學(xué)生帶著問題去做、去觀察、去思考。實驗中,應(yīng)以學(xué)生為主體,使學(xué)生成為真正的主人。
有些問題看似簡單,實則包含著很多內(nèi)容,再簡單的程序都要結(jié)合語言的自身特點,以一種最優(yōu)化的結(jié)構(gòu)去表達,不能忽視任何小問題。比如有這樣一個程序:用近似公式
e=1+1/1!+1/2!+1/3!+……+1/n!
求自然對數(shù)的底e的值,取n為10(n的值越大越接近e的真值)[4]。
#include
main()
{
int n;
float e,p;
for (n=1;n
{
p=p*n;
e=e+1.0/p;
}
printf ("e=%10.7f\n",e);
}
對于初學(xué)者來說,寫出這樣的程序還是不錯的,無論從語法上還是語義上都沒有錯,可是上機運行時就會發(fā)現(xiàn)結(jié)果為2.919978×1039!很明顯這是錯誤的,大家都知道e的近似值是2.718。
通過上機調(diào)試,學(xué)生會發(fā)現(xiàn):只是因為變量未初始化,就會給結(jié)果帶來這么大的偏差,從而深刻體會到使用未初始化的變量有多么危險。這類細節(jié)問題還有很多,只看書是體會不到的,只有通過自己動手動腦,才能積累實踐經(jīng)驗,真正提高。因為編譯通過,不等于程序正確;一種輸入正確,不等于所有的輸入都正確;一次運行正確,不等于次次運行都正確。程序總會出一些莫名其妙的錯誤,想解決這些錯誤,唯一的手段就是動手調(diào)試(Debug)[5]。同學(xué)們多動手,不僅可以發(fā)現(xiàn)程序中存在的問題,同時也可以充分地感受到自己分析問題、解決問題的樂趣。
2.3培養(yǎng)學(xué)生創(chuàng)新精神,向研究型、個性化方向發(fā)展
在具體指導(dǎo)實驗的時候,教師要由以往扮演的主導(dǎo)者、支配者轉(zhuǎn)向指導(dǎo)者、欣賞者,由臺前退向幕后,由顯性的中心地位退向一個隱性的指導(dǎo)地位,實現(xiàn)指導(dǎo)方式的轉(zhuǎn)變,培養(yǎng)學(xué)生的創(chuàng)新精神、研究能力。對大部分學(xué)生,應(yīng)避免直接回答他們提出的問題,而是作出必要的提示,引導(dǎo)他們?nèi)ゲ殚喗滩暮凸P記,認真思考與分析,找出錯誤的原因,自己解決問題。提倡創(chuàng)新、個性化,同一問題可讓學(xué)生尋找不同的解決方案。如在講到循環(huán)時的猴子吃桃問題,猴子第一天摘下若干只桃子,當即吃了一半零一個,第二天又吃了剩余桃子的一半零一個,以后每天都吃前一天剩余桃子的一半零一個,到第十天想吃時,發(fā)現(xiàn)只剩下一個桃子了,求第一天猴子共摘了多少桃子[6]。有的同學(xué)用循環(huán)來解決此問題,而有的同學(xué)用遞歸的方法解決,讓學(xué)生比較各個方案的優(yōu)劣,好的解決方案向更多的學(xué)生推廣,從而使每位同學(xué)的創(chuàng)新思維大大加強。
創(chuàng)新人才的培養(yǎng),重在創(chuàng)新能力的培養(yǎng)。這種實驗教學(xué)方式,給了同學(xué)更大的創(chuàng)造空間。
3改革課程考核方式
網(wǎng)絡(luò)的應(yīng)用給我們的實驗教學(xué)提供了很好的平臺。比如我院有課程網(wǎng)站,包含全校的計算機類教學(xué)。以C語言程序設(shè)計網(wǎng)站為例,其中包含講義、實驗指導(dǎo)書、教學(xué)課件,還包含自學(xué)需要的素材庫、試題庫以及考試系統(tǒng)等豐富的教學(xué)資源和軟件[7-8],學(xué)生還可以在上面提交作業(yè)、討論問題。它們自成體系又相互關(guān)聯(lián),學(xué)生對課程的高層次需求在課程網(wǎng)站上得到極大的補充,滿足了各專業(yè)不同層次學(xué)生的需求。
目前很多高等院校C語言程序設(shè)計課程學(xué)習成績的評定,僅以期末一張考試卷的好壞而定,這使得很多學(xué)生不重視實驗課,認為實驗課上的好與不好對成績影響不大,很多學(xué)生重理論、輕實驗。我院對考試進行大膽的改革,采用自主研發(fā)的“機考系統(tǒng)”來考核學(xué)生,所有的考試都在計算機上進行,學(xué)生答完試卷,馬上能看到自己的考試成績,并能看到細節(jié)部分:即在哪個位置丟分了。教師從最初上課時就明確告訴學(xué)生這種考核方式,使學(xué)生從思想上重視實驗;每次上機實驗也讓學(xué)生在機考系統(tǒng)的環(huán)境下提交程序,作為平時實驗的成績,訓(xùn)練學(xué)生的編程速度,鍛煉學(xué)生在指定時間內(nèi)完成實驗題的能力,培養(yǎng)、提高學(xué)生學(xué)習的自覺性、實踐意識及編程能力。
4結(jié)語
幾年來,為上好C語言上機實驗課,很多教師不斷探索,想方設(shè)法讓學(xué)生從枯燥的語言學(xué)習中解放出來。學(xué)生通過實驗進一步理解了知識,更加直接簡便地掌握了課程的重點、難點,實驗教學(xué)質(zhì)量得到很大提高。
參考文獻:
[1] 周國安. 改革實驗教學(xué) 加強科學(xué)實驗?zāi)芰ε囵B(yǎng)[J]. 實驗室科學(xué),2006(1):28-29.
[2] 葉楓. 深化實驗教學(xué)改革,不斷培養(yǎng)創(chuàng)新人才[J]. 實驗室研究與探索,2008,27(10):103-105.
[3] 蘇曉紅,孫志崗. C語言大學(xué)實用教程學(xué)習指導(dǎo)[M]. 北京:電子工業(yè)出版社,2007:168-168.
[4] 段興. C語言實用程序設(shè)計100例[M]. 北京:人民郵電出版社,2002:267-268.
[5] 蘇曉紅,陳惠鵬,孫志崗,等. C語言大學(xué)實用教程[M]. 北京:電子工業(yè)出版社,2004:174-174.
[6] 譚浩強. C程序設(shè)計[M]. 2版. 北京:清華大學(xué)出版社,2002:120-120.
[7]國家級精品課程,教育部-微軟精品課程,黑龍江省精品課程,國家教育部雙語教學(xué)示范課程網(wǎng)站[EB/OL]. [2010-06-12] //elite/.
[8] 樂學(xué)網(wǎng)C語言程序設(shè)計[EB/OL]. [2010-06-12]. /course/view.php?id=8.
C Programming Language Experimental Teaching and Practice
HAO Hui-xin, LI Xiu-kun, XIA Qing-quan
(School of Computer Science and Technology, Harbin Institute of Technology, Harbin 150090, China)
本文結(jié)合本校情況,分析了目前高職電子信息類專業(yè)學(xué)生在C語言程序設(shè)計教學(xué)上存在的主要問題,提出采用點面結(jié)合,分級教學(xué)目標,精選程序案例,突出高職認知規(guī)律,以提高學(xué)生的學(xué)習興趣為基礎(chǔ),強化學(xué)生上機練習及指導(dǎo)為突破口,最終實現(xiàn)高職計算機專業(yè)C語言程序設(shè)計的教學(xué)目標。
關(guān)鍵詞:
高職院校;C程序設(shè)計;分級教學(xué)目標
一、引言
現(xiàn)在,我們學(xué)校和許多高校一樣,選擇C語言作為電子信息類專業(yè)的高級語言程序設(shè)計的入門教學(xué)課程,C#語言和Java語言程序設(shè)計與開發(fā)作為計算機專業(yè)后續(xù)崗位能力延展課程。C語言程序設(shè)計是一門專業(yè)基礎(chǔ)課,強調(diào)語法和基礎(chǔ),而C#語言和Java語言程序設(shè)計則著重于崗位應(yīng)用能力。本人多年從事《C/C++語言程序設(shè)計》、《C#語言程序設(shè)計》、《數(shù)據(jù)庫編程技術(shù)》和《ASP.NET》課程教學(xué),發(fā)現(xiàn)我校高職電子信息類專業(yè)相當一部分學(xué)生語言不過關(guān),給后續(xù)課程帶來很大麻煩,造成教學(xué)被動。為此,很有必要對高職電子信息類專業(yè)C語言程序設(shè)計教學(xué)進行反思,提出相應(yīng)對策。本文以C程序設(shè)計課程為例,分析目前高職電子信息類專業(yè)學(xué)生C語言教學(xué)上存在的主要問題,就如何確定并有效實現(xiàn)教學(xué)目標做一個切實的探討。
二、高職電子信息類專業(yè)C語言教學(xué)的特點
1C語言的教學(xué)特點:具有邏輯性、理論性、創(chuàng)構(gòu)性和理論性是計算機程序設(shè)計課程的四大主要特征。想要掌握計算機語言,需要學(xué)生有一定的主動創(chuàng)造力和羅輯思維力。而C語言更是計算機程序設(shè)計課程之中的難點,很多首次接觸到C語言的同學(xué)很難入門。根據(jù)這一特性,對高職院校在C語言的教材編寫上和教學(xué)上帶來了很大的困難。計算機語言的學(xué)習不僅僅是看教材,聽課更重要的是在于應(yīng)用。學(xué)會使用C語言編寫程序,最重要的環(huán)節(jié)是做習題和上機實訓(xùn)。如果學(xué)得不扎實,對后續(xù)專業(yè)課程影響很大。所以一定要強化實訓(xùn)教學(xué)。高職院校的學(xué)生普遍存在著文化水平較低,認知度不足,綜合素質(zhì)不高等特點。很多學(xué)生對學(xué)習沒有熱情,思維理解能力也較差。有的學(xué)生上課,僅僅是為了應(yīng)付家長和學(xué)校,自己沒有主動學(xué)習的欲望導(dǎo)致學(xué)習沒有紀律。因此,高職院校的學(xué)生上課處于一個積極性不足,學(xué)習習慣不好,沒有學(xué)習計劃規(guī)劃,不主動思考這一環(huán)境之中。他們往往是被動的接受學(xué)校的教育,僅僅是為了完成目標而學(xué)習,一版不會主動進行相關(guān)課程的深入思考和練習。由于這些不好的學(xué)習因素嗎,導(dǎo)致相關(guān)的學(xué)習課程學(xué)習起來更加困難,也不知道如何求助如何進行解決。目前,相當大一部分學(xué)生對學(xué)習計算機課程存在兩個誤區(qū):一方面是在現(xiàn)在軟件領(lǐng)域這個大環(huán)境下,C語言基本無用,另一方面是學(xué)習這門課程如果今后不從事相關(guān)工作也無用武之地。還有相當一部分學(xué)生學(xué)習中產(chǎn)生畏難情緒,嚴重挫傷他們學(xué)習計算機語言的積極性,甚至影響他們學(xué)習本專業(yè)的信心。但同時也要看到,有一部分高職生來自于高職院校的學(xué)生,他們在學(xué)習C語言的過程中實踐和動手能力都得到了很大的加強,邏輯思維能力和創(chuàng)新能力也有明顯提升,還有一部分有自己興趣十足的愛好。這應(yīng)當充分肯定并予以高度重視,并加以正確的引導(dǎo)。在教學(xué)中注意揚長避短,充分發(fā)揮他們的優(yōu)勢。
三、高職C語言教學(xué)的思考與對策
(一)要遵循計算機語言學(xué)習的認知與教學(xué)規(guī)律計算機語言程序設(shè)計學(xué)習都有自身的認知與教學(xué)規(guī)律。計算機程序就是用某種計算機語言把計算機的執(zhí)行過程描述出來。學(xué)習計算機語言,就是學(xué)習語法規(guī)則以及掌握這些語法規(guī)則的應(yīng)用。眾所周知,要學(xué)好一門語言,關(guān)鍵是不停地進行讀寫訓(xùn)練,活學(xué)活用。多看、多讀、多寫、多模仿練習是學(xué)好任何一門語言的訣竅,那么學(xué)習計算機語言也是如此。所以,C語言程序設(shè)計教學(xué)首先是引導(dǎo)學(xué)生多閱讀C語言程序,然后是學(xué)會調(diào)試C語言程序,接著是模仿編寫C語言程序,最后才是設(shè)計C語言程序。
(二)分級制定教學(xué)目標我們的教學(xué)對象是這樣現(xiàn)狀的高職學(xué)生,還存在計算機水平差異、思維發(fā)展差異。這就要求我們根據(jù)高職教育的根本要求和專業(yè)人才培養(yǎng)方案,結(jié)合本課程的內(nèi)容特點,在教學(xué)大綱中應(yīng)制定多級教學(xué)目標。多角度分層次分階段從低到高設(shè)計的教學(xué)目標如下:1、掌握C語言程序設(shè)計的基本知識、基本方法和技巧2、具有程序設(shè)計初步應(yīng)用能力3、理解結(jié)構(gòu)化程序設(shè)計的基本思想4、培養(yǎng)程序設(shè)計邏輯思維方式,提高學(xué)生自主探索學(xué)習和分析解決實際問題的意識在教學(xué)實施過程中,要根據(jù)學(xué)生所表現(xiàn)出來的差異進行分層,設(shè)計不同層次的學(xué)生模型,分層次制定教學(xué)內(nèi)容和教學(xué)目標。有條件分班教學(xué)的,可按不同層次的學(xué)生在教學(xué)活動中要達到不同的學(xué)習目標,分班級安排不同的學(xué)習內(nèi)容。比如:把C語言程序設(shè)計課分為兩個層次,一個基礎(chǔ)層次,一個提高層次。
(三)選擇或自編適合高職學(xué)生的C語言實訓(xùn)教材高職的培養(yǎng)目標,教學(xué)模式、教學(xué)內(nèi)容有其鮮明特色,這就要求高職《C語言程序設(shè)計》教材也應(yīng)當獨具特點,不能照搬普通高校教材,更不能借用中職教材。但現(xiàn)有教材很多是介紹語句的格式和功能,不適合高職學(xué)生,因此必須調(diào)整教材結(jié)構(gòu)和內(nèi)容來應(yīng)對現(xiàn)在高職教育。2008年我們曾編寫《C++程序設(shè)計實訓(xùn)指導(dǎo)書》,可滿足6個專業(yè)方向的學(xué)生使用。本書是在編寫組各老師多年從事C++語言程序設(shè)計教學(xué)的基礎(chǔ)上編寫的,書中根據(jù)多年的教學(xué)經(jīng)驗,針對海南高職學(xué)生實訓(xùn)中遇到的問題,精心挑選訓(xùn)練題目,進行強化訓(xùn)練,以提高學(xué)生分析問題和解決問題的能力。力求將復(fù)雜的問題和概念用簡潔的語言描述出來,力爭讓學(xué)生當時看得懂、學(xué)后用得上。
(四)圍繞最大限度提高與保護學(xué)生對C語言的學(xué)習興趣,優(yōu)化教學(xué)方法,以求全面教學(xué)實效大量的調(diào)研證明,學(xué)生在如下情況下其學(xué)習效果才會是非常有效的:感覺到自己備受別人的關(guān)注;對他們現(xiàn)在學(xué)習的知識充滿興趣;自己是學(xué)習的主導(dǎo)和參與者;在任務(wù)完成后得到適當?shù)姆答?看到了成功的機會;對正在學(xué)習的東西感興趣并覺得富有挑戰(zhàn)性;感覺到他們正在做有意義的事情。要促進學(xué)生的自主發(fā)展,就必須最大可能地創(chuàng)設(shè)讓學(xué)生參與到自主學(xué)習中來的情境與氛圍。因此,教師要因勢利導(dǎo),采取多種教學(xué)方法,最大限度提高與保護學(xué)生對C語言的學(xué)習興趣,以求取得真正教學(xué)實效。1.做到每一堂上機課都能讓學(xué)生通過自己上機程序練習獲得成就感。2.提倡學(xué)生朗讀程序。比如,語句intx;x=5;,可讀成“聲明一個整型變量x,然后將整型常量5賦值給整型變量x”。通過朗讀程序,能夠使一些原本很模糊的概念得到不斷地鞏固,逐漸地變得清晰。3.養(yǎng)成良好的編程習慣,將枯燥難記的語法融入范例程序的上機調(diào)試過程中。在整合課程內(nèi)容的基礎(chǔ)上,改變過去先給出定義和規(guī)則的講授辦法,而是從具體問題入手,精選范例,努力把枯燥的“語言”講得生動、活潑。在程序范例中,將語法知識點同實際編程結(jié)合。講授時避免糾纏于語法細節(jié),應(yīng)始終明確一點:計算機語言是用來描述需要解決的問題和問題的解決方法的,任何語法規(guī)定都是為這個目的服務(wù)的。4.點面結(jié)合,少講多練,確保創(chuàng)造自主學(xué)習的情境與氛圍學(xué)習計算機語言主要在于應(yīng)用,僅僅通過聽課和閱讀教材是不可能掌握的。學(xué)會使用C語言編寫程序,最重要的環(huán)節(jié)是做習題和上機實訓(xùn)。要區(qū)分學(xué)生層次,精選上機練習題,既要滿足少數(shù)提高訓(xùn)練,又要滿足大多數(shù)基礎(chǔ)練習,做到點面結(jié)合,符合學(xué)生實際。5.及時幫助學(xué)生化解難點,共克難關(guān)應(yīng)事先分析C語言學(xué)習的難點,做到胸中有數(shù)。在C中,變量與數(shù)據(jù)類型概念是第一個難點,它與內(nèi)存概念緊密相關(guān)。這個難點,將影響全局。循環(huán)控制語句是第二個難點,它改變程序執(zhí)行流程,難在如何構(gòu)造,關(guān)鍵是抓住循環(huán)初值、終值和增值三要素。教學(xué)中要及時發(fā)現(xiàn)學(xué)生在學(xué)習C時的難點,厘清難點的根源,逐個擊破,不留隱患。6.結(jié)合專業(yè),學(xué)以致用根據(jù)教學(xué)不同階段,教師應(yīng)適時收集一些與其授課學(xué)生專業(yè)方向結(jié)合的程序案例,讓學(xué)生能夠切實體會到C程序設(shè)計在解決本專業(yè)中的問題中所發(fā)揮的作用。7.發(fā)揮計算機網(wǎng)絡(luò)與多媒體的優(yōu)勢,增加教學(xué)互動及時開發(fā)C課程網(wǎng)站,提供學(xué)生在線多媒體學(xué)習與答疑平臺。在C語言程序設(shè)計學(xué)習上,把復(fù)雜的計算機語言、專業(yè)化的技術(shù)變成了輕松自如、隨心所欲的人機對話。因此,使學(xué)生不至于掉入C語言知識的細節(jié)里,避免出現(xiàn)既費時、又費力,而學(xué)習收效不理想現(xiàn)象,使枯燥無味的內(nèi)容變得簡單,從而有趣,激發(fā)了學(xué)生濃厚的學(xué)習興趣。學(xué)生在課堂內(nèi)外的學(xué)習中,遇到不能解決的問題時,既及時可上Internet網(wǎng)查詢,又可與同學(xué)老師交流。這樣,既增進了師生之間交流的機會,又達到共同提高的目的。
四、結(jié)束語
總之,對于高職電子信息類專業(yè)學(xué)生來說,學(xué)好C語言既是專業(yè)素質(zhì)的需要,也是未來崗位能力的要求。對于教師來說,如何因材施教,因人而異,充分激發(fā)學(xué)生的內(nèi)在積極性與潛能教學(xué)模式也成為迫在眉睫的重任。針對目前高職電子信息類專業(yè)學(xué)生在C語言程序設(shè)計教學(xué)上存在的主要問題,我們提出采用點面結(jié)合,分級教學(xué)目標,精選程序案例,突出高職認知規(guī)律,以提高學(xué)生的學(xué)習興趣為基礎(chǔ),強化學(xué)生上機練習及指導(dǎo)為突破口,最終實現(xiàn)高職C語言程序設(shè)計的教學(xué)目標。
參考文獻:
[1]全國高等院校計算機基礎(chǔ)教育研究會高職院校計算機教育經(jīng)驗匯編第二集[M].中國鐵道出版社,2008.
關(guān)鍵詞:C語言程序設(shè)計;運算符;優(yōu)先級;二維數(shù)組
中圖分類號:G642 文獻標識碼:B
1引言
“C語言程序設(shè)計”課程對理工科專業(yè)學(xué)生來說,是一門非常重要的基礎(chǔ)課程,但初學(xué)起來十分困難。其主要原因是:(1) C語言的數(shù)據(jù)類型和運算符多、表達式復(fù)雜;(2) 初學(xué)者在學(xué)習過程中必須暫時保留人的思維形式,使用計算機的程序模式工作。為了使學(xué)生學(xué)習好“C語言程序設(shè)計”這門課程,許多教育工作者對教學(xué)方法進行了深入的探索,積累了豐富的教學(xué)經(jīng)驗。例如:文獻[1]介紹了C語言程序設(shè)計的案例教學(xué)方法,文獻[2]討論了C語言程序設(shè)計中關(guān)于自增和自減運算符的理解和編程要點。盡管如此,如何使學(xué)生能更好地掌握C語言程序設(shè)計仍然值得教育工作者進一步探索。本文將自增和自減運算符分為優(yōu)先級不同的前綴++(前綴--)與后綴++(后綴--)兩種運算符,給出若干程序設(shè)計和調(diào)試的技巧,使學(xué)生更好地掌握C語言程序設(shè)計。
2關(guān)于自增和自減運算符
如果C語言表達式存在自增或自減運算符,則其值的計算和表達式中變量值的改變很容易弄錯。文獻[3~5]規(guī)定前綴自增(自減)和后綴自增(自減)運算符的優(yōu)先級相同,都大于算術(shù)運算符,結(jié)合方向是自右向左。它們的區(qū)別是:前綴自增(自減)是在使用前增加或自減少1,而后綴自增(自減)是在使用后增加或自減少1。作者在教學(xué)實踐中發(fā)現(xiàn):學(xué)生按上述規(guī)則并不容易讀懂程序和編寫程序。本文把前綴自增(自減)和后綴自增(自減)運算符看成兩種運算符,且規(guī)定前綴自增(自減)運算符的優(yōu)先級大于算術(shù)運算符,后綴自增(自減)運算符的優(yōu)先級低于賦值運算符,僅高于逗號運算符。本文的這一規(guī)則比較適合我們常常使用的Turbo C編譯系統(tǒng),也容易被學(xué)生理解和掌握。
例1:若i=3,則執(zhí)行賦值語句j=++i;時是將i的值先變?yōu)?,再賦值給j,j的值變?yōu)?;而執(zhí)行賦值語句j=i++;時是先將i的值賦給j,j的值為3,然后i的值先變?yōu)?。
例2:若i=3,則執(zhí)行賦值語句j=(i++)+(i++)+(i++);時是將三個i的值先加得12賦給j,j的值變12,然后i的值再三次增1變?yōu)?;而執(zhí)行賦值語句j=(++i)+(++i)+(++i);時是先將i的值再三次增1變?yōu)?,然后將三個i的值相加得18賦給j,j的值為18。
例3:若i=3,則執(zhí)行賦值語句printf(“%d”, -i++);時是將先輸出i的相反數(shù)-3,然后i的值再增1變?yōu)?;而執(zhí)行賦值語句printf(“%d”, -++i);時根據(jù)優(yōu)先級相同的負號與前綴自增運算符為自右向左的結(jié)合方向,則是先將i的值增1變?yōu)?,然后再輸出i的相反數(shù)-4。
值得注意的兩個問題:
(1) 當一個變量出現(xiàn)在一個函數(shù)的多個參數(shù)中時,不能將自增或自減運算符作用于該變量,否則用本文規(guī)則不能正確計算表達式的值和輸出結(jié)果。例如:若i=3,則執(zhí)行賦值語句printf(“%d, %d”, i,i*i++);時其輸出結(jié)果為(4,12);而執(zhí)行賦值語句printf(“%d ,%d”, i*i++,i);時其輸出結(jié)果為(12,3)。
(2) 當自增或自減運算符出現(xiàn)在邏輯表達式中時,自增或自減運算可能不被計算。例如:
若i=1,j=1,k=1,在計算表達式++i||++j&&++k時,因++i非0,不再計算++j&&++k部分,直接得到整個表達式的值為1,因此,計算表達式后,變量i的值為2,而j和k沒有執(zhí)行自增加運算,其值都為1。
基金項目:2006年湘潭大學(xué)校級精品課程基金(湘大教發(fā)[2007]20)。
作者簡介:黎自強(1963-),男,教授,博士,研究方向為計算機圖形學(xué),計算機視覺,智能計算。羅翠英(1966-),女,湖南益陽人,湖南工業(yè)大學(xué)講師,研究方向為計算機圖形學(xué)。
3關(guān)于scanf()函數(shù)和實型二維數(shù)組
在C語言程序設(shè)計中,常常利用scanf()函數(shù)對二維實型數(shù)組賦值,例如:下面的程序段是從鍵盤輸入10個數(shù)到二維實型數(shù)組x中。
voidmain()
{ int i,j;
float x[5][2];
for(i=1;i
for(j=1;j
scanf(“%f”,&x[i][j]);
for(i=1;i
for(j=1;j
printf(“%f”,x[i][j]);
}
上述程序在Turbo C2.0集成開發(fā)環(huán)境下編譯和連接是沒有錯誤的,但運行時出現(xiàn)如下錯誤信息:
scanf:floating point formats not linked
Abnormal program termination
解決的方法有兩種,方法一:
(1) float x[10][2]―>float x[10][2], t;
(2) scanf(“%f”,&x[i][j]);―>{scanf (“%f ”, &t);x[i][j]=t;}
方法二:在scanf()函數(shù)的%f前面保留一個空格,即:scanf(“_%f”,&x[i][j]);
4關(guān)于getch()的妙用
4.1查看顯示結(jié)果
一般,在Turbo C2.0集成開發(fā)環(huán)境下,運行C程序后即刻返回到編輯狀態(tài)。如果想看到程序執(zhí)行的結(jié)果,就必須按Alt+F5鍵。如果在程序的結(jié)束行前加一個語句getch();則程序運行暫停在顯示結(jié)果的界面,按任意鍵才返回編輯狀態(tài)。這樣能讓程序員更簡捷地查看結(jié)果。
4.2調(diào)試程序
一個能夠編譯、連接和運行的C程序,只有在沒有結(jié)構(gòu)上的錯誤的前提下才能保證其結(jié)果正確。這一步是靠調(diào)試程序來完成。對于初學(xué)C語言程序設(shè)計的學(xué)生來說,迅速找出程序結(jié)構(gòu)上的錯誤是一個至關(guān)重要的問題。一個簡單、可行方法就是利用printf()和getch()的組合語句在關(guān)鍵點跟蹤程序的執(zhí)行。
例如:程序段1-14是求1+2+3+…+n的和(正整數(shù)n由文件輸入)。
1#include
2main()
3{
4int i=0,n=0;
5long sum=0;
6FILE *fp=NULL;
7fp=fopen("in2.txt","r");
8if(fp!=NULL)
9 fscanf(fp,"%d",&n);
10 for(i=1;i
11 sum=sum+i;
12printf("%ld\n",sum);
13fclose(fp);
14}
當文件in2.txt中的數(shù)據(jù)為10時,運行程序得到的結(jié)果為11,不正確。為了迅速找到錯誤所在,在9行與10行之間插入兩行語句:
printf("n=%d\n",n);
getch();
再次運行程序,若屏幕上沒有顯示n=10,則就檢查1-9行程序,直到屏幕上顯示n=10為止;否則程序的錯誤是在10-13行,這時去掉在9行與10行之間插入的兩行語句并將11行語句改成:
{ sum=sum+i;
printf("%ld\n",sum);
getch();
}
再次運行程序,結(jié)果發(fā)現(xiàn)只要擊一次鍵就會返回編輯狀態(tài),這就說明循環(huán)語句沒有起到循環(huán)作用。檢查出第10行末尾多了個“;”,去掉“;”并運行程序得正確值55。
4.3用于菜單選擇
getchar()和getch()都可以從鍵盤接收字符,它們的區(qū)別是:(1)前者是一個函數(shù),后者是一個宏名;(2)前者接收字符時,會將鍵入的字符回顯到屏幕上;后者則不會將鍵入的字符回顯,很適合于在菜單中進行選擇。下面的程序段引自文獻[2],它是判斷某年是否為潤年,但在標號語句處有一個結(jié)構(gòu)錯誤,文獻[2]是將標號為error 的語句改為getchar(),ch=getchar();,本文給出一種不同的修改方法:將標號為error 的語句改為getch()。
# include
main( )
{
int ch;
int year;
do {
printf("please input year:\n");
scanf("%d", &year);
if(year%4 ==0 && year% 100!=0||year%400== 0)
printf("YES %d\n",year);
else
printf("NO%d\n", year);
printf("Y--continue, any key--exit\ ");
error: ch=getchar ( ) ;
} while (ch = = ‘Y’ || ch = = ‘y’);
}
4結(jié)束語
C語言程序的編寫和調(diào)試是初學(xué)者學(xué)習“C語言程序設(shè)計”課程中遇到的難點中的兩個。掌握C語言運算符的優(yōu)先級和結(jié)合方向是初學(xué)者正確編寫C語言程序代碼的前
提。本文通過把前綴++(前綴--)與后綴++(后綴--)運算符理解為優(yōu)先級不同的兩個運算符,能使初學(xué)者,尤其是非計算機專業(yè)的學(xué)生,更好地掌握其表達式的計算,進而正確設(shè)計出高效的C程序。同時,介紹的幾點C程序調(diào)試技巧能在一定程度上提高初學(xué)者的程序調(diào)試能力。
參考文獻:
[1] 徐萍,宮麗華. “C語言程序設(shè)計”課程教學(xué)改革的實踐和探討[J]. 電腦知識與技術(shù),2008,4(1):160-162.
[2] 陳仲民. 關(guān)于C語言教學(xué)方法和程序設(shè)計的探討[J]. 計算機教育[J]. 2007(6):3-6.
[3] Kernighan B W, Ritchie D M. The C Programming Language[M]. 2nd ed. Pearson Educatin,2006.8.
一、知識點的金字塔結(jié)構(gòu)
通常,C語言是學(xué)生接觸的第一門程序設(shè)計語言,它所包含的基礎(chǔ)知識繁多,這樣精選課程內(nèi)容就成了一項非常重要的工作,它是教學(xué)內(nèi)容的核心部分,《C語言程序設(shè)計》的核心內(nèi)容包括C語言基本語法、程序設(shè)計思想和程序調(diào)試方法。語法是任何一門語言的基礎(chǔ),同時,各種程序設(shè)計語言在基本知識點上是相同的,學(xué)生對基礎(chǔ)知識的正確理解和準確運用,其意義是深遠的。筆者經(jīng)過對C語言教學(xué)內(nèi)容的分析,歸納出了一個類似于金字塔的知識點結(jié)構(gòu)。
處于最低層的標識符是“基石”,無論是常量、變量、數(shù)據(jù)類型還是函數(shù),都必須用標識符來描述,表達其含義,在使用是遵守“見名識義”的原則;常量、變量、數(shù)據(jù)類型和運用符是“骨架”;表達式和語句是“上層建筑”,各種類型的常量、變量經(jīng)運算符的連接構(gòu)成相應(yīng)的表達式,語句則由一個個的表達式構(gòu)成;函數(shù)是“金頂”,程序由一個個函數(shù)組成,C語言程序設(shè)計,無論問題多么復(fù)雜,其任務(wù)只有一個,就是編寫一個main()主函數(shù),同時,編寫具有各種功能的其他函數(shù)。執(zhí)行程序時,從mian()的第一個“{”,開始直到最后一個“}”結(jié)束,其他函數(shù)只有在執(zhí)行的過程中被調(diào)用才執(zhí)行。
二、教學(xué)重點和難點
在C語言中,數(shù)值型數(shù)據(jù)和字符型數(shù)據(jù)是可以混合運算的,以及數(shù)據(jù)型的自動轉(zhuǎn)換、強制轉(zhuǎn)換、學(xué)生在學(xué)習時容易出錯,不易理解。我們可以從數(shù)據(jù)在計算機內(nèi)存中的存儲長度和二進制表示形式著手,講述他們之間的內(nèi)在聯(lián)系,這樣容易理解問題的本質(zhì)。
自加和自減運算既是重點又是難點。如果它們單獨作為語句使用,如:I=j++,應(yīng)該不難理解,學(xué)生能準確把握其值的變化;若作為表達式的一部分參加運算,此時,顯著地增加了運算的難度,要求準確的理解運算符的結(jié)合方向、運算對象的個數(shù)、運算符的優(yōu)先級等運算規(guī)則,如:int I=3;printf("%d",-I++);問輸出結(jié)果是多少?這個難度就非常大了。學(xué)生應(yīng)少使用組合運算,避免產(chǎn)生錯誤。
運算符的優(yōu)先級也是教學(xué)的重點和難點,但是有規(guī)律可循:單目運算的優(yōu)先級最高(括號除外),逗號運算符的優(yōu)先級最低,賦值運算和復(fù)合賦值運算的優(yōu)先級僅比逗號的高;算術(shù)算的優(yōu)先級比關(guān)系運算的高,關(guān)系運算的比邏輯運算的高(邏輯非運算除外)。
數(shù)組和指針是C語言的靈魂?!皼]有學(xué)好指針,就算沒有學(xué)過C語言?!睆倪@句話可見指針在C語言中的地位,而且指針在后續(xù)課程中的作用也是相當重要的。但是,指針的理解和運用難度是很大的,特別是初學(xué)者。
我們可以從下面幾個方面來加深理解、加強教學(xué):
①簡單指針和基礎(chǔ)知識。簡單指針是指基本數(shù)據(jù)類型的指針和一維數(shù)組。指針在使用前應(yīng)具有確定的值(即指向確定的變量);指針的類型應(yīng)與其指向的變量類型完全一致;指針只能進行加減、輔值運算。
②雜指針的說明、含義和應(yīng)用。具體指指針作為函數(shù)的參數(shù)、函數(shù)指針、文件指針、指針數(shù)組、多級指針。對于這些指針要正確理解它們的含義。
③構(gòu)體指針。它也是,《數(shù)據(jù)結(jié)構(gòu)》的重要內(nèi)容。主要用來構(gòu)成鏈表,在學(xué)習這部分知識時,可以用圖式的方式來幫助理解。
在實際教學(xué)中要注意的是教學(xué)的重點不一定是教學(xué)的難點,反之亦然。同時,要針對不同專業(yè)的學(xué)生進行教學(xué)內(nèi)容的恰當取舍,且注重知識的實用性。譬如:對非專業(yè)的學(xué)生,重點講述語法,對于難度比較大的部分可以少講甚至不講。對專業(yè)學(xué)生,側(cè)重于講述算法的思想、數(shù)組的應(yīng)用、函數(shù)的參數(shù)、結(jié)構(gòu)體和指針的運用,為后續(xù)課程的學(xué)習做必要的鋪墊。
三、教學(xué)方法和教學(xué)改革
在實際教學(xué)中把基本語法、程序設(shè)計思想、程序調(diào)試方法作為教學(xué)的三個核心內(nèi)容。針對非計算機專業(yè)的學(xué)生,多講語法和程序調(diào)試方法、技巧;對專業(yè)學(xué)生來說,不同的程序設(shè)計語言在語法上,程序調(diào)試方法和技巧上大同小異,學(xué)生應(yīng)該準確把握,熟練運用它,把教學(xué)的重點放在算法的設(shè)計上和程序的效率上,為后續(xù)課程的學(xué)習打下理論基礎(chǔ)。
在教學(xué)中可以使用下面的一些方法,提高教學(xué)效果,培養(yǎng)學(xué)生的邏輯思維能力和動手能力。
1.理論聯(lián)系實際
在教學(xué)過程中避免照本宣科、枯燥乏味,盡量與實際生活和相關(guān)課程進行聯(lián)系。如可以將數(shù)學(xué)中的積分、微分、求梯形面積、求最大公約數(shù)和最小公倍數(shù)等引入程序設(shè)計中。不但能使學(xué)生在知識的相互聯(lián)系和比較中發(fā)現(xiàn)新的內(nèi)涵,起到溫故知新融會貫通的作用,還能鍛煉、發(fā)展學(xué)生的思維能力和辨別能力,使他們學(xué)會從多方位、多層次、多角度去考慮問題。使學(xué)生認識到學(xué)有所用、學(xué)以致用,自然地產(chǎn)生學(xué)習的愿望和動力。
2.掌握典型算法,加強程序設(shè)計思維訓(xùn)練
《C語言程序設(shè)計》課程不僅僅是一般意義上的知識傳授,讓學(xué)生掌握程序設(shè)計的基本方法,是C語言課程的重點,是對學(xué)生進行邏輯思維能力的培養(yǎng)。在實際的教學(xué)過程中,我們發(fā)現(xiàn)有些學(xué)生平時學(xué)得很認真,對語法、語句等細節(jié)也很熟悉,但碰到稍微復(fù)雜一點的編程則無從下手,教師在教學(xué)過程中要樹立正確的教學(xué)思想,即注重算法設(shè)計,加強學(xué)生的程序設(shè)計思維訓(xùn)練,幫助學(xué)生順利地實現(xiàn)思維方式的轉(zhuǎn)變,而不能只單純地講授語言的語法、語義、語用,應(yīng)該將復(fù)雜枯燥的語法知識分解到一個個生動實用的程序?qū)嵗?,也就是在教學(xué)過程中以程序設(shè)計為主線,有意識淡化計算機語言本身語句的介紹,而重點介紹程序設(shè)計,在分析程序和程序設(shè)計中熟悉語法、應(yīng)用語句,掌握程序設(shè)計和解決問題的思路(算法),并把軟件工程學(xué)的思想貫穿于算法分析和程序設(shè)計的過程中。一定要避免陷入這樣的誤區(qū):教師一味地給學(xué)生講解語句的功能和語法規(guī)則,使學(xué)生陷入冗繁的語法規(guī)則之中,形成以語言為中心的思維模式。這樣教出來的學(xué)生語法背得滾瓜爛熟,但實際編程能力很差,所以教師應(yīng)注重培養(yǎng)學(xué)生形成以算法為中心的思維模式。對于從未受過算法設(shè)計訓(xùn)練的初學(xué)者來說,可能會感到無從下手,對此,教師應(yīng)該有意識地加強這種思維方式的訓(xùn)練,通過講授一些常用算法、典型算法,如記數(shù)、累加、連乘、兩數(shù)交換、求最大(小)值、迭代、排序、分類等為以后編寫程序、軟件設(shè)計奠定基礎(chǔ),同時典型算法熟練的掌握,也可增加學(xué)生學(xué)習的信心并提高學(xué)習的興趣,同時培養(yǎng)學(xué)生的思維能力。
3.如何提高程序的執(zhí)行效率
由于C語言已成為被廣泛使用的教學(xué)語言,筆者在c語言教學(xué)過程中對學(xué)生編寫的程序進行分析時發(fā)現(xiàn)很多學(xué)生對程序的執(zhí)行效率不能很好的把握,造成編寫的程序執(zhí)行效率較低。對于程序來說,效率應(yīng)包括程序的執(zhí)行速度和對計算機系統(tǒng)資源的利用,我們只能根據(jù)具體情況作出判斷,然后進行分析。但是優(yōu)化這一方面可能又會損壞另一方面。例如:采用程序的直接編寫而不調(diào)用函數(shù)的話,這樣可以省去調(diào)用函數(shù)的時間,以提高速度,但是程序又被拉長了,占用較多的磁盤空間;如果一味的壓縮數(shù)據(jù)以充分利用磁盤空間的話,則會降低存取速度或使程序不易理解。所以在程序設(shè)計中常常將一些常用的功能模塊編寫成函數(shù),放在函數(shù)庫中供公共選用。編程時要善于利用函數(shù)以縮短程序長度和減少重復(fù)編寫程序段的工作量。
實驗教學(xué)是對理論教學(xué)的重要補充和檢驗。在實際教學(xué)中發(fā)現(xiàn),學(xué)生對書本知識看得清楚,聽得明白,遇到實際問題則無從下手,顯得很被動,究其原因主要有三點:一是對實驗重視不夠;二是課前準備不足;三是缺乏程序調(diào)試能力和技巧,在出現(xiàn)編譯錯誤時,往往是去查看書本上的源代碼,而不是根據(jù)錯誤的提示信息,在錯誤行號的附近查找錯誤,以至浪費了實驗時間,沒有達到實驗的要求和目的。
關(guān)鍵詞:教學(xué)方法;教學(xué)模式;思維訓(xùn)練;自學(xué)能力
中圖分類號:G642文獻標識碼:A文章編號:1009-3044(2008)21-30486-03
The Research of Teaching Methods in "C Programming Language"
LIU Jian-you
(Zhaoqing Science and Technology Polytechnic,Zhaoqing 526020,China)
Abstract: C is a typical structural programming language, many colleges and universities use it as basic programming language. Students often complain about C language difficult to learn, to use, to build the application software, lack of programming and debugging capabilities. How to better carry out the C language courses teaching?Author on the problems that exist in teaching, with his personal experience in teaching and experience, talk about their own views, to promote the C language teaching.
Key words: teaching methods; teaching mode; thinking training; self-learning ability
1 引言
程序設(shè)計語言的種類多得難以計算,為什么要以C語言作為編程入門語言呢?還有人說為什么一定要學(xué)習C語言,干嘛不直接從C++學(xué)起?而且學(xué)C++不一定要有C語言基礎(chǔ),有了反而會有些內(nèi)容混淆。還有人說C語言都已經(jīng)過時了,怎么還要浪費時間去學(xué)?C語言在教學(xué)過程中,抱怨C語言難學(xué),難懂,難用,在解決實際問題編制應(yīng)用軟件時往往無以下手,缺乏編程和調(diào)試的能力。。久而久之,學(xué)生對學(xué)習此門課程就會產(chǎn)生厭倦的心理,不但影響本課程的學(xué)習,還會影響以后相關(guān)課程的學(xué)習。本文針對以上問題,指出了如下措施:
2 學(xué)習《C語言程序設(shè)計》的意義
我認為在學(xué)習C語言之前有必要弄清學(xué)習的意義所在,這樣才能讓學(xué)生對其產(chǎn)生興趣。興趣是人類最好的老師,只有對其產(chǎn)生了興趣,我們才能學(xué)好這門語言。
將C語言作為入門語言具有重要的意義。C語言是一門典型的結(jié)構(gòu)化程序設(shè)計語言,它具有語言簡潔、嚴謹,用途廣泛等特點,能夠體現(xiàn)結(jié)構(gòu)化程序設(shè)計的優(yōu)良控制結(jié)構(gòu),非常適合初學(xué)者。通過這門課程的學(xué)習,能夠使學(xué)生掌握一門結(jié)構(gòu)化程序設(shè)計語言,更為最重要的是能讓學(xué)生樹立用程序解決現(xiàn)實問題的思路和方法。為今后的學(xué)習打良好的基礎(chǔ)。再學(xué)其他程序設(shè)計語言,就能夠在短時間內(nèi)迅速的掌握。
3 改革課程教學(xué)內(nèi)容,重視算法的編程思想,培養(yǎng)創(chuàng)造性思維
精選課程內(nèi)容是一項非常重要的工作,它是教學(xué)內(nèi)容的核心部分,《C語言程序設(shè)計》的核心內(nèi)容包括C語言基本語法、程序設(shè)計思想和程序調(diào)試方法。語法是任何一門語言的基礎(chǔ),同時,各種程序設(shè)計語言在基本知識點上是相同的,學(xué)生對基礎(chǔ)知識的正確理解和準確運用,其意義是深遠的。
C語言程序是由函數(shù)組成的,無論問題多么復(fù)雜,我們都可以將其看成是一個大任務(wù),這個大任務(wù)又可化分成若干個小任務(wù),將這些小任務(wù)解決了,那么大任務(wù)也就完成了。也就是說其任務(wù)只有一個,就是編寫函數(shù)(一個main()主函數(shù)和其他函數(shù))。執(zhí)行程序時,從mian()的第一個“{”,開始直到最后一個“}”結(jié)束,其他函數(shù)只有在執(zhí)行的過程中被調(diào)用才執(zhí)行。
學(xué)習C語言程序設(shè)計不僅是為了掌握一種開發(fā)工具,更重要的是用計算機解決問題。而算法是解題的方法和步驟,算法就是對操作的具體描述,是計算機的解題過程。編制程序,就是根據(jù)算法,用具體的語言依據(jù)某種規(guī)則編寫計算機執(zhí)行的命令序列。因此學(xué)習語言的重點是鍛煉分析、分解,最終歸納整理出算法的能力。在教學(xué)過程中,學(xué)生能否理解算法,并掌握算法,成為教學(xué)的關(guān)鍵。
在C語言的教學(xué)過程中,改革傳統(tǒng)的語法學(xué)習內(nèi)容,將算法教學(xué)融入到語言教學(xué)中。由于C語言語法的邏輯性較強、結(jié)構(gòu)性要求較高,初學(xué)者剛接觸的時候容易考慮不全。因此算法教學(xué)可以通過實例進行, 從最簡單的例子入手,使學(xué)生在解決具體問題的過程中學(xué)習C語言的基本邏輯結(jié)構(gòu)和語句。生活中到處都存在著算法。而對于同一個問題可以有不同的解題方法和步驟,可以讓學(xué)生根據(jù)同一個問題提出不同的算法,并比較這些算法之間的優(yōu)劣,并讓學(xué)生根據(jù)分析對算法進行優(yōu)化。通過對算法的優(yōu)化練習,可以在無形中提高學(xué)生寫算法的水平。
4 改革課堂教學(xué)模式,培養(yǎng)學(xué)生自學(xué)能力
在教學(xué)中可以使用下面的一些方法,提高教學(xué)效果,培養(yǎng)學(xué)生的邏輯思維能力和動手能力。
4.1 改變傳統(tǒng)的教學(xué)方式
雖然這個話題是老生常談了,但是現(xiàn)在部分老師還沒有認識到這個問題的重要性,仍然是“教師單向灌輸”的教學(xué)模式。教師首先要在教學(xué)過程中樹立以學(xué)生為主體,老師為主導(dǎo)的教學(xué)思想,正確處理傳授知識與培養(yǎng)能力、提高素質(zhì)之間的關(guān)系;其次改變教學(xué)模式,償試采用以下教學(xué)方式。
4.1.1 任務(wù)驅(qū)動教學(xué)方式
在教學(xué)過程中避免照本宣科、枯燥乏味,“任務(wù)驅(qū)動”是建構(gòu)主義理論中的一種教學(xué)模式,是將所要學(xué)習的新知識隱含在一個或幾個任務(wù)之中,學(xué)生通過對所提的任務(wù)進行分析、討論,明確它大體涉及哪些知識,在老師的指導(dǎo)、幫助下找出解決問題的方法,最后通過任務(wù)的完成對學(xué)生知識的傳授。事實上它并不是簡單的給出任務(wù)就了事,重要的是要讓學(xué)生學(xué)會學(xué)習,使他們學(xué)會從多方位、多層次、多角度去考慮問題。使學(xué)生認識到學(xué)有所用、學(xué)以致用,自然地產(chǎn)生學(xué)習的愿望和動力。
可以先給出一個比較典型的C語言編寫的例子。給學(xué)生具體的演示,通過這個效果激發(fā)學(xué)生的積極性。要求學(xué)生在期末的時候編寫出相應(yīng)的程序。有了這個任務(wù),在講課的時候逐步的告訴學(xué)生每一章可以具體的實現(xiàn)例子的那個部分,讓學(xué)生逐步的去實現(xiàn)相應(yīng)的功能。他們實現(xiàn)了相應(yīng)的效果,就會極大地增強學(xué)習的興趣和熱情。這樣可以讓學(xué)生在愉悅的過程中學(xué)好這門課程。
4.1.2 啟發(fā)式教學(xué)
為培養(yǎng)學(xué)生邏輯思維和創(chuàng)新能力,在教學(xué)過程中,教師遵循啟發(fā)式教學(xué)原則,通過各種教學(xué)方式和手段激發(fā)學(xué)生的學(xué)習欲望,積極投入到學(xué)習活動中,積極思維,發(fā)現(xiàn)問題,提出問題,并逐步解決問題。例如,在講解程序設(shè)計舉例時,不是簡單地給出程序清單,而是從分析問題入手,繼而找出解決問題的方法,再給出算法,最后編寫出完整的程序,而在這一全過程,最關(guān)鍵的是每一步都采用與學(xué)生一起探討的方式,讓學(xué)生在啟發(fā)下思考,在思考中解決問題,從而掌握獨立分析問題、解決問題的方法。
4.1.3 互動式教學(xué)
互動式教學(xué)是教師駕馭講臺能力的具體體現(xiàn)。一個教師站在講臺上,要不斷地掃視下面的學(xué)生,觀察學(xué)生的表情,了解學(xué)生的接受程度,并能及時地調(diào)整教學(xué)的進度和步驟,必要時到達到學(xué)生與教師在課堂上互相之間的交流。允許學(xué)生在不明白的時候隨時提出問題,教師根據(jù)實際情況決定是當場解答,還是課后解答。真正實現(xiàn)課堂上的互動,其教學(xué)的效果就會顯著地提高。教師在教學(xué)過程中,還應(yīng)當注意設(shè)置疑難問題,引導(dǎo)學(xué)生思考和探索,讓他們的思想活躍起來。
4.1.4 項目分析式教學(xué)
為培養(yǎng)學(xué)生綜合應(yīng)用知識的能力,通過對完整的項目的系統(tǒng)分析,培養(yǎng)學(xué)生良好的編程習慣,善于獲取他人經(jīng)驗的能力以及掌握綜合運用所學(xué)知識的能力,從而真正提高編程水平。
4.2 激勵個性化學(xué)習
在微觀課堂上采用項目遞進驅(qū)動教學(xué)法,改變滿堂灌的做法,將學(xué)生的眼手腦全部調(diào)動起來。精心設(shè)計實例,給學(xué)生一個比較實際的切入點,通過老師的演示使學(xué)生感覺能夠入手,然后再通過將此實例不斷修改、擴充,引導(dǎo)學(xué)生參與到程序的編制過程中,在這個過程中,再將學(xué)生所作的程序展示,讓學(xué)生來評判優(yōu)劣,吸收優(yōu)點,修改錯誤,引導(dǎo)學(xué)生進行優(yōu)化。在這樣的實例教學(xué)中,因為有提出問題、解決問題、擴展問題、再解決問題、對解決問題的方法評價、優(yōu)化設(shè)計等幾個環(huán)節(jié),實際上是一個螺旋式滾動向前的過程,在這個螺旋式不斷向前的過程中,能夠非常自然地調(diào)動學(xué)生的參與,而且通過問題的不斷擴展,通過一個問題的多種解決方法,有效開闊學(xué)生的思維,使得學(xué)生在課堂上真正地成為 “ 主體 ” ,教師扮演 “ 主導(dǎo) ” 角色。 這種通過一個程序的層層推進,引入課程內(nèi)容,使得學(xué)生的每一步學(xué)習都有基礎(chǔ),是循序漸進,螺旋式上升的過程,使學(xué)生的學(xué)習是在“走臺階”,而不是“三級跳”,效果很好。
4.3 加強對學(xué)生程序設(shè)計思維訓(xùn)練
《C語言程序設(shè)計》課程不僅僅是一般意義上的知識傳授,要讓學(xué)生掌握程序設(shè)計的基本方法,對學(xué)生進行邏輯思維能力的培養(yǎng)。在實際的教學(xué)過程中,我們發(fā)現(xiàn)有些學(xué)生平時學(xué)得很認真,對語法、語句等細節(jié)也很熟悉,但碰到稍微復(fù)雜一點的編程則無從下手,教師在教學(xué)過程中要樹立正確的教學(xué)思想,即注重算法設(shè)計,加強學(xué)生的程序設(shè)計思維訓(xùn)練,幫助學(xué)生順利地實現(xiàn)思維方式的轉(zhuǎn)變,而不能只單純地講授語言的語法、語義、語用,應(yīng)該將復(fù)雜枯燥的語法知識分解到一個個生動實用的程序?qū)嵗?,也就是在教學(xué)過程中以程序設(shè)計為主線,有意識淡化計算機語言本身語句的介紹,而重點介紹程序設(shè)計,在分析程序和程序設(shè)計中熟悉語法、應(yīng)用語句,掌握程序設(shè)計和解決問題的思路(算法),并把軟件工程學(xué)的思想貫穿于算法分析和程序設(shè)計的過程中。一定要避免陷入這樣的誤區(qū):教師一味地給學(xué)生講解語句的功能和語法規(guī)則,使學(xué)生陷入冗繁的語法規(guī)則之中,形成以語言為中心的思維模式。這樣教出來的學(xué)生語法背得滾瓜爛熟,只會生搬硬套,缺乏實際編程能力,所以教師應(yīng)注重培養(yǎng)學(xué)生形成以算法為中心的思維模式。對于從未受過算法設(shè)計訓(xùn)練的初學(xué)者來說,可能會感到無從下手,對此,教師應(yīng)該有意識地加強這種思維方式的訓(xùn)練,通過講授一些常用算法、典型算法,如記數(shù)、累加、連乘、兩數(shù)交換、求最大(小)值、迭代、排序、分類等為以后編寫程序、軟件設(shè)計奠定基礎(chǔ),同時典型算法熟練的掌握,也可增加學(xué)生學(xué)習的信心并提高學(xué)習的興趣,同時培養(yǎng)學(xué)生的思維能力。
5 強化實踐教學(xué),培養(yǎng)學(xué)生動手能力
實行實踐教學(xué)形式多樣化,上機操作,老師通常讓照著書本的例子進行驗證,這樣無法增加學(xué)生的成就感,使學(xué)生覺得很無聊,在《C語言程序設(shè)計》上機實驗教學(xué)中,除傳統(tǒng)的課堂實驗外,還開展課程設(shè)計、典型程序分析與設(shè)計等實踐環(huán)節(jié),還可以教師組織C程序設(shè)計興趣小組,組織C程序設(shè)計大賽,組織學(xué)生參與科研開發(fā)等,將每一階段的學(xué)習進行小結(jié)性的貫穿與能力提高。將 C 的知識點都溶化到一個個實訓(xùn)項目的程序編寫中。整個過程以學(xué)生獨立完成為主,教師只提供必要的輔導(dǎo)。經(jīng)過實踐訓(xùn)練,尤其經(jīng)過綜合訓(xùn)練中模擬實際軟件開發(fā)的演練,使學(xué)生得到了鍛煉,進一步激發(fā)了學(xué)習興趣,培養(yǎng)了問題求解和編程能力,還有利于培養(yǎng)探索和創(chuàng)新能力。
6 改革考核方式,全面實行考教分離
C語言課程所有考試均實行考教分離,這不僅促進了任課教師對教學(xué)的精益求精,而且也給了教師充分發(fā)揮、施展個人教學(xué)才能的空間。在考核方法上,考慮到高職院校是培養(yǎng)應(yīng)用性的實用人才的這一特點,該課程除采用傳統(tǒng)的筆試外,大膽采用更能反映學(xué)生知識應(yīng)用能力的上機考試,這一考試形式非常受學(xué)生的歡迎??梢圆捎枚喾N形式考核學(xué)生,重點考核學(xué)生的實踐動手能力。
7 結(jié)束語
以上是作者近幾年關(guān)于C語言教學(xué)經(jīng)驗的總結(jié),在實際的教學(xué)過程中取得了良好的教學(xué)效果。筆者認為在教學(xué)過程中除了要使學(xué)生掌握C語言程序設(shè)計這門語言外,最重要的是要讓學(xué)生樹立用程序解決現(xiàn)實問題的思路和方法(算法)。學(xué)生能否理解算法,并掌握算法,成為教學(xué)的關(guān)鍵,這是也學(xué)習C語言程序設(shè)計的重中之重。
參考文獻:
[1] 譚浩強.C程序設(shè)計[M].2版.北京:清華出版社,2001.
[關(guān)鍵詞]教學(xué)方法 案例教學(xué) 教學(xué)效果
《C語言程序設(shè)計》作為計算機專業(yè)的基礎(chǔ)課,已經(jīng)成為一門必修的課程,在整個課程體系中占有重要地位。在C語言教學(xué)過程中,從客觀上講,教師的教法和學(xué)生的學(xué)法的差異,對教學(xué)效果都會產(chǎn)生直接的影響。針對學(xué)生學(xué)習語言類課程的一般思維規(guī)律和思維模式,筆者結(jié)合多年來的教學(xué)經(jīng)驗和教學(xué)體會,把一些經(jīng)驗和方法總結(jié)出來,希望能對C語言教學(xué)有所幫助。
一、教學(xué)中存在的問題
《C語言程序設(shè)計》是一個邏輯性很強的課程。學(xué)生在畢業(yè)設(shè)計時會面臨具體的設(shè)計要求的問題,它與任何一本教材中的內(nèi)容相距甚遠,這使大多數(shù)同學(xué)感到無從下手。這其中的原因可以分成兩類:一方面目前高校使用的教材中,絕大多數(shù)結(jié)構(gòu)都基本相同。在每一章介紹完了概念之后,提供一些例題解釋相關(guān)概念的使用方法,并在章節(jié)結(jié)束后針對本章中出現(xiàn)的內(nèi)容提供一些練習題??荚嚻毡椴捎脝芜x、判斷及簡答等方式測試學(xué)生對于教材內(nèi)容的掌握程度。從實際效果分析,實際上是測試學(xué)生對各章節(jié)中的基本概念記憶程度而不是理解程度。另一方面是在考試壓力下,特別是目前的應(yīng)試考試方式中,學(xué)生更多注意的是教材中的典型例題與老師指定的重點內(nèi)容,對于程序的系統(tǒng)概念沒有真正理解,特別是沒有整體設(shè)計的概念。通過對各類考試結(jié)果的分析,可以注意到一個現(xiàn)象,在考試中涉及的綜合編程部分,學(xué)生的得分率很低。為了確保學(xué)生的課程通過率,在考試時盡可能將綜合測試部分的比例壓低或提供學(xué)生統(tǒng)一復(fù)習提綱,這樣做的結(jié)果就是學(xué)生在學(xué)習時一切圍繞任課老師講課的內(nèi)容,特別是老師講授的例題。學(xué)生在學(xué)習的過程中,沒有注意如何綜合運用相關(guān)內(nèi)容解決具體問題,導(dǎo)致學(xué)生在學(xué)完程序設(shè)計課程進入應(yīng)用階段時,面對具體的專業(yè)設(shè)計要求無從下手。
二、提高程序設(shè)計課程教學(xué)效果的途徑
1.明確課程目標
通過學(xué)習,學(xué)生應(yīng)能正確理解語言的基本概念、語法、語義并得到充分的程序設(shè)計訓(xùn)練。C語言課程一般是為應(yīng)用性教學(xué)而設(shè)置的,因此,強調(diào)實踐性是計算機語言課程教學(xué)別要注意的問題。對于計算機語言課程的教授不應(yīng)僅僅是傳授知識,應(yīng)該以培訓(xùn)能力為主。過分強調(diào)該語言的系統(tǒng)性和完整性可能會轉(zhuǎn)移學(xué)生對課程重點的注意力。C語言的內(nèi)容繁多,在有限的課時內(nèi)不可能也不必要面面俱到,所以必須突出重點,突出實用性,關(guān)鍵在于教會學(xué)生正確運用C語言編寫程序,一些細節(jié)、具體規(guī)則和進一步的知識可以讓學(xué)生在今后的應(yīng)用中查閱有關(guān)書籍。教師應(yīng)始終堅持以應(yīng)用為中心,以算法為基礎(chǔ),以培養(yǎng)學(xué)生的實踐能力為核心,突出技術(shù)實用性和再學(xué)習能力的培養(yǎng)。
2.進行教學(xué)改革
(1)教學(xué)內(nèi)容改革
程序設(shè)計課程具有很強的實踐性,要以社會對編程能力的需求和技術(shù)發(fā)展為依據(jù),調(diào)整教學(xué)大綱和教學(xué)內(nèi)容,以適應(yīng)技術(shù)崗位能力要求,設(shè)計模塊化課程體系。在課程設(shè)置與建設(shè)中,要充分體現(xiàn)教學(xué)內(nèi)容在訓(xùn)練和提高學(xué)生培養(yǎng)學(xué)生實踐能力方面的要求。適當增加實訓(xùn)教學(xué)內(nèi)容,以強化學(xué)生的實際開發(fā)和應(yīng)用能力,實現(xiàn)“零距離就業(yè)”。
(2)改變教學(xué)思想
①由整體到具體,培養(yǎng)學(xué)生對C語言的興趣及正確的思維模式?!禖語言程序設(shè)計》注重由設(shè)計算法到書寫程序并進行調(diào)試的整個過程,顯得抽象、復(fù)雜,這也是大多數(shù)學(xué)生抱怨程序設(shè)計太難、太深奧、不好學(xué)的主要原因。在教學(xué)過程中,應(yīng)該先介紹一個較完整的程序例子,該例子包含了該語言中的主要語句,目的是使學(xué)生先對程序有個初步的印象,再簡單介紹該例子中用到的語句,讓學(xué)生對該語言的學(xué)習有一個大概的了解,避免學(xué)生對學(xué)習語言望而生畏。整個教學(xué)過程中應(yīng)該把“解題思路、方法和步驟”當作授課的重點,從而讓學(xué)生明白如何分析、解決實際問題,逐漸培養(yǎng)學(xué)生進行程序設(shè)計的正確思維模式。
②一題多解,注重算法是程序設(shè)計的靈魂,是教學(xué)重點,也是教學(xué)難點,而語言只是表示形式。沒有正確的算法,計算機將解決不了任何問題。對于C語言所涉及到的算法,應(yīng)進行部分精講多練。
(3)教學(xué)方法改革
①案例分析教學(xué)。通過案例分析,重點講解程序設(shè)計的思想和方法,輔以語言知識的介紹,將課程內(nèi)容分為若干個主題,以程序設(shè)計做為貫穿各主題的主線。每個主題的教學(xué)過程由“要點講解”、“練習/上機實踐”和“疑難解答”三個階段組成。
②基于問題的教學(xué)。提出問題,以學(xué)生獨立完成為主,教師只提供必要的輔導(dǎo),培養(yǎng)學(xué)生探索問題和解決問題的能力,更有利于創(chuàng)新能力的培養(yǎng)。
③“項目驅(qū)動”教學(xué)。在理論教學(xué)中采用“項目驅(qū)動”教學(xué)法,整個課程教學(xué)圍繞一個“工程項目”進行,通過逐步拓展的實訓(xùn)項目和設(shè)計,將每一階段的學(xué)習進行小結(jié)性的貫穿與能力提高。將C 的知識點都溶化到一個個實訓(xùn)項目的程序編寫中。在課程初期,主要是進行單項的編程練習,重在掌握C 語言的基本語句、數(shù)據(jù)類型與程序結(jié)構(gòu)等。在進入數(shù)組、函數(shù)、結(jié)構(gòu)、指針和文件內(nèi)容教學(xué)時,開始實訓(xùn)項目的編程實踐,逐步組建“教師管理系統(tǒng)”,并且添加文本菜單,整合擴展記錄添加、排序、查詢、統(tǒng)計和記錄瀏覽等內(nèi)容形成課程設(shè)計。
(4)課程考核方式改革
①平時上機訓(xùn)練時給學(xué)生留一些編程習題,每次根據(jù)學(xué)生編寫情況進行測評并占據(jù)期末總成績30%。
②期末前,給學(xué)生留一個綜合實訓(xùn)題考核學(xué)生綜合解決問題的能力,要求同學(xué)們在一周內(nèi)完成,占據(jù)期末總成績30%。
③期末進行理論考試,占期末總成績的40%。
3.展示學(xué)生作品,激發(fā)學(xué)生的學(xué)習欲望
計算機軟件課程具有多樣性、復(fù)雜性和求異性特點,我們要針對每個學(xué)生任務(wù)完成的情況,讓同學(xué)們展示自己的勞動成果,及時肯定學(xué)生的成績,這樣會有利于激發(fā)學(xué)生們的學(xué)習熱情,保持濃厚的學(xué)習興趣,對學(xué)生的后續(xù)學(xué)習將產(chǎn)生強大的動力和自信心,也可以對每次任務(wù)的完成情況進行積分制度,算入期末成績中,以激發(fā)學(xué)生們的興趣。
4.自始至終培養(yǎng)學(xué)生的自學(xué)能力
學(xué)生學(xué)習軟件的最終目的是編寫滿足需求的程序,所以我們在教學(xué)中教授的不僅僅是具體語言的語法知識,更重要的是通過這門語言學(xué)習,培養(yǎng)學(xué)生遇到實際問題自己分析問題、解決問題的能力。我們可以通過給學(xué)生布置作業(yè)的形式讓同學(xué)們自學(xué),初始階段往往會遇到因為學(xué)生自學(xué)能力差而帶來的困難,所以在學(xué)生完成任務(wù)時,老師既要要求學(xué)生獨立思考、自主學(xué)習,又要鼓勵學(xué)生間進行協(xié)作學(xué)習。教師可以分配一些比較復(fù)雜的問題,由幾個學(xué)生組成一個小組合作解決,這樣同學(xué)們可以互相探討學(xué)習方法,協(xié)作解決一些遇到的問題,通過解決問題,鍛煉學(xué)生綜合應(yīng)用知識的能力、培養(yǎng)其創(chuàng)造性和合作精神。
參考文獻: