車 敏,安 利,高 靜
(空軍工程大學(xué) 裝備管理與無人機工程學(xué)院,陜西 西安 710051)
案例教學(xué)法被認為是順應(yīng)當(dāng)代教育改革方向的成功教育模式。本文將案例教學(xué)引入到計算機程序設(shè)計基礎(chǔ)課程數(shù)組部分實踐教學(xué)過程,并對教學(xué)效果與實踐經(jīng)驗進行分析研究,結(jié)果證明在數(shù)組部分采用實際的生活案例設(shè)計,極大地調(diào)動了學(xué)生的主觀能動性,激發(fā)了學(xué)生對知識靈活運用的探究興趣。
案例教學(xué)起初是由美國哈佛大學(xué)商學(xué)院提出,在多次實踐后取得了成功,案例教學(xué)是在課堂上引入具有趣味性和生動性的案例,與傳統(tǒng)教學(xué)相比,該方法使課堂更加活躍,教師也通過這種教學(xué)法更新了教育理念,實現(xiàn)“知識傳授”向“能力培養(yǎng)”的轉(zhuǎn)變。案例教學(xué)最早應(yīng)用于法學(xué)行業(yè)和醫(yī)學(xué)行業(yè),直到1970年,這種教學(xué)方法開始在教育行業(yè)推廣使用[1]。
案例教學(xué)法的優(yōu)勢在于:
(1)直觀性強,易引起學(xué)生的興趣,使學(xué)生在好奇心的驅(qū)使下完成知識的領(lǐng)悟;
(2)設(shè)計一般采用案例引入——提出問題——分析討論——解決問題——歸納總結(jié)流程。這幾步層層遞進,有利于學(xué)生自主思考和分析;
(3)案例設(shè)計一般從實際生活實例入手,實踐性強,使學(xué)生在上機實踐中完成知識的運用[2-3]。
學(xué)生在數(shù)組部分學(xué)習(xí)時,普遍感覺數(shù)組概念簡單,基本內(nèi)容簡單易懂,但解決實際問題時通常無處著手。對學(xué)生來說,在課堂理論教學(xué)中,教師通常介紹數(shù)組的結(jié)構(gòu)特點,并讓解決一類問題。這部分案例通常較簡單,目的在于方便學(xué)生理解數(shù)組的數(shù)據(jù)結(jié)構(gòu)。
傳統(tǒng)數(shù)組部分案例設(shè)計大都采用經(jīng)典排序或查找算法。學(xué)生在上機實踐過程中通常能較好地完成這部分內(nèi)容,經(jīng)典數(shù)組應(yīng)用中的排序和查找算法代碼較成熟、精煉,學(xué)生易于理解掌握并熟記。這樣的案例設(shè)計通常無法加深學(xué)生對數(shù)組數(shù)據(jù)結(jié)構(gòu)特點的掌握,只是完成了固定代碼的拷貝實踐練習(xí)。
針對傳統(tǒng)數(shù)組部分案例設(shè)計的不足,本文將學(xué)科競賽中的大數(shù)運算引入到數(shù)組部分的實踐練習(xí)中,使用了“由淺入深”與“循序漸進”相結(jié)合的案例教學(xué)法。
實際生活中存在有超大整數(shù),這些超大數(shù)據(jù)需進行信息處理。而計算機中所有數(shù)據(jù)類型都無法表示這些超大數(shù)據(jù),因其位數(shù)超過最大數(shù)據(jù)類型所能表示的范圍,因此如何完成這類數(shù)據(jù)的存儲和運算值得討論。
從大數(shù)的存儲進行分析討論,涉及字符數(shù)組知識。字符數(shù)組存在“%S”格式輸入和輸出,把超大數(shù)作為字符串,采用字符數(shù)組存放,可方便完成數(shù)據(jù)的輸入輸出[4]。從最簡單的超大整數(shù)加法入手,解決存放問題。兩數(shù)相加涉及的知識如下:
(1)加法的運算是從低位向高位進位,若數(shù)組按順序存放,大數(shù)的最高位在數(shù)組的首元素,若加法運算后最高位存在進位時,需依次移動數(shù)組中的元素,較為繁瑣。故加法運算前,先進行字符串的在字符數(shù)組中的逆序存放,即大數(shù)的最低位為數(shù)組的首元素。
(2)進位問題的判定,對應(yīng)位做加法時存在進位問題。
(3)運算結(jié)果的輸出問題,加法運算相對簡單,該案例的設(shè)計較好地訓(xùn)練了學(xué)生對字符數(shù)組應(yīng)用的掌握。由加法運算過渡到減法運算,強調(diào)減法和加法運算的不同之處。首先保證大數(shù)減小數(shù),可通過比較字符串比大小確定大數(shù);減法從低位到高位進行對應(yīng)相減運算,結(jié)果為負時,前一位數(shù)需減1(借1),最后對于結(jié)果為負數(shù)的值,進行加10處理,如圖1所示。
圖1 兩數(shù)相減示意圖
對于兩個超大整數(shù)乘法運算[5],數(shù)據(jù)的存放及輸入輸出與數(shù)據(jù)加法和減法相同,兩大數(shù)乘法運算的關(guān)鍵在于首先確定相乘結(jié)果為幾位數(shù)(n位數(shù)和n位數(shù)相乘結(jié)果不大于2n位數(shù))。其次,第i位和第j位相乘結(jié)果存放在第i+j位,如圖2所示。最后處理進位關(guān)系(通過與整數(shù)10進行模和除法運算,對第i+j位的累加求和后的兩位數(shù)進行分離)。
乘法運算案例的設(shè)計是對加減法運算的循序遞進,學(xué)生由乘法運算易想到除法運算,除法運算要考慮的問題更復(fù)雜,因此在實踐教學(xué)過程中不做要求,但對于學(xué)習(xí)程度較好的學(xué)生,可引導(dǎo)他們進行下一步學(xué)習(xí)。
圖2 兩數(shù)相乘示意圖
從兩個超大數(shù)的加法、減法到乘法案例設(shè)計循序漸進,使學(xué)生在上機實踐的過程中既能很好地理解超大數(shù)以字符串形式存放在數(shù)組,又能較好地使用數(shù)組數(shù)據(jù)結(jié)構(gòu)的特點來完成指定的邏輯運算。乘法運算的難點在于數(shù)組元素對應(yīng)位相乘的結(jié)果應(yīng)該位于數(shù)組元素的第幾位。這樣的任務(wù)設(shè)置符合學(xué)生的認知規(guī)律,可加深學(xué)生理解并掌握。
此實驗案例的目的在于除了熟練掌握查找、排序常見算法之外,還可靈活利用數(shù)組克服計算機數(shù)據(jù)類型存儲數(shù)據(jù)范圍有限的缺陷。對于超大數(shù)間的運算,可利用數(shù)組存儲數(shù)據(jù)的特點加以解決。讓學(xué)生體會如何利用程序設(shè)計的思想來完成編程。
計算機程序設(shè)計基礎(chǔ)中,數(shù)組是最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),稍復(fù)雜的問題中都會遇到這類數(shù)據(jù)結(jié)構(gòu),因此學(xué)習(xí)和熟練掌握數(shù)組的應(yīng)用非常必要。上機實踐的教學(xué)過程中需精心進行案例的設(shè)計,讓學(xué)生既不會畏難,又附有一定的挑戰(zhàn),使學(xué)生在熟練掌握基礎(chǔ)知識的同時進行一定的知識拓展,這對于培養(yǎng)他們的思考和思維能力非常有益。通過往屆學(xué)生的授課實踐結(jié)果證明,該部分所采用的案例設(shè)計非常成功。計算機程序設(shè)計基礎(chǔ)課程是一門實踐性非常強的課程,對于各章節(jié)實踐案例都需要精心設(shè)計,使學(xué)生在解決生動有趣的實際問題中,完成計算思維能力的培養(yǎng)。