邊倩 王振鐸 陳曉范 王振輝


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