呂雅麗 朱紅磊 許玉龍
河南中醫(yī)藥大學信息技術學院 鄭州 450046
C 語言課程是計算機及其相關專業(yè)的專業(yè)基礎課,它綜合了利用計算思維和編程工具解決實際問題所需的基本方法和編程技能[1-2]。該課程主要介紹C 語言編程技術,其重點內容是C 語言程序基本結構和基本語法,包括數據類型、選擇結構、循環(huán)結構、函數、數組、結構、枚舉、指針等內容。為后續(xù)專業(yè)課程的學習打下編程基礎。該課程一般安排在大學一年級上學期開設,即本科院校學生進入大學的第一學期。所以這門課程的教學還有一個重要的任務就是轉變學生的學習方法和學習理念,使學生適應大學的學習生活。課程教學有待將以往的線上線下融合、以學生為中心的混合教學模式進行相應調整[3],在引導學生掌握程序設計的基礎上,培養(yǎng)學生的綜合能力,實現育人育心的目標[4]。本研究分析C 語言程序設計課程教與學的現狀,探索基于模塊化的線上線下混合式教學模式,并在教學中進行實踐,有效地促進了課程的教學效果和教學目標的實現。
C 語言課程通常開設在學生進入大學的第一學期,旨在培養(yǎng)學生的程序設計能力和計算思維能力。這個階段,學生剛步入大學,學生學習的方法和理念還停留在中學時代聽講、做題的模式。但大學的學習模式是聽講、自學、實踐、應用的模式,學習過程需要很大的學習主動性并具有很大的挑戰(zhàn)性。C 語言程序設計課程的學習就是典型的大學學習模式。學生在學習方法和學習思路還沒有轉變的情況下,普遍會覺得該課程難學??偨Y多年的教學經驗,該課程在教與學的過程中主要存在以下問題。
編程技術是問題描述—問題解決—測試這一操作過程的實現。這一實現過程不同于用漢語或者英語等自然語言描述問題,而是要用計算機語言去表達、去實現。這種新的表達方式對于初學者來說是抽象的。就像一直用中文交流的人,突然要求他們學習法語表述,初次接觸時肯定都會覺得難。但任何一門語言都有各自的規(guī)則和規(guī)律,掌握了規(guī)則和規(guī)律就能輕松運用。編程語言也是一樣,掌握其語法規(guī)則和實現方式,按照這些規(guī)則去寫、去用,就不會覺得過于抽象。這就要求教師在教學中盡量把抽象的內容形象化,轉換成簡單易懂的圖或者動畫。
學生在接觸新的、抽象的內容時,第一感覺就是難,加上C 語言課程的學習模式、思維方式與學生已有的學習方法不同,學習過程中,“難”這種思想一直存在于學生的大腦中??墒牵珻 語言程序設計真的難嗎?學通的學生會覺得很簡單,因為C語言程序設計語法規(guī)則少,表述也簡單,整體課程內容也不多。學生在剛開始學習的過程中不要過于糾結各種為什么,先模仿著例子來寫,再照著例子來改,之后就會脫離例子自己編寫。看得多了、寫得多了,原理自然就明白了,語法可掌握。所以,學生初學時不要過于糾結原理,重點在仿寫,在練習的過程中理解、掌握原理。
學生在學習過程中容易急于求成。他們在現實生活中看到各種各樣的軟件,覺得自己學習了編程就應該會編寫類似這樣的軟件。他們沒有認清專業(yè)的培養(yǎng)計劃和該門課程的學習目標。C 語言程序設計課程是學習編程基礎,掌握編程的基本技巧,為后續(xù)計算機專業(yè)課程的學習打下堅實的基礎。軟件開發(fā)技術不是一門課的任務,是專業(yè)培養(yǎng)的任務,后期有多門相關課程的學習,可以使學生逐步掌握軟件開發(fā)能力。學生在C 語言程序設計課程的學習中要明確學習目標,踏踏實實地做好基礎學習和練習。
整個教學環(huán)節(jié)分成三步:課前、課中、課后。線上和線下相結合,理論和實訓相結合。
2.1.1 課前:線上自學
教師通過視頻、文檔等形式給出前期知識總結、當前知識的問題導入。學生通過在線觀看視頻和文檔做到復習和預習。學生也可以通過一些公共的線上課程進行自學。
2.1.2 課中:線下課堂教學
課堂上教師通過對知識進行解析、關鍵操作進行演示、階段性歸納總結等方式,使學生盡快掌握新的知識和技巧。課堂上也將完成小組匯報和階段性測試工作。
2.1.3 課下:線上或線下練習實訓
教師給出實訓題目,學生通過闖關方式來完成實訓。實訓題目完成情況作為平時作業(yè)考核的主要依據,同時課下學生對相關問題的討論和總結也將作為小組討論考核的依據。
將整個課程分為以下幾個模塊進行教學設計。
2.2.1 編程基礎
編程基礎主要是讓學生認識程序、認識程序的功能,著手開始編寫代碼。這一模塊將涉及基本的輸入輸出語句、數據類型、表達式、程序結構等內容。課前預習,這一模塊提供輸出“Hello World!”的程序運行視頻和不同符號形成一個愛心的程序運行視頻,同時,通過文檔提供完整代碼。學生通過觀看視頻和查看代碼體會程序功能。有興趣的學生還可以把原始代碼復制到編譯器中進行運行甚至修改。這一課前預習可以很好地吸引學生的學習興趣。這一模塊的教學過程將貫穿幾個簡單例子的實現。第一個例子就是輸出“Hello World”。通過對這個例子的解析,講授C 語言中輸出語句的使用。第二個例子是“求華氏溫度對應的攝氏溫度”,講授C 語言中的變量、常量、數據類型、表達式等基本語法。第三個例子為“分段計算水費”。這個例子用到輸入和簡單的分支。結合課堂內容設置課下練習和闖關實訓。這一模塊可以設置這幾個問題:輸出“Hello World”、輸出圖形、求三個數的最大值等,對C 語言的基本語法進行鞏固和練習。
2.2.2 流程控制語句
流程控制語句模塊主要學習分支語句和循環(huán)語句。這一模塊內容較多,是該門課程的學習重點。選擇語句的講授課前提供“猜數游戲”的程序運行視頻和代碼。課堂教學主要通過例子“判斷奇偶數”“輸入表達式輸出運算結果”“百分制成績與五分制成績轉換”等實現。多個例子都是分別用if 和switch 兩種語句實現。講授這些例子的同時,需要講授邏輯運算符和邏輯表達式的使用。這一模塊的實訓練習是“閏年判斷”“分段函數問題”“學生成績等級換算”等。循環(huán)語句的內容比較多,相對來說有一定難度。課前提供“用格雷戈里公式求π 的近似值”的例子視頻和源代碼。課堂教學主要通過例子:“統(tǒng)計整數位數”“判斷素數”“求1!+2!+…+100!”等。同時,將用到跳轉語句和循環(huán)嵌套。循環(huán)嵌套的例子要給出多種變型,讓學生透徹理解。課后闖關練習“小球自由落體運動”“最大公約數和最小公倍數”“字符串中各類字符數的統(tǒng)計”“求水仙花數”等。這些內容的學習中學生會開始感覺到編程的難度,要加強引導。對一些有代表性和有難度的闖關練習需要利用課堂時間進行解析。
2.2.3 函數
函數是編程中的難點,語法結構容易理解但使用較難掌握。這一模塊在講授過程中盡量多用之前講過的例子。把之前的例子用函數實現,在應用程序中調用,使學生在學習的過程中把注意力放在函數的使用,而不是問題的解決上。課前,給出“輸出不同規(guī)模圖形”例子,讓學生體會到函數的作用。課中通過“求圓柱體體積”“判斷奇偶數”“使用格里高利公式求π 的近似值”“求素數”等例子進行講授。重點是函數的定義、函數的返回值、函數的參數等內容。課后闖關練習“編寫函數求表達式的值”“階乘數列”“公約公倍數”“數值交換”等。學生通過這一模塊的學習,一方面學到了函數的使用,另一方面可以對前期知識進行鞏固。
2.2.4 數組
數組是編程中經常使用的數據結構,也是程序設計學習的重點。C 語言程序設計主要學習一維數組和二維數組的使用。課前提供“求一組數據最大值”的案例視頻和源代碼,學生在預習的過程中可以嘗試著修改代碼來求解最小值和平均值。課堂教學選用例子“順序查找法”“求得最小值并實現交換(排序的步驟)”“投票統(tǒng)計”“輸出矩陣”等,讓學生體會使用數組的好處,理解數組的特點和使用規(guī)則。數組的使用是和循環(huán)分不開的,這一模塊學習也將對循環(huán)語句的使用加深印象。課下實訓練習主要有“排序問題”“二分查找”“刪除最大值”“楊輝三角”等,對一維數組、二維數組進行學習鞏固。
2.2.5 指針
指針是C 語言程序設計的難點,需要理解變量、內存單元與地址的關系。這一模塊需要學生掌握指針概念、指針變量的定義和指針的基本操作。課前,給學生提供“密碼開鎖問題”的案例視頻和源代碼,學生在預習時理解指針的原理。課堂教學中,通過案例“角色互換”讓學生理解使用指針的必要性,然后通過“求解日期”“冒泡排序”等案例講授指針作為函數參數的應用,這里還會用到數組的案例。課后實訓練習“用指針法輸入12 個整數,然后按每行4 個數輸出”“指針變量作為函數參數實現兩變量交換值”“報數”,從而讓學生掌握指針的使用。
2.2.6 結構
結構的定義和使用對于C 語言編程很重要。需要學生理解結構與數組的區(qū)別、使用結構的意義、結構的定義、結構的使用、結構指針、結構數組等內容。課前,提供給學生“求班級學生總分最高分”的案例視頻和源代碼。這一模塊講授內容以學生成績管理為主線。課堂講授時,給出不用結構的方法和使用結構的方法,先讓學生理解結構的作用和必要性,然后給出對學生按成績進行排序、對學生成績進行修改等操作說明,讓學生對結構進一步理解和掌握。課后實訓是學生成績管理系統(tǒng)的簡單實現,能夠讓學生加強對結構的掌握,也能夠讓學生對整個課程進行總結和復習。最后一個題目也可以作為課程設計的內容讓學生完成一個相對完整全面的案例。
基于模塊化的教學過程線上線下相結合,理論與實訓相結合,內容前后貫通,整個課程的教學貫穿著平時考核的各個環(huán)節(jié)。
本課程考核分為兩個部分,形成性考核和終結性考核,其中形成性考核成績占總成績的60%,終結性考核成績占總成績的40%。形成性考核分為平時作業(yè)、階段性測試、小組討論、小組匯報四個部分,平時作業(yè)成績占形成性成績的30%,階段性測試成績占形成性成績的30%,小組討論成績占形成性成績的20%,小組匯報成績占形成性成績的20%。終結性考核試卷卷面100 分,學生最終得分為卷面分值×0.4+形成性考核分值×0.6。
終結性考核可以通過在線考試平臺或者紙質試卷考試。平時作業(yè)根據課程內容,布置實訓作業(yè),由學生課后完成。根據學生完成作業(yè)的次數和質量評分。小組匯報通過教師布置題目,學生根據對題目內容的認識和理解,進行匯報講解,根據學生分析匯報情況、完成度和質量評分。小組討論通過學生分組共同學習后派選展示研討觀點,教師評分作為該小組成員得分。階段性測試,即平時進行階段性檢測,考核成績平均分即為階段性檢測成績。
C 語言課程內容相對抽象,初學編程的學生往往覺得難度大。合理設計課前、課中、課后三個教學環(huán)節(jié),理論內容和實訓內容相結合,線上資源和線下教學相結合,同時設計合理的考核方式,可以有效地激發(fā)學生對課程的學習興趣,從而提高課程的教學效果。