時間:2022-09-24 18:09:39
序論:好文章的創作是一個不斷探索和完善的過程,我們為您推薦十篇c語言程序設計實例范例,希望它們能助您一臂之力,提升您的閱讀品質,帶來更深刻的閱讀感受。
1.鐘表入題
首先,拿出準備好的鐘表,(這時學生們都很好奇,原本趴桌子的同學都起來了,都問我這堂課要做什么)我不直接告訴他們要學什么,那樣他們馬上就會失去興趣,我沒有正面回答,而是讓學生們猜兩個問題:
(1)老師用鐘表做什么?
(2)教師通過擰弦撥動鐘表的指針,請同學觀察,猜老師接下來要做什么?
開門見山的點出本課內容,學生往往不能全部集中精神,同時還會有部分同學覺得不感興趣,直接就放棄學習。正處青春期的他們,富有強烈的好奇心,非常關注除課本以外的東西,我用一個鐘表來調學生胃口,通過設疑的方式,來引著學生集中精神,從而引出課題。
接下來,老師繼續出示問題:
觀察表盤上有幾個變化的量?他們之間是不是孤立無任何關聯的?如果不是,那存在什么樣的關系?其中哪個轉的最快?哪個最慢?用學過的單層for循環能否表示出三個指針的轉動關系呢?學生能夠通過觀察依次回答出結果,使復雜課題變得簡單易懂,拉近了理論與實踐的距離,學生順暢入題。
為了讓學生,能夠清楚的知道本課的地位及為什么要學習本課,本課學了能夠做什么,我設計了思維導圖。學生通過觀察,了解到原來多重for循環能夠解決這么多好玩的問題,于是從內心里認識到多層for循環用途很大,從而將剛才被激發起來的興趣進一步強化,為下一步的探究打下了情感基礎。
2.共同探究
教師要求學生根據鐘表的特點,列出三層for循環條件,結合前幾節的程序知識,以小組為單位,合作探究出多重for循環的格式及執行過程。因為第一個環節,老師給出的問題比較細化,加之學生有一定的自學基礎,學生可以衍生出格式及推出執行過程。為了激勵學生,老師深入小組中,給每個學生評價打分,并在小組匯報結果時,根據出現的問題多少進行評價打分。
3.任務拓展,聯系實際(能學,會學)
老師現在手里有100元錢,想給你們反餐費,我需要破成一元,五元,和十元的,班級共30名同學,要求破成30份,方案應該有很多,現在咱們想辦法把這些方案都列出來,然后根據咱班人數,選一個最佳的破開,請大家幫我想想,方案都有哪些呢?
設計意圖:百錢買百雞,是多重循環的典型事例,我根據我班每個月都要反餐費這樣一個活動,將百雞換成了百錢破零錢,學生們就會更積極的參與,想幫老師解決問題。接下來,學生不一定能馬上想到運用本課的多重for循環解決,而是習慣性的在紙上列出數學式,想通過數學方法解,可是會發現,用數學解決多解的題目很困難,于是,我提示大家,嘗試運用本課的多重for循環來解。學生恍然大悟,結合鐘表案例的分析,通過改變變量條件,循環語句很輕松的列出了程序,然后將程序錄入計算機調試,電腦瞬間輸出所有方案,學生們非常興奮。真實地掌握了運用電腦,程序來解決實際生活問題的方法,體驗了程序給生活帶來的便捷,從而成功的突破了本課的難點。
4.小結評價,激勵學生(助學)
中圖分類號:G642.0文獻標識碼:A文章編號:1009-3044(2012)06-1351-03
Case Discussion Method in《C# Language Program Design》Curriculum Practice
LI Hai-bo,MA Ming
(Nanyang Institute of Technolgy, Nanyang 473004, China)
Abstract:According to C # language and the problems in the traditional teaching model, presents a case discussion teaching method. Class? room teaching will be dispersed sample combination, form a case module is introduced to the teaching practice, using case teaching method to arouse the students’ interest in learning, training students thinking of object-oriented programming and the ability to analyze and solve problems, in order to make students to learn in order to practise purpose.
Key words:C# language; classroom teaching; examples of teaching; teaching mode; case discussion
隨著互聯網技術發展越來越快,人們對網絡應用程序的需求也越來越多,而C#(C Sharp)語言自從2000年問世以來,由于其安全、跨平臺、面向對象、開發速度快等特點,很快得到用戶和企業的青睞,成為當今最流行的網絡編程語言[1]。為順應社會需求,各高校計算機相關專業都將C#語言課程納入到教學計劃作為高年級的就業方向課程。但是在教學過程中很多學生反應C#語言涉及的概念比較抽象難懂,規則和類庫繁多;知識點零散,容易出錯;學生在遇到實際編程問題時感覺“無從下手”。作者從實際教學環境入手,對《C#語言程序設計》課程從教學方法、教學手段等方面進行了一些改革,并取得了較好的教學效果。具體改進措施和方法如下。
1案例討論教學法對傳統教學方法的改進
1.1傳統教學方法存在的問題
目前,《C#語言程序設計》課程是我院07級、08級軟件工程專業的就業方向拓展課程。該課程是C++語言的后續編程課程,目的是讓學生在建立面向對象編程的基礎能力上熟練掌握C#基本語法規則,并提高實際編程能力。以往的教學方法都是先從基礎概念入手,再就C#語言所帶的基本控件進行講解,其中著重講解C#如何操作數據庫中的數據。每節課先以理論概念結合一些簡單示例程序講解,最后安排學生上機操作加以深刻理解。
在以往的教學模式中,教師按照教科書編排順序進行教學,講授大量編程知識,但學生遇到實際項目編程應用并不理想。平時的知識點和課堂示例過于分散,學生無法體會到各個知識點之間的聯系;學生在學習過程當中感覺平時的知識點很抽象,課堂上掌握的只是些表面知識,并不能正確的理解和加以應用;即使課堂上聽明白了,時間一長有些知識點又會遺忘。經常在實際的編程項目中感覺“無從下手”。久而久之導致學生逐漸失去了編程的興趣和信心,覺得沒有實際用途,并產生消極情緒[2]。
綜上所述,產生問題的原因在于傳統教學方法只是讓學生掌握了基本編程知識,知識點之間的結合應用不夠靈活,在實際項目應用當中想不到應該使用哪個知識點來解決問題,因此,為了改善這種現狀,有必要對C#課程的教學模式進行改革和探討。1.2案例討論式教學方法
C#語言的課程內容既豐富又零散,要求學生既要理解一些抽象的概念、方法又要具備一定的編程、動手能力。這就要求教師在現有課堂教學時間當中充分調動學生的積極性、主動性和參與性,采用先進的教學模式和手段,師生共同配合較好地完成教學任務。
在傳統教學中,當理論知識講述之后,針對該知識點做出示例,可以使學生加深對該知識點的理解,掌握知識的使用方法。但 是平時的課堂示例只是單獨的幾個知識點,如何把相關的知識點聯系起來完成某個功能模塊,這是我們考慮的問題。
案例討論式教學法是運用實際案例進行交互式教學的方法。在教學過程中,要求以實際的案例模塊作為被解析對象,在教師指導下按照軟件工程的思想將某一工程項目分析解剖,以其中某一模塊為實現目標,學生共同參與案例的分析、討論,尋找實現途徑。通過這種教學活動達到學習知識、分析問題、解決問題的目的。
通常情況一個案例應用到多個知識點。比如一個登陸模塊的實現,它需要熟練掌握C#的基本語法、IF…ElSE語句、數據庫操作等知識點并結合使用。所以在本課程教學中,筆者經常在講授一部分知識點后,把各個知識點串聯起來放在實際的案例模塊當中。先組織學生參與討論,分析出該案例中某個模塊需要哪些知識點來完成。學生通過文字描述整個模塊的實現過程,最后指出知識點在整個案例實現過程中的具體環節,確定軟件處理流程,上機編碼。這種方法可以使學生遇到問題后回顧以前所學知識,并把知識跟實際案例相對應,從而解決實際問題。
經過一段時間的零散知識講解之后,應該把幾個零散的知識點貫穿起來,結合實際的項目需求,組織學生分析討論。這樣不但學到了知識,還可提高對案例的分析、解決問題的能力,能夠達到學習與實踐的統一。因此,案例討論式的教學模式是一種幫助學生快速適應未來職業需求的學習形式。
3 C#課程案例討論式教學實踐與教學質量評價方法
3.1“案例討論”教學模式的實踐
在“案例討論”的C#課程教學過程中,根據該教學程序將整個教學活動分為以下幾個階段:
(1)案例需求設計
案例應該是一項具有實際意義的工程任務,也是某一具體項目中的一個模塊,它的選取是學習的關鍵[3]。首先,案例設計要目標明確,既要滿足教學要求,又能有一定應用價值;其次,案例設計要符合學生的特點,案例中應該包含之前所講授的部分知識點,難度要適中,在平時的教學情況下學生可以分組進行討論、明確的目標后安排學生的學習,在這一過程中要對本班學生的具體情況進行分析,定義基本任務,還可以有延伸問題;最后,案例設計要符合面向對象和面向工程的要求,讓學生按照軟件工程的設計要求制定該案例的分析方案。案例整體結束后,師生可以共同評價其工作成果。
教師在設計案例時,設計一個案例,讓每個小組討論同一個案例,這樣可以在后期進行組與組之間的對比,激勵組內成員的團結性。
(2)案例討論前的必要準備
在布置任務之前,學生已經學習了該案例模塊的基本理論知識。但在實際教學過程中,每個知識點有可能都是獨立的,缺乏知識點之間的聯合應用,學生很難對一些理論知識系統理解,一旦馬上進行項目應用往往難以適應,感覺“無法下手”等情況,因此教師在進行布置任務前有針對性的以前知識點進行必要的復習,同時也能對學生的學習情況,相關知識的掌握情況有一個了解。這樣就為教學的開展做了必要的鋪墊。
(3)組織學生討論
案例討論是以學生為主體,但一個案例模塊如果讓一個學生去思考,可能會在思路上受到限制、難度有時過大。如果讓所有人都參與,則合作、分工難度過大,因此,學生的組織應以小組為單位,可自由組合也可由教師編排,每組5人左右,指定其中一人為小組組長,最后討論出整個流程,并對整個流程分析出需要哪些知識來實現。這樣既能鍛煉學生的分析問題、解決問題能力,也能鍛煉學生在項目開發過程中的溝通協調能力。
(4)采用“討論式”教學方法,監控整個討論流程
學生以小組進行討論時,教師可以指定整個討論流程,規定時間限制,一般討論30-40分鐘時間,先讓每個小組針對該模塊確定工作流程思路,寫出文字描述的軟件工作流程,再次針對每個小組自己設計的軟件工作流,指出流程中需要的知識點名稱,最終提交整個流程文檔。由小組成員提出自己的見解和工作計劃并在這一過程中相互啟發、相互學習,經過討論最終確定出較好的解決方案。在這個過程中教師應采用“討論式”的教學方法,組織同學們一起對方案和遇到的問題進行討論,充分發揮學生的主動性和創造性。
(5)教師講評
教師將每個小組的最終文檔匯總,如果思路流程正確優秀的小組可以得到好評及表揚,對思路有問題的小組教師可以適當的指出其問題的所在,加以糾正。最后教師就該案例,說出正確的軟件工作流程,在該流程中所應用到以前學習過的知識點,讓整個學生明確思路和解決方案,布置模塊編碼任務,從而為功能編碼的實現打下基礎。
(6)實際編碼環節,提高上機質量
在傳統的教學模式中,上機實驗由教師根據教材內容進行編排,主要以書上的例題、課后習題為主,學生只是將程序敲入計算機,運行一下即完成了上機任務。雖然程序運行結果正確,但對程序本身的設計理解并不透徹,只是掌握了該知識點的使用方法,無法理解在實際的案例工作中應該如何應用。
在“案例討論”的教學模式驅動下,以案例討論為主線,明確遇到問題首先應該考慮使用以前的哪些知識點解決,待思路和知識點完全確定后,再進行編碼,這樣可以有效的解決學生遇到實際項目時難以下手,也不知從何下手的問題。最終以討論文檔和案例程序為階段考核和評價的依據,充分利用實驗環境和條件,加強上機實驗的應用效果,保證教學質量。
3.2教學質量評價方法
C#語言是一種面向對象的程序設計語言,針對C#語言及“案例討論”中理論學習與實踐并重的特點,在考核過程中采用新的教學質量評價方法,即將考試機制與案例討論實現有效結合,綜合評定教學效果。
以往的考核形式多為期末筆試+平時成績(出勤、作業等),這種評價方式雖然能反映學生的學習態度及對一些基本概念、知識、理論的掌握情況,但無法全面反映出學生對知識點實際的理解和靈活應用,因此將考核形式變為期末筆試+案例討論報告+案例程序,其中期末筆試主要檢驗學生對基本概念、語法、結構的學習和掌握情況,測試的是學生的基礎理論部分,這部分成績可占整個評價結果的50%;而案例討論也作為一項考核內容,重點考核的是學生的分析問題解決問題的能力,最終以平時的討論報告為主要依據,因此其成績將占整個評價結果的25%;最后一個部分為項目源代碼,主要考察學生的實際編碼能力,按小組分工給出具體的分數,占整個評價的25%。
采用案例討論為核心的教學模式,將原有的以“課堂、教師、書本”為中心的架構變為以“課堂示例、案例分析、實際應用”為中心的架構,將所學知識與實際應用緊密結合,學生既學到了知識又得到應用鍛煉;教師既完成了教學又培養了學生的能力,達到了“教書、育人”的雙重目的[4]。
4結束語
案例討論教學對于語言程序設計課程來講是一種比較有效的教學模式,它突破了傳統教學模式,讓學生學習一段基礎理論知識之后,通過對實際案例問題的分析來理解掌握知識點,這樣不僅能快速地掌握所學知識,也為代碼的實現打下了堅實的基礎,而且能夠培養學生的社會責任感和團隊合作能力,提高學生的具體分析能力和解決實際問題的能力,培養出的學生能很快適應市場需求,有助于解決學生的就業問題。因此,案例討論教學方法不僅適合計算機程序設計語言教學的需要,也是應用型軟件開發設計人才培養的一個有效途徑。
參考文獻:
[1]吳曉艷. C#語言程序設計精品課程建設的探索[J].科技信息,2010(25):48-50.
[2]蔣衛祥,朱利華.項目教學法在JavaWeb程序設計教學中的應用[J].科技信息(學術版),2006(9):410.
[3]李桂瓊.程序設計課程的教學改革初探[J].計算機時代,2007(8):73-74.
[4]呂曉華,李素朵,張燕.任務驅動教學模式在java課程教學中探索與實踐[J].北京:硅谷,2008(9):180.
[5]張悅.項目驅動教學法在C語言課程中的應用[J].職業教育研究,2007.
一、C 語言程序設計的教學現狀
C 語言程序設計集抽象性、邏輯性、實踐性于一身,在教學過程中解決好這三性就能提高學生的學習興趣,減輕學習壓力。傳統的C 語言程序設計教學中,主要以教師講授為主,且在教學過程中采用的大多是純數學的抽象案例,這對于高校學生,尤其是獨立學院學生而言,既抽象又枯燥無味,因而難以理解和接受,起來自然沒有動力,導致課堂教學質量不高,學生學習興趣不濃,學習效果不佳,不能真正理解程序設計的精髓,進而普遍反映C 語言難學。如何借鑒先進的教育理論和技術,轉變教師角色,真正確立學生學習的主體地位,充分調動學生學習積極性,成為教學改革當務之急。
二、獨立學院學生素質特征
獨立學院是高等教育發展過程中出現的新生事物,它有自己獨有的特征,應用型人才的培養是其目標,學生的素質與普通高校學生的素質特點又有一定差異性,若按照傳統的教學模式,大多數學生的課堂聽課情況不容樂觀,注意力難以保持持續集中,如何保持較高的課堂效率也就成了每位教師所面臨的一道難題。針對這一問題,筆者一方面通過走訪有經驗的老教師,了解獨立學院學生的學習習慣,另一方面通過對學生進行問卷調查及當面交流,對獨立學院學生素質情況有了較為充分的了解與認識。
針對獨立學院大多數學生一方面學習自覺性不高、依賴性強,往往滿足于課堂上所學,缺乏刻苦學習精神,但另一方面對自己感興趣的課程又十分喜愛,筆者根據其活潑、好爭辯的特點,有的放矢的進行了教學改革,使課堂效率和學生的學習積極性都有了顯著提高。
三、教學改革的重點
根據獨立學院培養應用型人才的目標,以及獨立學院學生的素質特點,結合自己多年的教學經驗,通過對傳統的“ C語言程序設計”教學模式進行改革與實踐,變老師主導型教學為與學生交互型學習的教學過程,在教學過程中不斷探索新的教學方法和嘗試先進的教學手段,首先,對教學用例進行了調整,用生活中常見的案例原型進行講授。其次,充分利用現代教育技術資源,將實驗環境搭建于課堂之上。從備課——上課——上機實踐,進行了一系列的改革探索,很好地解決了 C語言程序設計教學中出現的種種問題。結果表明:教學改革后,課堂氣氛活躍了,開小差的同學少了,聽課效率上去了,學生學習主動性也加強了,課外主動學習的興趣濃了。進而,程序設計能力得到了普遍提高。
1.培養學生學習興趣
程序設計是一種能力的培養過程,這就要求在教學時注重對學生的編程能力培養。而能力的培養主要是靠強化、靠反復上機實踐去體會和理解的,是通過理論結合實踐,不斷啟發、引導,采用先進的教學方法和與時俱進的教學體系實現的。在教學之初,首先給出 C語言的用途以及學習本課程的目的,指出當前流行的 Unix操作系統等基本上是采用 C語言實現的,許多網絡及單片機、嵌入式系統以及各軟件開發平臺與 C語言的相關性,強調了 C語言的基礎性和實用性。通過介紹,學生明白了該課程的重要性,對學習該課程產生了動力,增強了學習興趣。在課程教學計劃的制訂中,我們注重加強實踐與訓練環節比重,按 1∶1的理論課堂教學與上機實踐時間進行配比,還強調了理論教學內的實踐環節,使得實踐課時數實際上超過理論課時數。教學強調一個“練”字,學生通過反復實踐,增強了學習信心,課外也自覺學習了。
在教學中,注重把教學重心放在解決問題的算法分析上,培養學生分析與解決問題的能力。我們知道,算法的實現是圍繞內存展開的,所以,在教學改革過程中,通過強調馮·諾依曼結構下的計算機運行機制,強調了內存的重要性,在教學過程中始終貫穿內存分配及緩存機制的實質。這樣,在講授數組與指針、結構體變量的內存分配時,學生理解就相對容易多了。在案例的選擇上,我們通常采用生活中的趣味性、實用型的諸如水果拼盤問題、超市 POS、學生成績管理系統等相關模塊進行教學。例:引入循環時,通過用一個簡單的例子:一個同學準備圍繞運動場跑十圈,請另一個同學幫忙計數,要求每跑一圈告訴所跑圈數信息。用通俗易懂,既能吸引學生,又易形成互動,活躍課堂,提高課堂效率的案例始終貫穿整個教學過程,注重從直觀到抽象,從特殊到一般漸進地學習,既避免了許多教材主要是數學化抽象案例的弊端,也避免了學生在學習語法知識的過程中既要用心掌握好相關語法知識,又要分散精力去思考數學實現,從而減輕了學習負擔,提高了學習熱情。通過對案例實現過程的分析,引導、啟發學生逐步理解與掌握分析解決問題的方法與步驟,使整個學習過程下來,既能輕松掌握語法知識,又能在分析與解決問題上有所收獲。最終通過各案例相關模塊實現融會貫通,加深對程序設計的結構化、模塊化設計思想體會,真正達到學習 C語言程序設計的目的。
關鍵詞:C 語言;循環控制;趣味實例
中圖分類號:G642
文獻標識碼:A
1引言
“C語言程序設計”作為一門實用的編程語言,功能強大,編程風格自由靈活。在近幾年的教學中發現,學生普遍認為這門課難度大,不容易學。如何通過教學方法的改變,讓學生在學習上有主動性,激發學生學習該課程的興趣,是講授這門課程的教師應該考慮的問題。從目前大多數高校的教學情況看,現在一般多已采用多媒體教學。這種教學方式比起以前在黑板上講授是有了一定的進步,但在目前的課堂教學中,還是以教師講授為主,沒有充分發揮學生學習的主動性,啟發式教學沒有得到充分運用。
2采用趣味實例教學
在“C語言程序設計”課程講授過程中,要特別注意培養學生的學習興趣。初接觸計算機時,很多學生感到新奇、好玩,這不能說是興趣,只是一種好奇。隨著課程的不斷深入,大量的語法規則很容易使一部分甚至是大部分學生產生枯燥無味的感覺。為了把學生的好奇轉化為學習興趣,采用趣味程序的例子激發學生的積極性,從而在實例中掌握C語言的語法和程序設計方法。這種方法的優點是可以根據教學內容,選擇合適的例子,使學生掌握所學內容,趣味程序例子的選擇至關重要。在每個實例的基礎上,對學生多提問,并進行擴展,以復習前面學過的知識,也可以鞏固當前學習的內容。通過啟發式教學,讓學生做更多的練習,加深對語法和程序設計方法的理解,掌握課程的精髓。為了實現課程的教學目標,培養學生的問題求解、編程和探索創新能力,在教學中必須強調實踐訓練,使學生在大量的練習中掌握知識,培養能力。下面介紹在講授循環控制這一章中采用趣味實例教學的實踐。
3實例分析
在循環控制這章中主要介紹while語句、do-while語句和for語句這三種循環語句。
3.1while語句
在介紹用while語句實現循環的一般形式和執行流程后,讓學生思考用while語句編寫程序實現猜數字游戲。先給出程序的運行結果,如圖1所示。只要輸入的數字和給定的數字不相同,就再重新輸入,這種操作可通過while語句來實現。循環程序不停地讀、檢查和處理數據,直到遇到事前指定的表示結束的值,循環才終止。在判斷不相等的同時,提示用戶輸入數字與給定值是偏大還是偏小,這個功能可運用條件運算符來實現。這樣也對C語言中唯一的一個三目運算符有更深的認識。在此基礎上,可讓學生思考再增加程序的一些功能,如統計猜數字的次數、密碼驗證等,使程序更充實。具體程序如下:
void main()
{int a,k=9;
printf(" ------猜數字游戲------\n");
printf("請輸入0到10之間任意一個整數:\n");
scanf("%d",&a);
while(a!=k)
{(a>k)?printf("高了\n"):printf("低了\n");
printf("再試一次!\n");
scanf("%d",&a);
}
printf("恭喜你,猜對了!\n");
}
3.2do-while語句
do-while語句的執行流程是先執行循環體語句一次,再判別表達式的值,若為真則繼續循環,否則終止循環。do-while語句與while語句不同的地方在于do-while是先執行循環體,后判斷表達式的“直到型”循環,而while語句是先判斷表達式后執行循環體的“當型”循環。因此,do-while語句中的循環體至少被執行一次,對于循環體內容執行的次數由用戶來決定時就可采用此循環語句。語句如下:
do
{ //其它循環語句
printf("繼續嗎(Y/N or y/n)?");
scanf(" %c", &reply);
}while (reply == 'Y' || reply == 'y');
例如設計一個簡易計算器,可以實現加減乘除運算,由用戶輸入表達式,程序給出正確結果。采用上面介紹的語句即可實現多次運算,運算的次數由用戶決定。采用多分支選擇語句(switch-case)實現選擇哪種運算。程序運行結果如圖2所示。
3.3for語句
for語句使用最為靈活,不僅可以用于循環次數已經確定的情況,而且可以用于循環次數不確定而只給出循環結束條件的情況。for語句的循環應用除了計數外,還可用空語句作為循環語句中的循環體,循環中不實現任何功能,只是使CPU等待一定的時間后再繼續執行程序,即循環體作為延時循環。模擬延時一秒的函數如下:
void Delay(void) //函數功能:模擬延遲1秒的時間
{ long t;
for (t=0; t
{
//循環體為空語句的循環,起延時作用
}
}
循環變量t的上限由CPU時鐘和需延時的時間共同決定。首先定義三個全局變量,分別表示小時、分鐘和秒,若秒值為60,表示已過一分鐘,則分值加1;若分值為60,表示已過一小時,則小時值加1;若小時值為24,則重新從0開始計時。秒值每次增1,調用一次延時函數。程序運行結果如圖3所示。對該程序進一步擴展,要求學生在上機實踐課中編寫模擬電子時鐘的程序。學生在上機編程中增加了輸入當前時刻的部分,并能使程序正常運行,極大地激發了學生學習C語言的興趣。
3.4綜合實例
在介紹完循環控制章節的各種循環語句后,給學生布置一道設計自動柜員機的問題,在上機實踐中由學生分組設計完成。先給出程序的執行界面,如圖4所示。要求學生利用循環嵌套和switch語句等對自動柜員機功能菜單的各種選擇進行判斷和相應處理。在主程序外加上各個子程序,成為一個完整的程序。
4結束語
“C語言程序設計”課程所進行的趣味實例教學實踐有助于學生更好地掌握課程的核心內容,激發了學生繼續探索和學習的興趣,培養了學生的創新能力,發掘了學生的創新潛能。教學必然是一個需要持續改進和完善的過程,我們將不斷總結課程教學的經驗,使C語言教學邁向新的臺階。
參考文獻:
[1] 譚浩強. C程序設計[M]. 北京:清華大學出版社,2007.
[2] 蘇小紅. C語言程序設計教程[M]. 北京:電子工業出版社,2002.
[3] 江靜嵐. C語言教學方法探析[J].計算機教育,2007(21).
Teaching Method of Applying Interesting Examples on C Language Programming
FAN Hong, WU Yi-zhi
中圖分類號:G642 文獻標識碼:A 文章編號:1003-2851(2011)09-0-01
一、引言
隨著我國的高等教育的普及化,民辦教育已成為我國教育體系的重要組成部分。C語言程序設計課程是我院部分專業學生必修的基礎課程。該課程的教學目的是向學生介紹程序設計的基本知識,培養學生解決和處理實際問題的思維方法與基本能力,使學生具有初步的程序設計和程序調試的能力,為今后使用C語言解決實際問題打下良好的基礎。為此,筆者在從事民辦學院C語言程序設計課程教學的過程中,針對我院學生特點,對教學方法和實踐教學環節的教學改革做了一些探索。
二、課程教學面臨的問題
目前,在C語言教學中存在著以下幾方面的問題:
(一)獨立學院在校學生的基礎比較薄弱。
(二)C語言牽涉到的概念復雜,規則繁多,使用靈活,使學生在學習時感到厭倦。
(三)缺乏較好的教學方法
傳統的教學方法已經不能適應獨立學院教育的特點,采取何種適合獨立學院學生的教學方法,是教學改革的一個重點。
因此,面對新的教學對象,如何豐富教學方法、改革教學模式、加強對教學過程的管理、保障教學任務的順利完成,是我們必需認真思考和解決的問題。
三、課程教學改革的實踐與探索
(一)對比式教學的應用
對同一問題,引導學生從不同的角度去思考,找出多種方法來解決。比如,在解決1+2+3+….+100的和的問題時,可以采用for循環,或while循環,也可以采用do…while循環。這種對同一問題尋找不同解決方法實現的教學方式,有效地開闊了學生的思路,同時通過對不同循環的比較,能夠找到這三者之間的聯系與區別,加深學生對循環的理解和掌握。
(二)溫故而知新
為了使學生能舉一反三、觸類旁通,每次教學結束時及時布置相關的課后練習,使學生在課后進一步復習鞏固,同時在下一次課講課之前,將上節課的重點以習題的形式讓學生當堂完成,并且當堂給予訂正與講解,對完成好的同學給予適當的獎勵,激發學生的興趣。為學習以后的知識奠定堅實的基礎。
(三)注重情感教育
教師無論在課堂上還是在課下都應該關心同學,了解他們的思想動態,及時與他們交流,解決他們各方面的困難。使學生從心理上能夠喜歡老師,達到愛屋及烏的效果。
(四)加強實踐教學環節
1、啟發學生的學習興趣,使學生的學習由被動變為主動。定期組織涉及到大量的典型應用的計算機程序設計競賽,激發學生的學習興趣,鼓勵學生參與項目,使學生學以致用。
2、加大實驗教學力度,真正培養學生解決實際問題的能力。對實驗要有老師演示,學生模仿,到最后的逐漸放手,讓學生自己來實現源程序編寫、調試和運行。以鍛煉學生的動手能力、創新能力和表達能力。
(五)充分應用現代教育技術
教學中采用電子演示文稿、大屏幕多媒體聯機演示、網絡教學等各種先進的教學手段,使課堂教學生動活潑,既提高教學效果,又提高教學效率。
1、充分利用多媒體技術將課程的重點難點以及抽象的內容通過動畫的形式直觀、形象、生動地展示出來,使學生更易于理解和掌握;2、利用網絡將課堂教學延伸到課外,學生根據需要通過網絡學習有關的內容。教師的課件和教學用資料上傳到教學資源下載中心,方便學生課外學習和復習;3、建立QQ群,同學們可以在群里相互解決疑難,也可以通過在線老師解決,這樣可以使遺留問題及時得到解決。
四、結束語
通過C語言程序設計課程存在的問題的思考和分析,針對現狀,結合獨立院校實際,結合教學和個人體會,提出一些改革的措施和想法,探索出一套適合于獨立學院學生的教學方法。
參考文獻:
[1]張天寶,王攀峰.討論新型教與學關系的建構[J].高教研究,2001.
[2]沈軍.C程序設計語言課程的教學新思路[J].電氣電子教學學報,2000,(4):28-29.
中圖分類號:G642文獻標識碼:A文章編號:1009-3044(2012)16-3921-02
CBE是英文Competency Based Education的縮寫,其含義是以能力培養為中心的教學體系。它是近年來北美較為流行的一種教學模式。這種教學體系強調的是職業或崗位所需能力的確定、學習和運用。在北美,CBE從產生、發展、應用至今只不過二十幾年,但其影響是十分深遠的,是高等教育的一次技術革命;雖然我們已深深認識到了高等教育應以能力培養為中心,并做了不少嘗試,但始終沒有脫離“灌輸式”的教學模式。
數據庫程序設計語言Visual FoxPro(簡稱VFP)是支持可視化開發和操作的、面向對象的關系型數據庫系統,它易學、易用、易維護,而且開發效率高、投資小,因此,在中小型數據庫市場得到充分應用。目前VFP已成為各高校非計算機專業普遍開設的計算機程序設計課程。
VFP課程的常規教學方式對學生學會并應用好這門語言來說有一定的難度,主要表現在:教學內容沒有創新性,沒有突出實踐能力的培養;學生學習目的不明確,學習積極性不高,上課的注意力不夠集中;教學內容抽象,組織教學的形式單一,缺乏啟發式教學,課堂教學與上機脫鉤,與工程實踐脫節,學生的應用能力不強。
對獨立學院來說,主要是培養應用型本科人才,發展優質的大眾化高等教育是我們努力的目標。因此,可以借鑒CBE教學模式,改革和完善數據庫課程的教學內容和教學方式,以適應培養高素質應用型人才的要求。
1 VFP教學中存在的問題
根據多年的VFP課程教學經驗,對該課程進行了分析和思考,VFP程序教學存在以下問題:
1.1教學內容枯燥
教學內容以理論知識為主,與創新性和實踐能力的培養要求脫節。學生的編程思維不符合軟件開發的規范要求,實踐應用能力得不到提高。學生學習目的不明確,學習積極性不高。學生不知道為什么要學習VFP程序設計語言,學完后不知道怎么應用于項目開發。選擇課程的教學內容要合理,重點、難點突出,與工程實踐緊密結合。
1.2組織教學形式單一
傳統VFP教學過程都是先上完理論課,再去上機練習課堂中的內容。不少學生上機很盲目,不知道怎么去聯系課堂知識完成實驗。VFP實驗指導書沒有依據學生所學內容進行編制,使學生很難按照規范完成綜合程序的設計與開發。
1.3灌輸式的教學方式
傳統教學以教師為中心,以課堂為主體,上機只是作為驗證理論的手段,不能使學生系統、全面地認識地掌握知識,不能激發學生的學習興趣。因此,要變被動為主動,變"你要學"為"我要學",就應以學生為主體,以能力培養為中心來組織教學,使每一堂課都變成"我想學什么"和"我要如何學",充分調動學生的能動性。這樣教師的作用不是向學生灌輸知識,而是幫助和推動學生去建構自己的知識。這不僅是一個方法問題,而且需要從根本上轉變觀念的問題。教師只作入門性的、重點的、帶有啟發性的講授,而不糾纏在每一細節,指導學生通過自己看書和上機掌握所學的內容。
2教學改革措施
根據獨立學院非計算機專業VFP課程教學的現狀和學生層次的特點(平均入學成績較低,學習基礎較薄弱,整體層次參差不齊),提出以培養應用型人才為目標,遵循教學規律,創新教學內容和教學形式,包容學生的不同特點,大幅提高教學效果。
2.1教學內容的創新
根據我院VFP課程教學大綱的要求,將創新性和實踐能力的培養提到突出的位置。一是把課程教學與工程實踐相結合,教學中引入項目實例,引導學生動手開發數據庫應用系統;二是將整個VFP課程教學與課程設計,畢業設計,計算機等級考試,電腦大賽等有機結合到一起,通過綜合訓練,使學生較好的掌握應用技能,增強就業的競爭力;我們把實驗內容分為基本階段和提高階段。基本階段是貫穿在課程始終的上機實踐環節,要求學生掌握VFP上機指導書上的各項基本內容,必須在實驗課上保質保量地完成(如數據庫的基本操作、查詢與視圖、基本表單、控件、類和菜單的設計等內容)。都要求學生自己設計,自己調試,教師只是起引導、輔導的作用;提高階段在整個課程結束后的時間內完成,實踐的難度有所增加,設計范圍廣,也更接近實用。例如設計學生學籍管理、圖書信息管理系統等項目,要求至少5個數據表以上并互相關聯,至少有4個以上表單項,能產生兩個以上報表,有友好的人機交互界面、用戶登錄和訪問權限、系統設置功能等等。這些項目可以簡單地設計,也可以復雜地設計,有能力的學生可以拓寬思路,充分發揮。為了幫助學生順利完成項目設計,教師可提供一個樣例,但僅供參考,同時鼓勵學生通過分析案例充分發揮自己的創造力,設計完成具有個性化的作品,使所學知識掌握得更加系統、牢固。通過這兩個階段的充分鍛煉,使學生對VFP建立起一個完整的面向對象程序設計的概念。三是利用網絡教學輔助系統中豐富的教學資源開拓學生的視野,活躍學生的思維,也使他們的學習不受教學課時的限制,提高學習的主動性和自主性。
2.2組織教學的形式創新
可以進行試點教學,將課程中重要的實踐環節的教學場地改在專業機房,把多媒體教學和上機實踐相結合,課堂中學生可以跟著老師邊聽邊練,以練促學,真正達到學以致用的目的。課后學生通過網上作業系統和練習系統進行練習,教師隨時可以通過考試系統考查學生的學習情況。CBE理論以企業所需要的崗位職業能力作為教學活動的中心目標,教師向學生提供職業崗位所需的知識、技能和態度,強調的是學生“能干什么”。根據職業崗位的需要確定學習內容,以勝任職業崗位的能力作為評價學生學習效果的標準,所學科目和內容體現“夠用”為度的原則。將課程教學與工程實踐相結合,讓學生獲得模擬項目開發的經驗(比如制作學生學籍管理系統,圖書館管理系統等),將課堂教學、上機實踐,課程設計,畢業設計等教學環節緊密結合,實現真正的項目驅動下的實例教學。通過這些方式有效提高獨立學院學生實踐應用能力,在個性培養和特色發揮的前提下,達到增重就業砝碼和增加就業機會的目的。
2.3教學方式的創新
改變過去單一灌輸式的方式,以分專題課堂討論、創新性設計競賽等方式激發學生學習興趣,調動學生的學習積極性和主動性,注重引導學生提高解決問題的能力,把“以教師為主體”的教學方式轉移到“以學生為主體”的方式。VFP課程理論知識多、內容難度大,在教學中應因材施教,課程中涉及了大量的實例講解,教師應給學生理清思路,講明來龍去脈,并善于用聯想,用循循善誘的方法使學生掌握的知識“活”起來。為了引起學生的興趣,首先把已往基于VFP完成的項目及學生做的優秀程序給學生演示,同學們感到編寫程序并非是想象的那么難,要做一個程序員也并不難。在課堂中運用啟發式的教學方法,始終讓學生帶著問題思考,激發學習興趣,發揮學習的主動性和創造性。課堂教學中,不但要積極與學生交流,引導學生積極探索,而且還讓學生上講臺親自動手操作,將學生聽講的課堂變為鼓勵學生主動參與、幫助學生表達自己觀點、解釋所學的知識的場所。這樣可大大提高學生的學習主動性和積極性以及學生的實際動手能力。
CBE理論將職業工作態度融合在日常課堂教學過程中,強調學生的自學能力、與他人合作學習的能力。對傳統的實踐教育過程作進一步的探索、改革和創新,在獨立學院開展以應用型人才培養為目的的特色教育課程改革。對VFP課程來說,以實踐操作為載體,把教學場地改在專業機房,使多媒體教學和上機實踐充分結合,為學生提供盡可能多的實踐動手平臺。這樣一方面可以充分調動廣大學生的積極性和主觀能動性,促使其對專業知識產生更加濃厚的興趣;另一方面,通過對實踐過程的檢驗,可以促使學生在動手能力方面有一個質的提高,充分發揮理論與實踐相結合的應用型教學優勢,對于提高教學質量,無疑具有積極的意義。
3結束語
以能力導向(CBE)為基礎教育的人才培養模式,通過教學內容、組織教學的形式和教學方式的創新,將VFP課程教學與實踐環節緊密結合,激發學生學習的積極性與主動性,有效提高學生的VFP應用能力、計算機等級考試通過率和就業競爭力。
CBE理論認為能力是不能通過灌輸而使學生掌握的,必須通過學生積極而主動的活動來培養,因此它強調學生的主體性和學生學習的主動性。打破傳統的先理論教學后上機實踐的教學方式,將課堂教學與上機實踐結合。將基礎知識與項目的案例結合起來。將課程教學與畢業設計,計算機等級考試等教學活動結合起來。將課堂教學與網絡輔助教學系統結合起來。
學生的VFP應用實踐能力得到了鍛煉,編程水平比傳統教學方式大有提高,學習的積極性和主動性大為增強,相應的計算機等級考試通過率提高。通過調研,制定教學改革方案;重新制定教學大綱,組織實施,對非計算機專業的VFP程序設計教學有一定的指導意義。既可以應用于本課程教學,又可向其他信息類課程教學成果推廣,促進獨立學院應用型人才的培養目標的實現。
中圖分類號:G642.4 文獻標志碼:A 文章編號:1674-9324(2014)10-0066-02
一、引言
隨著微電子技術的不斷發展和廣泛應用,計算機編程語言也越來越豐富,因而學生也被要求具有應對各種語言的學習應用能力,在掌握好C語言后,對于其它語言的學習則游刃有余。基于單片機進行應用系統開發,C語言作為一種高級的編程語言,無論是現在進行嵌入式系統開發的相關企業,還是當前的全國電子設計大賽等學生競賽中,都越來越受到大家的關注,并將其作為一個主要語言開發工具。故本文提出的基于單片機的C語言教學方法,對結合單片機進行符合實際工程需求的硬件和軟件開發的愛好者或學習者有很重要的意義。
二、教學對象
本學期本人所教授的主要課程之一是《C語言程序設計》,所面向的教學對象是大一新生,大多數同學由于在高中階段很少接觸電腦,對于語言的學習更是陌生,而且數學功底比較薄弱,同時,加上學習過程中大多數學生往往缺乏積極性和主動性,遇到困難不能刻苦鉆研,往往選擇放棄。因此,針對學生的基礎情況,教學講授的進度不能太快,教學的內容不能講的太過深奧,而且教學方法要靈活多變,結合實際事物進行簡單比喻來講解,只有這樣才能較為形象地教好C語言這門課。
三、C語言的應用地位
C語言是一門使用最廣泛的程序開發工具編程語言,是極具發展前景的計算機高級語言。其作為一種結構化的程序設計語言,具有相當強的結構性、可移植性和功能性。通過采用C語言進行編程開發可以使眾多開發者專心研究所設計程序要實現的功能及相關實現算法,從而有效減少開發和軟件調試的時間。C程序設計具有良好的程序結構,對于模塊化的程序設計非常適合,故通常會采用從上至下,追求逐步求精的結構化程序設計方法,來將所要實現的功能模塊化,不同的功能通過不同的模塊去完成。這樣易于進行調試工作和方便快捷地管理好大型項目,從而最大限度地減少重復勞動。
四、單片機的應用教學現狀
單片機的學習是我院電子類專業需要掌握的一門實踐性非常強的專業課程,我院學生通過對其的實踐性學習后,能夠獨立參加全國電子設計大賽,并能較好地完成比賽項目。為使我院的單片機教學效果更好,學生對該門課程掌握的更加牢靠,故需要對單片機的教學進行大膽改革,通過在C語言的課程教學上,結合單片機以及相關的硬件設計知識進行講解。從我院電子專業開設C程序設計課程以來,通過學生所反映的情況是該門課程比較難學習,而且不知道他們在學完C語言后到底有什么用,能夠應用到哪些地方,更不知道將自己的所學應用于單片機的開發中能不能實現目標。故根據以往教師的教學經驗,并結合學生反映的情況考慮,本人覺得有必要作出這樣的改進,在C語言的課程上,通過結合單片機及相關硬件設計知識來講解C語言,并從以下幾方面引起重視。
五、《C語言程序設計》的課堂教學
1.教學設計前的思考。《C語言程序設計》不僅是電子類專業理工科學生的一門計算機公共必修課程,而且C語言也是作為計算機等級考試(二級)的考試內容之一。C語言對于大部分剛進入大學的學生來說,也是一門比較難的計算機語言課程。要做好這門課程的教學設計,首先要對學生的具體情況有一定程度的了解。該課程通常的教學法是語法格式的講解、語法要點的逐步講解和通過例題對語法的應用講解。這種機械的教學灌輸思想枯燥無味,會使學生失去對該門課程的學習興趣,所以,本人認為應該先要求學生課前對本堂課所要講解的知識進行預習,并能識記有關知識點,將不理解之處畫上記號,待課堂老師講解時再認真聽并理解所教授內容,這樣通過教師為主導、學生為主體的方式學習,教師通過精講相關的硬件設計實例,通過硬件設計所要實現的功能引出相關軟件設計,進而將軟件設計時所涉及到的相關C知識進行講解,然后通過另一簡單例子讓學生自己去通過分析來鞏固知識點。
2.結合多媒體的講解,強化實驗及實踐能力。因為教師授課的主要對象是大學一年級新生,所以需要教師采用通俗易懂,并結合簡單例子進行相關講解,這樣能夠使學生容易理解和消化。教學過程中,采用多媒體,通過編程演示加深學生對運用的語法理解和深刻記憶。并把理論知識和硬軟件的設計內容進行整合講解,讓每個學生獨立完成實際應用實驗題。
3.減少和消除學生對程序設計語言的排斥和畏懼感。本人在教學中會引導學生多讀程序,在讀的過程中領悟和提高。對于軟件生存周期的設計、編碼、調試、運行這幾個階段,本人可以通過C語言設計實例來體現,以培養學生編程中的工程思想。講授課程時以提出問題、解決問題、深入拓展問題、再解決問題,對問題進行評價和優化設計的螺旋式滾動教學的方法,收到了不錯的教學效果。
教學過程中,對于數組、指針等重要的知識點,則需要制作更生動的課件,提高學生的學習興趣和主動性。例如,在講解數組的冒泡法排序時,本人讓7位同學分別拿著一個數據牌站到講臺,進行現場模擬氣泡排序過程,通過第一次排序找到了該組中的最大值,經過第二次排序找到了次大值,通過現場的模擬以及班上同學的參與,使課堂更加豐富有趣,并且所有同學都能掌握氣泡排序的過程。由于在教學中引入的現場模擬,使同學們更容易理解這些抽象的內容,更重要的是碰到類似的問題他們會觸類旁通,從而慢慢培養出編程的興趣。
六、實踐培訓操作
上機實驗是學習程序設計語言的重要環節,自己編寫的程序上機調試運行中,可能有很多想不到的錯誤,通過改正這些錯誤,可逐步提高自己對C語言語法的理解力。在課程的教學中,會進行階段性的實訓項目,將每一階段的學習進行小結性的貫穿和提高。將相關的知識點融入到程序的編寫中,從而鞏固知識點并將瑣碎的知識點做一個整合。暑假期間,對于電子愛好的學生進行集中培訓,然后按照全國電子設計大賽的要求給大家幾個題目做,這幾個題目涵蓋非常廣的知識點,大家如果想編出程序就必須要找到課本的相應知識點進行復習,從而編出程序,學生普遍反映通過集中培訓課的鍛煉,他們的編程能力有了很大的提高,很多以前不懂的內容通過自己鉆研也懂了,通過自己的努力以后也體會到了編出程序的喜悅感,可以說收到不錯的成效。
七、結束語
C語言的教學重點是培養學生分析與解決問題的能力,這種能力的培養與學生的刻苦學習分不開,因此,在本人的課堂中會一再強調C語言不是看會的,也不是聽會的,而是親自動手實踐練會的。基于單片機的C語言開發和設計,極大地促進了單片機在生產、生活各個領域的應用,提高了程序開發效率。因而,C語言學習效果的好壞,對今后單片機課程的學習具有深遠的影響。
參考文獻:
[1]向艷.C程序設計課程教學體系和模式探討[J].計算機教育,2010,(3):112-114.
[2]譚浩強.C語言程序設計教程(第三版)[M].北京:清華大學出版社,2013.
Key words C programming Language; teaching organization; teaching method
“C語言程序設計”課程是計算機專業學生的一門程序設計入門課,是培養學生程序設計思想和能力的技術基礎課,同時也為后續的專業課程奠定了堅實的基礎。其中專業核心課程“數據結構”一般以“C語言程序設計”為輔助教學工具,學生在具備了“C語言程序設計”的基本程序設計思想和方法以及數據結構的基礎知識后,才能進一步學習Visual Basic、Java等高級語言程序設計。因此,必須將“C語言程序設計”課程的教學作為計算機專業培養的核心任務。
1 “C語言程序設計”教學現狀分析
目前,計算機專業“C語言程序設計”課程的教學大多還停留在傳統的教學模式上,主要以教師的“教”為主,教師根據教學內容的組織講授基本的概念、講解例題、布置作業給學生進行上機練習,學生在教師的指導下完成編程練習。在教學的過程中,學生完全處于被動接受的狀態,無法發揮學習的積極性和主動性,以至于大部分學生普遍反映“C語言程序設計”枯燥、難學,缺乏學習興趣,學生普遍的編程能力較差。
由于新生入校后已有的計算機專業基礎知識薄弱,學習方法欠佳,以至于學生在初次接觸“C語言程序設計”這樣抽象難學的程序設計課程時,都會難于正確把握課程的學習方法。因此,任課教師應該準確地分析學生的學習現狀,深究原因,找到解決方法,能夠最大限度地激發學生的學習興趣,引導學生合理有效地學習,并且培養學生分析和解決問題的能力。
2 “C語言程序設計”教學改革
依據培養目標的定位,教師應以培養學生基礎能力和提高學習興趣為原則,合理地開展“C語言程序設計”課程的教學改革。為此,筆者結合“C語言程序設計”的教學體會,提出如下的觀點。
2.1修訂“C語言程序設計”的教學大綱,編寫和選用適合計算機專業的教材
首先,教師應準確定位課程的教學目標和任務,“C語言程序設計”課程的教學目標主要體現在知識、技能和素質三個方面。其知識目標要求學生較好地掌握“C語言程序設計”的基本語法、語句、控制結構以及結構化程序設計的基本思想,這是學習本門課程的核心要求。課程的技能目標體現在使學生認識到算法、良好的程序設計方法及上機實踐的重要性,并且掌握算法設計和結構化程序設計的方法。另外,在素質目標方面要求培養學生利用“C語言程序設計”分析和解決實際問題的能力。其次,教師應結合教學目標和任務合理組織教學大綱。鑒于“C語言程序設計”課程實踐性較強的特點,教師還應根據教學大綱的要求,制定合理有效的實踐教學大綱,制定實踐教學內容和實施方案。實踐教學內容應緊密聯系實際應用,并強調充分調動學生的積極性、主動性和一定的團隊協作能力,另外還應注重培養學生分析和解決實際問題的能力。
依據教學大綱中教學內容的組織和實踐教學的設計,教師應合理地編寫和選用課程的教材。目前,“C語言程序設計”方面的教材甚多,以清華大學譚浩強教授編寫的《C語言程序設計程序設計》一書為代表的一系列優秀教材為課程的教學提供了較好的導向作用。但根據計算機專業的培養目標和課程的定位,教師應對教材的內容進行適當的調整。
另外,在教學過程中教師應嚴格按照程序設計的規范和方法分析和解決應用問題,應培養學生規范的程序設計方法和嚴謹的編程習慣。例如要求學生在日常程序設計練習中按照“問題定義―問題分析―算法設計―編寫程序―上機調試運行”的流程實施,并且在算法設計環節使用規范的程序流程圖描述算法。這樣一系列的措施有助于培養學生良好的編程風格和習慣,為后續其它的程序設計語言的學習夯實基礎。
2.2改革教學組織和實施策略,優化教學結構
由于“C語言程序設計”課程的實踐操作性較強,學生在上機實踐的過程中,不僅可以消化和鞏固課堂所學知識,還可激發和提高學習興趣、鍛煉邏輯思維能力。教師應注重將課本上的理論知識和實際應用問題進行有機結合,提高學生的程序設計能力,進一步培養學生分析問題和解決問題的能力。因此,課程的教學組織主要分為理論教學、上機實踐教學和課程設計教學三個環節。
其中,理論教學主要遵照教學內容的要求, 采用多媒體教學與傳統板書教學有機結合的方式,實施理論與實踐一體化的多媒體教學環境,實現交互式教學。其次,教學中應重視“興趣引導”,激發學生學習熱情,引導學生主動學習。另外,應注重以模擬實踐教學為主線,提高課堂教學的教學效果。
上機實踐教學以課堂理論教學為前導,內容設計應以鞏固和綜合運用主要知識點為主線,內容具備實用性,以循序漸進的任務驅動方式指導學生從簡單的程序設計開始逐漸擴展到完成綜合的程序設計,以由淺入深、由單一到綜合的過程展開,符合學生的認知習慣和知識的拓展,使學生利用所學知識解決實際的問題,培養程序設計的能力。
結合課程的特點,課程設計環節應利用“C語言程序設計”的基礎理論和上機實踐課中學到的編程知識和編程技巧,通過布置具有一定難度、一定編程量的課程設計任務,使學生通過課程設計掌握高級編程語言的知識和編程技術,具備分析問題和解決問題的能力。
2.3秉承合理有效的教學理念,改革傳統的教學方法
傳統的“C語言程序設計”教學方法一般采用灌輸式的單向教學法,學生被動地接收知識,并且教學知識點零散,建構系統的知識體系,另外理論教學和實踐脫節,學生只會紙上談兵,動手實作能力較差,不能利用所學的知識解決實際問題。因此,在教學過程中應重視教學方法的改革。“C語言程序設計”教學主要采用“任務驅動”、“案例教學”、“講練結合”的教學方法,三種方法有機結合,合理地組織課程的教學。
“任務驅動”教學法要求按照教學目標的要求,圍繞教學內容,合理地安排一個任務。其主要分為三個基本環節,首先提出任務,例如設計判定學生成績等級的程序;進一步分析任務,提出問題的解決方法,主要設計程序的算法;最后解決任務,講授解決任務運用的知識點,例中主要的知識點為選擇控制結構的語法及應用。
“案例教學法”以綜合的“C語言程序設計”程序案例為主線,貫穿所有章節的知識,課程教學具有系統性和連貫性。例如,提出“學生成績管理系統”案例,實現成績的錄入、添加、修改、刪除、查詢、統計和排序等功能。通過分析案例,明確系統的基礎知識和各個功能模塊的相關知識點,如表1所示。
另外,“講練結合”的教學方法主要應用于上機實踐教學環境中,采取邊講邊練的教學互動形式,完成程序設計實例。教師先講解和演示與本次實踐任務相關的應用問題和注意事項,學生按照要求動手完成實踐任務,教師及時了解學生在實踐中出現的問題,加以正確的啟發和指導。最后教師對本次實踐任務的完成情況進行總結,集中反饋出現的問題并提出解決方法。
2.4完善課程的考核方案,合理評價學生的學習成果
鑒于“C語言程序設計”課程理論和實踐并重的特點,課程考核應主要分為理論考核和實踐考核兩大方面。其中理論考核以筆試為主,考試內容應遵照教學大綱和考試的要求,突出課程的主要知識點;實踐考核主要以上機實踐教學環節制定的任務和課程設計為考查對象,客觀地反映學生掌握知識和運用知識的能力。
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2011)09-2111-02
Teaching Thinking of Assembly Language Programming Course
LUO Xing
(Hanshan Normal University, Hanshan 521041, China)
Abstract: This paper discusses the problem appear in teaching of assembly language programming course, propose some methods to improve student's ability to master the knowledge and learning interest. Discuss the assembly language teaching in Win32 platfrom in the last.
Key words: assembly language programming; teaching improvement
1 匯編語言程序設計課程教學現狀
匯編語言程序設計作為一門計算機專業的課程,其存在的合理性在近年受到爭議。有些人認為,匯編語言作為一種低級語言,指令繁多,難以掌握。另外,編程效率也不高,一個高級語言用一條語句實現的功能,在匯編語言中需要很多條指令才能實現。此外,匯編語言在時間上和空間上的優勢由于高速CPU和大容量存儲器的出現,也變得意義不大。
我認為學習匯編語言仍然具有重要意義。可以歸納如下:
1) 可以比較深入了解計算機硬件的底層工作原理,例如:CPU的工作模式,寄存器的概念,內存的尋址方式,中斷的工作原理等。
2) 熟悉各種數據表示方法。如各種數制的轉化,各種類型的數據在內存中的存儲方式。學生在系統學習匯編語言程序設計這門課程后,對二進制,十進制以及十六進制相互間的轉換應該非常熟練。對數據在內存中兩種排列方式即大端方式(Big Endian,低地址存放高位字節)與小端方式(Little Endian,低地址存放低位字節)有清晰的理解。而這些相關的概念的牢固掌握對高級語言中的數據類型以及計算機網絡編程的學習具有很大的幫助。
3) 通過匯編語言編程學習,可以促進對高級編程語言相關概念的理解。高級語言在編譯的時候,一般都是先生成匯編代碼,然后再生成的二進制代碼。所以,通過對比分析匯編代碼與高級語言代碼的實現方式,對程序的執行效率,數據在內存中存放方式,堆棧的概念,函數的調用及參數傳遞的方式等都會有進一步的了解。
在教學中,我也遇到一些問題。一方面就是學生的積極性不高。主要原因包括:指令很多,難以記憶。對于幾個大類的指令,如果每次課上一類,學生課后如果不進行主動復習,往往到下一次課的時候,就會忘記前面所學的內容或者發生混淆。另外,在學習匯編課程之前,他們已經學過一門高級語言,如C/C++等,匯編語言的學習方式與高級語言的學習方式有所不同,高級語言比較容易上機練習,也容易對程序運行結果驗證,對于開發實用軟件也相對容易,所以學生的興趣比較大。而匯編語言一方面涉及到底層的硬件概念,比較難以理解,另一方面上機也比較困難,可以這么說,如果按照課本的順序講課,要到差不多講完課,學生才可以上機完成一個功能比較完整的程序。
2 促進學生對知識的掌握
要解決這些問題,我認為要在學生的知識掌握方式以及學習興趣的培養上下功夫。對于知識的掌握,除了每次新課內容講完后,精心給學生布置作業習題之外。還應該注意到由于匯編語言的指令及相關的知識點很多,對于剛接觸這門課程的學生一開始往往不大適應,容易混淆前面學過的內容,所以教師及時對所學過知識點進行比較和總結就很有必要。此外還應該定期對學生的學習效果進行檢測,從過去的教學經驗看,匯編語言這門課程是學生比較容易與教師的教學進度脫離的一門課程,不少學生在一開始由于在掌握知識遇到困難,問題越積越多,最終可能放棄聽課。在檢測的方法上,可以借助網上考試系統。教師可以自主出題,也可以讓系統自動出題。通過分析學生的測試結果,教師可以及時調整教學進度,學生也會有一定的學習壓力,使他們花更多時間查補缺漏的知識。
程序設計學習的最佳方法就是上機實踐。匯編語言上機練習跟高級語言的上機練習相比,對于學生來說比較困難。一方面是由于一個完整的匯編程序涉及的知識點很多,而教材往往按知識點分類進行編排。所以學生要想在剛開始學習階段,就編出完整的程序有一定的難度。另一方面,匯編程序的運行結果較難在屏幕上輸出,匯編語言只有字符與字符串的輸入輸出,對于一道簡單的算術運算題目,其結果的輸出都要通過一大段的轉換程序來實現。對于第一個問題,教師可以對教材內容進行選講,把實驗所涉及到的知識點先進行講解。對于第二個問題, 我認為應該重點培養學生熟練使用調試工具的能力,通過掌握調試工具如DEBUG,CV等的使用,一方面學生可以直接觀察程序的運行結果,另一方面,對于程序的邏輯錯誤也可以進行跟蹤、分析以及解決。此外,由于匯編語言作為一種低級語言,編程都由一條條指令進行構造,所以相對繁瑣,應盡早讓學生應用模塊化思路,掌握子程序及宏的使用方法。這樣把一些常用功能做成模塊,如輸入輸出功能,以后學生在編程的時候就可以直接調用這些模塊,從而專注于實驗的其它方面。
3 提高學生的學習積極性
對于如何提高學生的學習興趣,我認為主要讓學生意識到匯編語言的作用。一方面可以引入一些接口技術相關內容,使學生熟練掌握中斷的概念以及I/O指令,然后上機編寫中斷程序,在中斷控制器(8259A)進行驗證,由于這些實驗有按鍵輸入,有屏幕輸出,還能直接看到程序控制設備的效果,所以學生興趣會比較大。此外,教師也可以適當拓展一些知識,如嵌入式編程相關概念,有興趣的同學可以在課后自主進行學習。另外,由于不少學生對硬盤相關的問題感興趣,比如硬盤數據的存放方式,數據的修復等。可以引導學生對這些問題進行思考,然后通過匯編語言提供的I/O指令和中斷子功能,編程實現對硬盤的MBR,文件分配表等數據結構的讀取,備份,修復等功能。教師通過布置一些學生比較感興趣的課外作業,并適當提供協助,往往能提高學生的學習積極性。
另外,在匯編語言的學習過程中,教師應該有意識引導學生將匯編語言與高級語言的各個對應的部分進行比較。學生在學習匯編語言之前,通常已經學過一門高級語言,如C/C++等。高級語言在編譯的時候,一般是先轉換成匯編代碼,所以它們具有相通性。大部分學生編寫應用程序的時候是用高級語言,所以通過比較分析高級語言與低級語言在數據定義,程序流程控制,函數的定義及調用等的對應部分內容,對于學生更好的使用高級語言編寫程序是很有幫助的。比如:匯編語言里有分段的概念,一般把變量定義到數據段,把代碼定義的代碼段。而C語言是把數據與代碼都定義在一起,那么C語言編寫的程序在編譯成可執行文件后,它的全局變量,局部變量的空間是如何分配的。另外,對于動態內存分配,堆與棧的區別在哪里。還有函數的定義與調用,參數的傳遞順序是如何的?這些疑問,都可以讓學生編寫簡單的C語言程序,生成可執行文件后,然后通過調試工具進行反匯編進行分析。此外,在利用VC++,Dephi等IDE開發工具進行程序編寫時,都會用到里面的調試功能。基本上調試功能都會包括反匯編與內存查看的功能,教師可以引導學生進行這方面的訓練,使他們在以后編程時能熟練應用這個工具解決一些疑難問題,例如:內存非法訪問,指針的非法引用等。
4 Win32平臺下的匯編語言教學思考
目前很多高校在匯編程序設計教學中講解的是8088/8086 CPU實模式環境,實際上是虛擬8086模式,因為真正的實模式工作DOS下,而現在匯編語言實驗環境都是在windows 2000以上。由于現在大部分CPU都是32位以上,并且是工作上保護模式之上,此外這些CPU的寄存器類型以及尋址方式都已經發生較大變化。所以教師有必要對實模式與保護模式在邏輯地址轉化為物理地址的方式的差異,還有16位與32位的指令在用法的不同點進行重點講解。因為匯編語言現在的實際應用基本上采用工作于保護模式的Win32平臺,在Windows操作系統控制下,匯編語言雖然不能再直接存取硬件,但是能通過調用系統提供的API函數完成各種功能。其實這里的API函數當于DOS下的中斷調用,但是Window API函數無論從數量上、功能上還是易用性上都大大超過了DOS或BIOS的中斷調用功能。所以現在在Win32平臺下,匯編語言就像高級語言一樣,可以方便的開發各種Windows應用程序。有些教師認為,既然在實模式講解匯編語言很少涉及實用性,那就應該直接遷移到Win32匯編平臺,講解用匯編語言開發的Windows應用程序設計實例,從而提高學生積極性。我認為如果采用這種教學方法,可能會存在以下問題:首先由于上課時間有限,學生需要大量的時間才能熟練掌握各類指令,匯編語言的語法,程序結構等方面的知識。如果過多涉及Windows程序設計實例,對于不熟悉Windows編程機制的學生的來說,又多了一個不小的學習負擔,這樣子反而影響了匯編語言基礎知識的掌握。另外,DOS下的實模式與Window下的保護模式下的編程在本質上并無很大的區別,只要學生熟練掌握各類指令用法,理解16位與32位的指令及尋址方式的區別,邏輯地址與物理地址轉換機制等知識,他們就可以通過自主學習,較容易的掌握用匯編語言進行Win32應用程序的開發。對于教師,除了幫學生打好匯編語言的基礎,可以適當以課外作業的形式,引入一些匯編語言在不同應用領域的簡單實例,如加密與解密,軟件的逆向工程等,這些課外作業的完成對學生匯編語言的應用能力的提高將會有不小的幫助。
5 結束語
匯編語言難教難學是教師與學生的共識,但是作為計算機科學中一門低級程序設計語言,通過對它的良好掌握,確實可以促進對計算機軟硬件底層的了解,而這又能促進編程能力的提高。作為教師,在教學中應該不斷嘗新的教學方法,不斷積累經驗,只有這樣,才能把這門課上好。
中圖分類號: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 引言
程序設計語言的種類多得難以計算,為什么要以C語言作為編程入門語言呢?還有人說為什么一定要學習C語言,干嘛不直接從C++學起?而且學C++不一定要有C語言基礎,有了反而會有些內容混淆。還有人說C語言都已經過時了,怎么還要浪費時間去學?C語言在教學過程中,抱怨C語言難學,難懂,難用,在解決實際問題編制應用軟件時往往無以下手,缺乏編程和調試的能力。。久而久之,學生對學習此門課程就會產生厭倦的心理,不但影響本課程的學習,還會影響以后相關課程的學習。本文針對以上問題,指出了如下措施:
2 學習《C語言程序設計》的意義
我認為在學習C語言之前有必要弄清學習的意義所在,這樣才能讓學生對其產生興趣。興趣是人類最好的老師,只有對其產生了興趣,我們才能學好這門語言。
將C語言作為入門語言具有重要的意義。C語言是一門典型的結構化程序設計語言,它具有語言簡潔、嚴謹,用途廣泛等特點,能夠體現結構化程序設計的優良控制結構,非常適合初學者。通過這門課程的學習,能夠使學生掌握一門結構化程序設計語言,更為最重要的是能讓學生樹立用程序解決現實問題的思路和方法。為今后的學習打良好的基礎。再學其他程序設計語言,就能夠在短時間內迅速的掌握。
3 改革課程教學內容,重視算法的編程思想,培養創造性思維
精選課程內容是一項非常重要的工作,它是教學內容的核心部分,《C語言程序設計》的核心內容包括C語言基本語法、程序設計思想和程序調試方法。語法是任何一門語言的基礎,同時,各種程序設計語言在基本知識點上是相同的,學生對基礎知識的正確理解和準確運用,其意義是深遠的。
C語言程序是由函數組成的,無論問題多么復雜,我們都可以將其看成是一個大任務,這個大任務又可化分成若干個小任務,將這些小任務解決了,那么大任務也就完成了。也就是說其任務只有一個,就是編寫函數(一個main()主函數和其他函數)。執行程序時,從mian()的第一個“{”,開始直到最后一個“}”結束,其他函數只有在執行的過程中被調用才執行。
學習C語言程序設計不僅是為了掌握一種開發工具,更重要的是用計算機解決問題。而算法是解題的方法和步驟,算法就是對操作的具體描述,是計算機的解題過程。編制程序,就是根據算法,用具體的語言依據某種規則編寫計算機執行的命令序列。因此學習語言的重點是鍛煉分析、分解,最終歸納整理出算法的能力。在教學過程中,學生能否理解算法,并掌握算法,成為教學的關鍵。
在C語言的教學過程中,改革傳統的語法學習內容,將算法教學融入到語言教學中。由于C語言語法的邏輯性較強、結構性要求較高,初學者剛接觸的時候容易考慮不全。因此算法教學可以通過實例進行, 從最簡單的例子入手,使學生在解決具體問題的過程中學習C語言的基本邏輯結構和語句。生活中到處都存在著算法。而對于同一個問題可以有不同的解題方法和步驟,可以讓學生根據同一個問題提出不同的算法,并比較這些算法之間的優劣,并讓學生根據分析對算法進行優化。通過對算法的優化練習,可以在無形中提高學生寫算法的水平。
4 改革課堂教學模式,培養學生自學能力
在教學中可以使用下面的一些方法,提高教學效果,培養學生的邏輯思維能力和動手能力。
4.1 改變傳統的教學方式
雖然這個話題是老生常談了,但是現在部分老師還沒有認識到這個問題的重要性,仍然是“教師單向灌輸”的教學模式。教師首先要在教學過程中樹立以學生為主體,老師為主導的教學思想,正確處理傳授知識與培養能力、提高素質之間的關系;其次改變教學模式,償試采用以下教學方式。
4.1.1 任務驅動教學方式
在教學過程中避免照本宣科、枯燥乏味,“任務驅動”是建構主義理論中的一種教學模式,是將所要學習的新知識隱含在一個或幾個任務之中,學生通過對所提的任務進行分析、討論,明確它大體涉及哪些知識,在老師的指導、幫助下找出解決問題的方法,最后通過任務的完成對學生知識的傳授。事實上它并不是簡單的給出任務就了事,重要的是要讓學生學會學習,使他們學會從多方位、多層次、多角度去考慮問題。使學生認識到學有所用、學以致用,自然地產生學習的愿望和動力。
可以先給出一個比較典型的C語言編寫的例子。給學生具體的演示,通過這個效果激發學生的積極性。要求學生在期末的時候編寫出相應的程序。有了這個任務,在講課的時候逐步的告訴學生每一章可以具體的實現例子的那個部分,讓學生逐步的去實現相應的功能。他們實現了相應的效果,就會極大地增強學習的興趣和熱情。這樣可以讓學生在愉悅的過程中學好這門課程。
4.1.2 啟發式教學
為培養學生邏輯思維和創新能力,在教學過程中,教師遵循啟發式教學原則,通過各種教學方式和手段激發學生的學習欲望,積極投入到學習活動中,積極思維,發現問題,提出問題,并逐步解決問題。例如,在講解程序設計舉例時,不是簡單地給出程序清單,而是從分析問題入手,繼而找出解決問題的方法,再給出算法,最后編寫出完整的程序,而在這一全過程,最關鍵的是每一步都采用與學生一起探討的方式,讓學生在啟發下思考,在思考中解決問題,從而掌握獨立分析問題、解決問題的方法。
4.1.3 互動式教學
互動式教學是教師駕馭講臺能力的具體體現。一個教師站在講臺上,要不斷地掃視下面的學生,觀察學生的表情,了解學生的接受程度,并能及時地調整教學的進度和步驟,必要時到達到學生與教師在課堂上互相之間的交流。允許學生在不明白的時候隨時提出問題,教師根據實際情況決定是當場解答,還是課后解答。真正實現課堂上的互動,其教學的效果就會顯著地提高。教師在教學過程中,還應當注意設置疑難問題,引導學生思考和探索,讓他們的思想活躍起來。
4.1.4 項目分析式教學
為培養學生綜合應用知識的能力,通過對完整的項目的系統分析,培養學生良好的編程習慣,善于獲取他人經驗的能力以及掌握綜合運用所學知識的能力,從而真正提高編程水平。
4.2 激勵個性化學習
在微觀課堂上采用項目遞進驅動教學法,改變滿堂灌的做法,將學生的眼手腦全部調動起來。精心設計實例,給學生一個比較實際的切入點,通過老師的演示使學生感覺能夠入手,然后再通過將此實例不斷修改、擴充,引導學生參與到程序的編制過程中,在這個過程中,再將學生所作的程序展示,讓學生來評判優劣,吸收優點,修改錯誤,引導學生進行優化。在這樣的實例教學中,因為有提出問題、解決問題、擴展問題、再解決問題、對解決問題的方法評價、優化設計等幾個環節,實際上是一個螺旋式滾動向前的過程,在這個螺旋式不斷向前的過程中,能夠非常自然地調動學生的參與,而且通過問題的不斷擴展,通過一個問題的多種解決方法,有效開闊學生的思維,使得學生在課堂上真正地成為 “ 主體 ” ,教師扮演 “ 主導 ” 角色。 這種通過一個程序的層層推進,引入課程內容,使得學生的每一步學習都有基礎,是循序漸進,螺旋式上升的過程,使學生的學習是在“走臺階”,而不是“三級跳”,效果很好。
4.3 加強對學生程序設計思維訓練
《C語言程序設計》課程不僅僅是一般意義上的知識傳授,要讓學生掌握程序設計的基本方法,對學生進行邏輯思維能力的培養。在實際的教學過程中,我們發現有些學生平時學得很認真,對語法、語句等細節也很熟悉,但碰到稍微復雜一點的編程則無從下手,教師在教學過程中要樹立正確的教學思想,即注重算法設計,加強學生的程序設計思維訓練,幫助學生順利地實現思維方式的轉變,而不能只單純地講授語言的語法、語義、語用,應該將復雜枯燥的語法知識分解到一個個生動實用的程序實例中,也就是在教學過程中以程序設計為主線,有意識淡化計算機語言本身語句的介紹,而重點介紹程序設計,在分析程序和程序設計中熟悉語法、應用語句,掌握程序設計和解決問題的思路(算法),并把軟件工程學的思想貫穿于算法分析和程序設計的過程中。一定要避免陷入這樣的誤區:教師一味地給學生講解語句的功能和語法規則,使學生陷入冗繁的語法規則之中,形成以語言為中心的思維模式。這樣教出來的學生語法背得滾瓜爛熟,只會生搬硬套,缺乏實際編程能力,所以教師應注重培養學生形成以算法為中心的思維模式。對于從未受過算法設計訓練的初學者來說,可能會感到無從下手,對此,教師應該有意識地加強這種思維方式的訓練,通過講授一些常用算法、典型算法,如記數、累加、連乘、兩數交換、求最大(小)值、迭代、排序、分類等為以后編寫程序、軟件設計奠定基礎,同時典型算法熟練的掌握,也可增加學生學習的信心并提高學習的興趣,同時培養學生的思維能力。
5 強化實踐教學,培養學生動手能力
實行實踐教學形式多樣化,上機操作,老師通常讓照著書本的例子進行驗證,這樣無法增加學生的成就感,使學生覺得很無聊,在《C語言程序設計》上機實驗教學中,除傳統的課堂實驗外,還開展課程設計、典型程序分析與設計等實踐環節,還可以教師組織C程序設計興趣小組,組織C程序設計大賽,組織學生參與科研開發等,將每一階段的學習進行小結性的貫穿與能力提高。將 C 的知識點都溶化到一個個實訓項目的程序編寫中。整個過程以學生獨立完成為主,教師只提供必要的輔導。經過實踐訓練,尤其經過綜合訓練中模擬實際軟件開發的演練,使學生得到了鍛煉,進一步激發了學習興趣,培養了問題求解和編程能力,還有利于培養探索和創新能力。
6 改革考核方式,全面實行考教分離
C語言課程所有考試均實行考教分離,這不僅促進了任課教師對教學的精益求精,而且也給了教師充分發揮、施展個人教學才能的空間。在考核方法上,考慮到高職院校是培養應用性的實用人才的這一特點,該課程除采用傳統的筆試外,大膽采用更能反映學生知識應用能力的上機考試,這一考試形式非常受學生的歡迎。可以采用多種形式考核學生,重點考核學生的實踐動手能力。
7 結束語
以上是作者近幾年關于C語言教學經驗的總結,在實際的教學過程中取得了良好的教學效果。筆者認為在教學過程中除了要使學生掌握C語言程序設計這門語言外,最重要的是要讓學生樹立用程序解決現實問題的思路和方法(算法)。學生能否理解算法,并掌握算法,成為教學的關鍵,這是也學習C語言程序設計的重中之重。
參考文獻: