邊倩 王振鐸 陳曉范 王振輝
摘要:在C語言中,函數(shù)是完成相對獨立功能的一段程序,函數(shù)的應(yīng)用突出C是函數(shù)式的語言特征。冒泡排序算法是C語言程序設(shè)計的經(jīng)典案例,算法涉及C語言的數(shù)組的使用、循環(huán)的應(yīng)用。該文將冒泡排序算法的實現(xiàn)與函數(shù)結(jié)合起來,采用層層遞進(jìn)的方式分析了算法的函數(shù)實現(xiàn)過程。利用翻轉(zhuǎn)課堂的教學(xué)模式,嘗試將函數(shù)實現(xiàn)的三要素:函數(shù)定義、函數(shù)調(diào)用、參數(shù)傳遞融入算法的實現(xiàn)過程中,目的在于使學(xué)生能夠靈活運用數(shù)組,掌握用數(shù)組來解決一系列問題的方法和技巧;進(jìn)一步提高學(xué)生綜合運用函數(shù)的能力。
關(guān)鍵詞:翻轉(zhuǎn)課堂;函數(shù);冒泡排序算法
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)29-0095-03
1 引言
翻轉(zhuǎn)課堂“The Flipped Classroom”,作為一種基于信息技術(shù)的新型教學(xué)模式,近年來在國內(nèi)外頗受關(guān)注。翻轉(zhuǎn)課堂不是在線課程,它是直接指導(dǎo)和建議式學(xué)習(xí)的混合模式;翻轉(zhuǎn)課堂并非用視頻替代教師,它是一種增加師生互動的方法;翻轉(zhuǎn)課堂為學(xué)生提供了一個自主學(xué)習(xí)的環(huán)境,讓學(xué)生都能跟進(jìn)學(xué)習(xí)進(jìn)度,獲得個性化教育[1]。將翻轉(zhuǎn)課堂理念引入到程序設(shè)計類課程的教學(xué)中,強調(diào)“學(xué)生自主學(xué)習(xí)+教師引導(dǎo)解惑”的教學(xué)模式,提高教學(xué)效果,達(dá)到培養(yǎng)學(xué)生計算機實際動手能力的目的。
本講翻轉(zhuǎn)課堂內(nèi)容隸屬C語言程序設(shè)計這門課程。在計算機教育方面,C語言是為數(shù)不多的與國外保持內(nèi)容同步的課程之一,在本科生教學(xué)中的地位之重要不言而喻,因而,它是全校各專業(yè)本科教學(xué)中的一門重要公共技術(shù)基礎(chǔ)課,初步系統(tǒng)地介紹了結(jié)構(gòu)化程序設(shè)計的思想和方法。課程教學(xué)要求學(xué)生在掌握相關(guān)C語言的語言知識,編程技術(shù)的基礎(chǔ)上進(jìn)一步掌握程序設(shè)計的思想和方法,進(jìn)而用編程手段來解決各種實際問題。由于C語言是許多后續(xù)專業(yè)課程的基礎(chǔ),因此,在本科生教學(xué)體系中,C語言教學(xué)僅是起點,而非終點。在課程教學(xué)思路,借助程序設(shè)計的知識作為載體,通過傳授基本問題的求解過程和基本思路,力求讓學(xué)生逐步建立用編程手段來解決人們遇到的各式各樣問題的計算思維。旨在培養(yǎng)學(xué)生分析問題,解決問題的能力。為了培養(yǎng)計算思維能力,課程重點放在講思路上。授課理念為:以基礎(chǔ)概念和結(jié)構(gòu)為主線,以程序設(shè)計方法和解題思路為核心[2]。本講翻轉(zhuǎn)課堂內(nèi)容的設(shè)計思路是將函數(shù)、數(shù)組知識點有機地融入微課中,利用冒泡排序算法案例,合理的設(shè)計翻轉(zhuǎn)課堂內(nèi)容,使學(xué)生通過課下自學(xué)能夠充分掌握所學(xué)內(nèi)容。
2 本講教學(xué)總體思想
本講翻轉(zhuǎn)課堂的設(shè)計思想是:以算法設(shè)計為主線,函數(shù)應(yīng)用為目的展開整個教學(xué)活動的[3]。首先,從應(yīng)用方面進(jìn)行問題導(dǎo)入,引起學(xué)生的興趣。接下來,從算法設(shè)計角度出發(fā),進(jìn)行算法分析,培養(yǎng)學(xué)生的邏輯思維能力。然后,用函數(shù)實現(xiàn)算法,培養(yǎng)學(xué)生的程序設(shè)計能力;進(jìn)而培養(yǎng)學(xué)生函數(shù)的應(yīng)用能力。最后,提出算法的優(yōu)化改進(jìn),擴(kuò)展學(xué)生的思維。
3 翻轉(zhuǎn)課堂設(shè)計
3.1 課程引入
課程首先引入函數(shù)的功能特性。對于大型程序的開發(fā),實現(xiàn)的方法往往采用自頂向下,分而治之的方法,即將程序按功能分割成相對獨立的模塊,那么每一個相對獨立的模塊用什么來實現(xiàn)呢?就是函數(shù)。所以說:函數(shù)是一段可以重復(fù)調(diào)用的,功能相對獨立的完整的一段程序。如圖1所示。
接下來,向?qū)W生進(jìn)一步提出問題:函數(shù)功能如何實現(xiàn)?
向?qū)W生總結(jié)出函數(shù)實現(xiàn)的三要素:函數(shù)定義、函數(shù)調(diào)用、參數(shù)調(diào)用[4]。首先要定義好函數(shù),函數(shù)的定義包括函數(shù)首部和函數(shù)體,函數(shù)體先進(jìn)行聲明,然后是語句設(shè)計;接下來,函數(shù)必須通過調(diào)用才能實現(xiàn)其功能,函數(shù)調(diào)用有三種形式:函數(shù)語句調(diào)用、函數(shù)表達(dá)式調(diào)用,函數(shù)參數(shù)調(diào)用;最后,在函數(shù)調(diào)用時,要完成函數(shù)參數(shù)的傳遞,將實際參數(shù)傳遞給形參。函數(shù)定義是功能的設(shè)計,函數(shù)調(diào)用和參數(shù)傳遞是功能的實現(xiàn)。為了說明函數(shù)的實現(xiàn)三要素,以冒泡排序算法函數(shù)設(shè)計為例來理解函數(shù)的三要素。圖2所示為微課堂函數(shù)三要素講解。
3.2 冒泡排序算法函數(shù)設(shè)計
通過對函數(shù)的實現(xiàn)的三要素解析,用冒泡排序算法的實現(xiàn)來剖析函數(shù)實現(xiàn)的三要素。具體給出算法實現(xiàn)的流程分析和函數(shù)設(shè)計。
1) 冒泡排序的基本思想[4]
先以五個隨機數(shù)由小到大的排序過程為例,說明冒泡排序算法的基本思想。通過排序過程的動畫演示,分析出排序的核心思想是:相鄰者比較,逆序則交換。對于n個數(shù),共進(jìn)行n-1趟排序,在第j趟排序中共兩兩比較n-j次。
2)提取要點
通過排序的動畫演示過程及核心思想分析,梳理思路,提取排序過程的要點。
排序采用什么樣的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)?一維數(shù)組。
如何實現(xiàn)比較的趟數(shù)和每趟兩兩比較次數(shù),二重循環(huán)。
如何進(jìn)行每趟的兩兩比較?相鄰元素,逆序交換。
3) 冒泡排序的算法設(shè)計
介紹冒泡排序流程分析時,采用提取要素及推演歸納的方法。首先提取算法實現(xiàn)的關(guān)鍵要素,然后對算法的實現(xiàn)過程推演歸納,給出算法實現(xiàn)的流程。在要點分析的基礎(chǔ)上,進(jìn)一步來進(jìn)行排序算法流程設(shè)計。設(shè):j 為外循環(huán)控制變量,i 為內(nèi)循環(huán)控制變量。第一步,確定排序趟數(shù),n-1趟,這是外循環(huán),循環(huán)語句為:控制變量J初值從零開始,控制條件是小于n-1,第二步,確定第J趟兩兩比較的次數(shù),n-j次,這是內(nèi)循環(huán),循環(huán)語句為:i初值為0,控制條件為n-j-1。最后,確定第j趟待排序元素依次比較交換,用條件表達(dá)式實現(xiàn),如果前一個元素a[i]大于后一個元素a[i+1],則進(jìn)行交換。
4) 冒泡排序算法函數(shù)實現(xiàn)
介紹冒泡排序函數(shù)實現(xiàn)時,采用逐層遞進(jìn)的方法,在流程分析的基礎(chǔ)上,按照函數(shù)設(shè)計的三要素,層層遞進(jìn)完成函數(shù)設(shè)計。依據(jù)算法流程設(shè)計,來實現(xiàn)排序函數(shù)功能。根據(jù)前面分析的算法流程,和函數(shù)定義格式[5],完成函數(shù)設(shè)計。如圖2所示。
首先設(shè)計函數(shù)首部。由于排序不帶回返回值,所以函數(shù)類型為void。這里我們給函數(shù)取名bubble(形參表?),根據(jù)前面的分析,可以知道,此處形式參數(shù)為:排序數(shù)組和待排序元素(這里設(shè)排序整形數(shù)組為a,排序元素個數(shù)為n);
5) 冒泡排序算法主函數(shù)設(shè)計
排序算法的函數(shù)雖然設(shè)計好了,但是,并沒有實現(xiàn)其功能。函數(shù)必須通過調(diào)用,才能完成功能的實現(xiàn)。下面來設(shè)計主調(diào)函數(shù)。主調(diào)函數(shù)的語句設(shè)計中,啟發(fā)學(xué)生思考主調(diào)函數(shù)主要完成的任務(wù):排序元素的輸入;調(diào)用排序函數(shù)實現(xiàn)元素排序;將排序結(jié)果輸出。這里排序元素個數(shù)采用宏定義來完成。
6)函數(shù)調(diào)用及參數(shù)傳遞
主函數(shù)中設(shè)計中,如果定義的排序函數(shù)置于主調(diào)函數(shù)后面,在主函數(shù)里要對被調(diào)函數(shù)進(jìn)行聲明。翻轉(zhuǎn)課堂的視頻講解中要向?qū)W生強調(diào):函數(shù)聲明要同函數(shù)定義的類型、名稱、參數(shù)保持一致。如何進(jìn)行調(diào)用呢?根據(jù)學(xué)習(xí)的內(nèi)容,應(yīng)該知道,采用函數(shù)語句的調(diào)用形式,調(diào)用時要進(jìn)行參數(shù)的傳遞了。重點強調(diào),參數(shù)傳遞為實際參與比較的參數(shù)傳遞給函數(shù)定義的形式參數(shù)。
3.3 思維擴(kuò)展
完成了排序算法的函數(shù)實現(xiàn)翻轉(zhuǎn)課堂設(shè)計,為了啟發(fā)學(xué)生擴(kuò)展思維,案例設(shè)計中突出某趟排序已經(jīng)有序(例如第四趟排序),如圖4所示。在執(zhí)行第4趟排序時,沒有發(fā)生數(shù)組元素交換,表明此時數(shù)組已經(jīng)達(dá)到有序[6],若讓排序繼續(xù)執(zhí)行沒有實際意義。
能否從“優(yōu)化”角度出發(fā)對算法加以改進(jìn)?請學(xué)生們在學(xué)完本次課程之后,課后完成優(yōu)化程序的設(shè)計,課堂上進(jìn)行程序設(shè)計優(yōu)化算法的討論。
3.4 內(nèi)容小結(jié)
針對函數(shù)的綜合應(yīng)用,設(shè)計了本講翻轉(zhuǎn)課堂。內(nèi)容的設(shè)計上突出函數(shù)的含義、冒泡排序算法的函數(shù)設(shè)計。對函數(shù)實現(xiàn)分,重點完成剖析算法思想和算法流程,通過算法的函數(shù)實現(xiàn)設(shè)計,目的是讓學(xué)生更深入的理解函數(shù)功能實現(xiàn)的基本三要素。翻轉(zhuǎn)課堂小結(jié)內(nèi)容設(shè)計如圖5所示。
4 結(jié)束語
基于程序設(shè)計課程的翻轉(zhuǎn)課堂教學(xué)模式的探索研究實現(xiàn)的目標(biāo)是:探索基于翻轉(zhuǎn)課堂的《C語言程序設(shè)計》課程中的教學(xué)實施模式和策略。翻轉(zhuǎn)課堂首先是以學(xué)生自主學(xué)習(xí)為中心的一種學(xué)習(xí)方式的探索[7],作為教師需要了解學(xué)生有什么樣的學(xué)習(xí)需求,教師要根據(jù)學(xué)習(xí)內(nèi)容,認(rèn)真組織設(shè)計好講授內(nèi)容,便于學(xué)生課下自主反復(fù)認(rèn)真學(xué)習(xí)教學(xué)內(nèi)容,啟發(fā)學(xué)生獨立思索講授內(nèi)容。
參考文獻(xiàn):
[1] 劉英.基于“翻轉(zhuǎn)課堂”的課程教學(xué)改革[J].中國高等教育,2016(18):36-38.
[2] 范青剛,蔡艷寧,王麗,等.C語言函數(shù)教學(xué)方法研究[J].電腦知識與技術(shù),2017,13(8):161-162.
[3] 邊倩,王振鐸.基于慕課的“C語言程序設(shè)計”課程翻轉(zhuǎn)課堂教學(xué)模式的探索研究[J].微型電腦應(yīng)用,2018,34(3):35-37.
[4] 邊倩,焦康,王忠.“C語言程序設(shè)計”課程數(shù)組教學(xué)方法的探索[J].計算機工程與科學(xué),2014,36(S2):101-103.
[5] 朱安平.一種C語言函數(shù)教學(xué)的設(shè)計與實踐[J].計算機工程與科學(xué),2014,36(S1):139-142.
[6] 代文征.高效冒泡排序算法設(shè)計與實現(xiàn)[J].軟件導(dǎo)刊,2016,15(6):63-64.
[7] 王鑒.論翻轉(zhuǎn)課堂的本質(zhì)[J].高等教育研究,2016,37(8):53-59.
【通聯(lián)編輯:朱寶貴】