陳 光,邱 天,吳小潤(rùn)
(南昌航空大學(xué)信息工程學(xué)院 江西 南昌 330063)
C 語言具有面向過程、性能優(yōu)異、跨平臺(tái)等特點(diǎn),是工科類專業(yè)的一門基礎(chǔ)課,是許多高級(jí)編程語言的基礎(chǔ),也是大學(xué)生進(jìn)行軟件課程設(shè)計(jì)的高級(jí)編程語言之一[1-3]。因此,掌握好C 語言對(duì)于工科類專業(yè)的學(xué)生具有重要意義。
一方面,C 語言中的許多知識(shí)點(diǎn)是其他一些高級(jí)語言的基礎(chǔ)。例如,數(shù)據(jù)類型、運(yùn)算符和表達(dá)式、關(guān)系運(yùn)算和邏輯運(yùn)算、程序結(jié)構(gòu)如分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)等,這些重要的概念在如Matlab、Python 等語言當(dāng)中都是類似的。另一方面,C 語言中的結(jié)構(gòu)化編程方式為學(xué)習(xí)其他高級(jí)語言也奠定著非常重要的基礎(chǔ)。例如,在C 語言當(dāng)中,使用函數(shù)將程序模塊化,能夠使程序清晰明了,便于調(diào)試。其中,涉及局部變量、全局變量、參數(shù)傳遞等概念。而這些概念和編程方式在其他許多高級(jí)語言當(dāng)中也是通用的。掌握好C語言,學(xué)生學(xué)習(xí)其他高級(jí)語言就會(huì)容易許多。此外,C 語言也是開發(fā)基于單片機(jī)、STM32、ARM等的嵌入式系統(tǒng)的常用編程語言。因此,C 語言課程通常被安排在大學(xué)一年級(jí)開課,培養(yǎng)學(xué)生的計(jì)算機(jī)編程思維,教會(huì)他們?nèi)绾卧O(shè)計(jì)和實(shí)現(xiàn)程序,為學(xué)生后續(xù)學(xué)習(xí)其他高級(jí)語言和相關(guān)的軟硬件課程奠定基礎(chǔ)。
工程教育認(rèn)證倡導(dǎo)的是以學(xué)生為中心的成果導(dǎo)向的教學(xué)理念,強(qiáng)調(diào)的是學(xué)生學(xué)到了什么,而非教師教了什么[4]。對(duì)于課程教學(xué)而言,特別是軟件類課程,要求學(xué)生學(xué)習(xí)完成后,能夠運(yùn)用該軟件或編程語言,來解決實(shí)際的工程問題[5-8]。這對(duì)于傳統(tǒng)的以傳授知識(shí)的教學(xué)方式是一種重大的轉(zhuǎn)變。C 語言是工程領(lǐng)域的核心編程語言之一,通過對(duì)C語言的學(xué)習(xí),能夠讓學(xué)生建立堅(jiān)實(shí)的編程基礎(chǔ)、掌握實(shí)際的應(yīng)用技能,培養(yǎng)學(xué)生對(duì)于工程問題的興趣,為將來在工程領(lǐng)域的發(fā)展奠定基礎(chǔ)。因此,C 語言的教學(xué)方式對(duì)學(xué)生將來從事實(shí)際工程項(xiàng)目的能力有著重要的影響。
對(duì)于C 語言課程而言,則需要改變以往的僅以知識(shí)點(diǎn)進(jìn)行授課的方式,而需要以提高學(xué)生解決實(shí)際工程問題的能力為目標(biāo),進(jìn)行課程教學(xué)的調(diào)整。特別是,C 語言課程的知識(shí)點(diǎn)較為零散細(xì)碎,學(xué)習(xí)起來比較枯燥。而C 語言課程作為工科類專業(yè)的基礎(chǔ)課,往往開在大學(xué)一年級(jí)。對(duì)于低年級(jí)的學(xué)生來說,本身對(duì)編程語言就很陌生,容易產(chǎn)生畏難情緒,影響學(xué)習(xí)效果。因此,如何將這些知識(shí)點(diǎn)進(jìn)行融合貫穿的講解,是一個(gè)值得思考的問題。
實(shí)際上,在C 語言課程教學(xué)中的許多知識(shí)點(diǎn),都能夠體現(xiàn)工程教育的特點(diǎn)。單一的教授語法,學(xué)生很難領(lǐng)會(huì)其中的工程意義。但是,如果在教學(xué)過程中,教師能夠?qū)⒅R(shí)點(diǎn)的講解聯(lián)系到實(shí)際的工程問題,這不僅能提高學(xué)生的學(xué)習(xí)興趣,還對(duì)于學(xué)生理解如何使用編程語言解決工程問題有很大的幫助。
在學(xué)習(xí)分支結(jié)構(gòu)這個(gè)知識(shí)點(diǎn)時(shí),教師可以通過一個(gè)分支結(jié)構(gòu)在解決實(shí)際的工資支付的案例中的應(yīng)用來進(jìn)行講解。例如可以首先提出這樣一個(gè)問題:“公司對(duì)于員工工資的發(fā)放需要根據(jù)員工的日常表現(xiàn)來進(jìn)行定量發(fā)放。對(duì)勤奮努力的員工將給予激勵(lì),而對(duì)于懈怠的員工,在工資方面將進(jìn)行一定的扣除。某公司員工的工資計(jì)算方式如下:每月的工資按照工作時(shí)間發(fā)放,每月工作時(shí)間正常在120 和160 個(gè)小時(shí)之間。正常的工作時(shí)數(shù),按每小時(shí)80 元發(fā)放。工作時(shí)間超過160 個(gè)小時(shí)的,超過部分每小時(shí)增發(fā)20%,工作時(shí)間低于120 個(gè)小時(shí)的,每小時(shí)扣發(fā)10%。請(qǐng)編寫一個(gè)程序,根據(jù)員工的工作時(shí)間,計(jì)算應(yīng)發(fā)工資。”圍繞著這個(gè)問題,學(xué)生既能知道學(xué)習(xí)分支結(jié)構(gòu)有什么意義,提高了學(xué)習(xí)興趣,掌握了C語言中分支結(jié)構(gòu)這個(gè)知識(shí)點(diǎn),還能夠讓學(xué)生理解到這個(gè)問題中所包含的經(jīng)濟(jì)學(xué)內(nèi)涵,對(duì)于學(xué)生提高經(jīng)濟(jì)決策和項(xiàng)目管理的能力都有所裨益。
因此,對(duì)C 語言實(shí)施教學(xué)方法改革,在C 語言教學(xué)中運(yùn)用問題驅(qū)動(dòng)的方式培養(yǎng)學(xué)生的實(shí)際編程技能和解決問題的能力,圍繞著問題來進(jìn)行知識(shí)點(diǎn)講解和對(duì)學(xué)生能力的培養(yǎng),具有非常實(shí)際的教學(xué)意義。
C 語言課程的教學(xué)改革有多種方法,比如基于課程設(shè)計(jì)的教學(xué)方法、提高互動(dòng)性的教學(xué)方法、利用網(wǎng)絡(luò)資源的教學(xué)方法等。根據(jù)對(duì)當(dāng)前工程教育認(rèn)證的理解,本文提出了一種以問題驅(qū)動(dòng)的C 語言課程教學(xué)改革方法。其中,教學(xué)改革的重點(diǎn)在于以解決實(shí)際問題為導(dǎo)向,整個(gè)教學(xué)過程都是圍繞著解決一個(gè)實(shí)際問題而進(jìn)行的。首先,教師通過布置一個(gè)問題案例,布置預(yù)習(xí)問題時(shí),會(huì)將該問題中將涉及本節(jié)課程中的主要知識(shí)點(diǎn)列出,讓學(xué)生進(jìn)行預(yù)習(xí)并查閱資料。然后,在課程中,首先隨機(jī)抽取學(xué)生進(jìn)行提問,讓學(xué)生回答有關(guān)案例知識(shí)的預(yù)習(xí)情況,發(fā)現(xiàn)其中的主要誤區(qū)。再進(jìn)行知識(shí)點(diǎn)和問題的講解,并重點(diǎn)解釋學(xué)生所存在的主要誤區(qū)。課程結(jié)束后,由學(xué)生撰寫最終的解決方案,提交完整的程序代碼。然后,教師對(duì)學(xué)生的作業(yè)或報(bào)告進(jìn)行批閱,并給出反饋意見。在整個(gè)教學(xué)過程中,貫穿著不同層次的教學(xué)評(píng)價(jià)方式。在每一個(gè)小章節(jié)的課程教學(xué)結(jié)束后,通過一些小的選擇題或者填空題來進(jìn)行知識(shí)點(diǎn)測(cè)試,通過編程題進(jìn)行應(yīng)用能力測(cè)試。而在學(xué)期末,將通過期末考核對(duì)學(xué)生的學(xué)習(xí)情況進(jìn)行綜合考查,根據(jù)考核結(jié)果可以知道本課程目標(biāo)的達(dá)成情況,并根據(jù)課程目標(biāo)達(dá)成情況來進(jìn)行后續(xù)的教學(xué)改進(jìn)。整個(gè)教學(xué)改革的設(shè)計(jì)框架如圖1 所示。
圖1 C 語言課程教學(xué)流程圖
為了更好地闡述教學(xué)改革方法,以下將說明教學(xué)流程。在循環(huán)結(jié)構(gòu)中,涉及幾種循環(huán)控制結(jié)構(gòu),包括for 循環(huán)、while 循環(huán)和do while 循環(huán)。教師針對(duì)循環(huán)結(jié)構(gòu)這個(gè)知識(shí)點(diǎn),提出如下問題:“電子商務(wù)如淘寶、京東等電子商務(wù)平臺(tái)在銷售市場(chǎng)中占據(jù)了重要的比例,其中一個(gè)重要的環(huán)節(jié)就是快遞運(yùn)輸問題。如何進(jìn)行交通運(yùn)輸優(yōu)化,對(duì)于成本核算具有重要意義。現(xiàn)假定有三種不同車型,其中,A 型車載重量為18 噸,B型車載重量為25 噸,C型車載重量為31噸?,F(xiàn)有100 輛車,需載貨500 噸,請(qǐng)問,需A、B、C 型貨車各多少輛?”
這個(gè)問題是一個(gè)在快遞業(yè)中非常實(shí)際的成本優(yōu)化問題,對(duì)于學(xué)生認(rèn)識(shí)如何使用軟件編程語言來解決工程問題有很好的幫助,整個(gè)課程教學(xué)將圍繞該問題進(jìn)行。課程教學(xué)的流程如圖2 所示。
圖2 課堂教學(xué)示意圖
第一步:布置預(yù)習(xí)練習(xí)。
教師在上一次課的末尾布置下一次課的預(yù)習(xí)任務(wù)。布置預(yù)習(xí)任務(wù)時(shí),先大概跟學(xué)生講解一下該問題的意思,并列出該問題所涉及的主要知識(shí)點(diǎn),讓學(xué)生對(duì)該問題進(jìn)行資料查閱。對(duì)于上述例子,所涉及的主要知識(shí)點(diǎn)為循環(huán)控制,C 語言中循環(huán)結(jié)構(gòu)包括for 循環(huán)、while 循環(huán)和do while 循環(huán)。之后,教師提出幾個(gè)問題讓學(xué)生進(jìn)行思考。在該問題中,需要學(xué)生思考的問題有:①循環(huán)控制有哪幾種方式?②該問題應(yīng)當(dāng)如何進(jìn)行數(shù)學(xué)建模?③該數(shù)學(xué)建模可以采用哪幾種循環(huán)方式來進(jìn)行編程實(shí)現(xiàn)?學(xué)生則根據(jù)教師提出的問題進(jìn)行調(diào)研,并做好預(yù)習(xí)報(bào)告。
第二步:課堂中講解。
由于在上一次課程的末尾已經(jīng)將本次課的知識(shí)點(diǎn)和問題提出,因此,在本次課程上課之前,需要對(duì)學(xué)生的預(yù)習(xí)情況做一個(gè)大概的檢查。教師通過提問的方式,隨機(jī)抽取幾位同學(xué),針對(duì)提出的幾個(gè)問題,檢查學(xué)生的預(yù)習(xí)情況,同時(shí)也便于發(fā)現(xiàn)學(xué)生在預(yù)習(xí)過程中,對(duì)問題的理解誤區(qū)。接下來,教師將圍繞著上述問題來展開知識(shí)點(diǎn)的講解。講解完后,將知識(shí)點(diǎn)應(yīng)用于問題的解決上,使學(xué)生能夠充分理解如何運(yùn)用知識(shí)點(diǎn)來解決工程問題,以及在工程問題中所包含的項(xiàng)目管理和經(jīng)濟(jì)決策的內(nèi)涵。
以上述問題為例,以下簡(jiǎn)要介紹圍繞該問題的課程講解流程。首先,教師隨機(jī)抽取學(xué)生提問,檢查學(xué)生的預(yù)習(xí)情況。然后,就該問題進(jìn)行分解講解。先講述該問題應(yīng)當(dāng)如何進(jìn)行數(shù)學(xué)建模,例如,在該問題中,需要滿足兩個(gè)條件,一個(gè)條件是A、B、C 型車的總和是100 輛,另一個(gè)條件是要載的貨物總重量為500 噸。因此,要滿足這兩個(gè)條件,需要使用到的知識(shí)點(diǎn)是if 條件語句。條件語句的知識(shí)點(diǎn)在循環(huán)結(jié)構(gòu)之前已講解過。A、B、C 型貨車各多少輛?為了回答這個(gè)問題,需要對(duì)A、B、C三種車型都進(jìn)行0 到100之間的掃描,因此,要用到循環(huán)語句。根據(jù)這個(gè)問題引出本節(jié)課程要講解的知識(shí)點(diǎn)——循環(huán)結(jié)構(gòu)。然后據(jù)此展開對(duì)循環(huán)結(jié)構(gòu)知識(shí)點(diǎn)的講解。講解完后又回到該問題,說明如何使用循環(huán)結(jié)構(gòu)的知識(shí)點(diǎn)來解決該問題,并布置課后作業(yè),讓學(xué)生應(yīng)用循環(huán)結(jié)構(gòu)完成完整的程序代碼。通過該問題,不僅能使學(xué)生掌握循環(huán)結(jié)構(gòu)這個(gè)知識(shí)點(diǎn),還能讓學(xué)生領(lǐng)會(huì)如何使用編程語言工具對(duì)實(shí)際工程問題進(jìn)行表述、建模、求解,以及最后解決這類工程問題。
第三步:課后學(xué)生完成問題,提交作業(yè)。
經(jīng)過課堂講解后,所有學(xué)生都應(yīng)當(dāng)根據(jù)所學(xué)習(xí)到的內(nèi)容來給出解決該問題的完整方案和程序代碼,并提交作業(yè)或報(bào)告,以提高學(xué)生的表達(dá)能力。而教師則需要及時(shí)批改學(xué)生的作業(yè)和報(bào)告,并根據(jù)批改情況進(jìn)行反饋。在下一次課前,教師需要把該問題的完整程序答案分發(fā)給學(xué)生,并在下一次課中針對(duì)學(xué)生存在的一些共性問題進(jìn)行講解反饋。
上述過程僅以一個(gè)例子來說明如何圍繞著一個(gè)知識(shí)點(diǎn),運(yùn)用問題驅(qū)動(dòng)的方式進(jìn)行講解,從而提高學(xué)生解決工程問題的能力。而對(duì)于更復(fù)雜一些的問題,需要綜合多個(gè)知識(shí)點(diǎn)來解決的問題,教師可以采取分組的方式,幾位學(xué)生一起合作來完成一個(gè)問題。在C 語言課程的教學(xué)中,對(duì)于綜合類型的問題,可以三到四名學(xué)生一組,來完成這類綜合類的問題,可以模擬實(shí)際的工作環(huán)境,分配不同的角色給學(xué)生,例如項(xiàng)目管理者、代碼編寫者、功能測(cè)試者等,要求學(xué)生召開團(tuán)隊(duì)會(huì)議,討論項(xiàng)目的進(jìn)展、遇到的問題,討論下一步的工作計(jì)劃等,通過這種方法來提高學(xué)生的團(tuán)隊(duì)合作能力。
第四步:教學(xué)評(píng)價(jià)。
在經(jīng)過一個(gè)完整的教學(xué)流程后,教師需要對(duì)教學(xué)效果進(jìn)行一個(gè)教學(xué)評(píng)價(jià)。我們將采取多層次測(cè)試的方式進(jìn)行評(píng)價(jià)。第一層次,也是最基本的考核層面,要強(qiáng)調(diào)知識(shí)點(diǎn)的掌握。因此,每個(gè)章節(jié)都會(huì)給出一些選擇題和填空題,它們覆蓋了本章節(jié)重要知識(shí)點(diǎn),以達(dá)到較為全面地考核學(xué)生對(duì)知識(shí)點(diǎn)的掌握程度。同時(shí),通過學(xué)生做題的情況,也能夠發(fā)現(xiàn)學(xué)生容易出錯(cuò)的問題點(diǎn)。第二層次,要考查學(xué)生的應(yīng)用能力。在掌握知識(shí)點(diǎn)的基礎(chǔ)上,學(xué)生還需要能夠應(yīng)用這些知識(shí)點(diǎn)去解決一些實(shí)際問題,這也是本教改的一個(gè)初衷。因此,每個(gè)章節(jié)還會(huì)給出幾道程序題。這些程序題除綜合了應(yīng)用相關(guān)知識(shí)點(diǎn),還會(huì)結(jié)合實(shí)際應(yīng)用場(chǎng)景。例如,如前所述,應(yīng)用分支結(jié)構(gòu)來解決公司的激勵(lì)性工資支付問題。這樣,一方面能夠考核學(xué)生應(yīng)用知識(shí)點(diǎn)的能力,另一方面,還能考查學(xué)生將其應(yīng)用到解決實(shí)際問題的能力情況。第三層次,則是綜合考評(píng),主要由期末考核來體現(xiàn)。期末考核不僅涉及單個(gè)章節(jié)的內(nèi)容,還會(huì)綜合應(yīng)用于多個(gè)章節(jié)的內(nèi)容,特別是在編程題中,需要綜合應(yīng)用不同知識(shí)點(diǎn)才能解答。通過上述三個(gè)層面的考核,能夠較為全面地考查學(xué)生掌握該課程的情況。特別是在工程教育認(rèn)證的背景下,這種多層次考核的方式能夠較為清晰地看出學(xué)生對(duì)于每個(gè)課程目標(biāo)的達(dá)成情況,以便于對(duì)后續(xù)教學(xué)內(nèi)容進(jìn)行調(diào)整與改進(jìn)。
工程教育認(rèn)證所倡導(dǎo)的教學(xué)方式是當(dāng)前大學(xué)生教育方式的重大改革,涉及所有課程的授課方式的轉(zhuǎn)變,要求教師在授課過程中秉承以學(xué)生為中心,目標(biāo)導(dǎo)向和持續(xù)改進(jìn)的理念,做出授課方式的改變。C 語言教學(xué)本身也面臨一些問題,比如:學(xué)生背景的差異、學(xué)生的學(xué)習(xí)動(dòng)力、如何聯(lián)系實(shí)際進(jìn)行應(yīng)用、教師教學(xué)水平的差異等。為了更好地滿足學(xué)生的需求,解決這些問題也需要改進(jìn)教學(xué)方法。所以在這種背景下,本文提出的以問題驅(qū)動(dòng)的C 語言課程教學(xué)方法改革,通過提出一個(gè)實(shí)際的工程問題來進(jìn)行課程知識(shí)點(diǎn)的講解,能夠讓學(xué)生理解如何使用高級(jí)編程語言進(jìn)行工程問題的表述、建模與求解,培養(yǎng)學(xué)生解決工程問題的能力,以及溝通表達(dá)、項(xiàng)目管理和團(tuán)隊(duì)合作等能力。