易鋒,馬慧,何懷文,翁佩純
(電子科技大學(xué)中山學(xué)院計(jì)算機(jī)學(xué)院,廣東中山528400)
目前大多數(shù)高校計(jì)算機(jī)類(lèi)專業(yè)將C 語(yǔ)言作為入門(mén)的編程語(yǔ)言,開(kāi)設(shè)了以C 語(yǔ)言為基礎(chǔ)的程序設(shè)計(jì)基礎(chǔ)課程,目的是培養(yǎng)學(xué)生程序設(shè)計(jì)能力和編程思維。程序設(shè)計(jì)基礎(chǔ)是計(jì)算機(jī)類(lèi)專業(yè)核心基礎(chǔ)課程,是數(shù)據(jù)結(jié)構(gòu)與算法和操作系統(tǒng)等專業(yè)課的先修課程。因此程序設(shè)計(jì)基礎(chǔ)的教學(xué)對(duì)計(jì)算機(jī)類(lèi)專業(yè)來(lái)講極為重要。
采用C語(yǔ)言的程序設(shè)計(jì)基礎(chǔ),內(nèi)容全面、抽象,語(yǔ)法規(guī)則繁雜;從程序設(shè)計(jì)基礎(chǔ)到高級(jí)應(yīng)用;知識(shí)點(diǎn)豐富、重難點(diǎn)多,跨度極大,學(xué)生在學(xué)習(xí)過(guò)程中存在較大困難[1]。這不僅導(dǎo)致學(xué)生對(duì)基本語(yǔ)法知識(shí)掌握較差,而且阻礙對(duì)學(xué)生程序設(shè)計(jì)能力訓(xùn)練和編程思維的培養(yǎng)。
針對(duì)該問(wèn)題,有教師從教學(xué)內(nèi)容、教學(xué)方法、教學(xué)實(shí)踐等多方面闡述了教改方案,并取得了一定效果[2-3]。但是導(dǎo)致基于C語(yǔ)言的程序設(shè)計(jì)基礎(chǔ)課程學(xué)習(xí)門(mén)檻較高的一個(gè)重要原因是學(xué)生所處的時(shí)代與C語(yǔ)言出現(xiàn)的年代之間的軟硬件差異;特別是C語(yǔ)言存在許多對(duì)內(nèi)存的精細(xì)管理,導(dǎo)致學(xué)生很難理解和掌握相關(guān)教學(xué)內(nèi)容[4]。由于缺乏對(duì)C 語(yǔ)言出現(xiàn)的歷史背景的了解,學(xué)生學(xué)習(xí)中很難知其然,更難達(dá)到知其所以然的教學(xué)效果。
另外一方面,當(dāng)前計(jì)算機(jī)內(nèi)存并沒(méi)有成為當(dāng)前流行編程語(yǔ)言首要考慮的問(wèn)題。許多大學(xué)生在初、高中學(xué)習(xí)過(guò)編程課程,比如應(yīng)用于科學(xué)計(jì)算的Python 語(yǔ)言已經(jīng)成為許多初高中編程課程的首選語(yǔ)言[5]。Python 支持“對(duì)象型”或者“無(wú)類(lèi)型”的數(shù)據(jù),也就是按需分配內(nèi)存。在Python 編程中,所有的變量在使用前并不需要顯式定義。編程語(yǔ)言上的差異,教學(xué)中如果不加引導(dǎo)和辨析,會(huì)導(dǎo)致學(xué)生在學(xué)習(xí)C 語(yǔ)言的過(guò)程中,充滿了疑惑和問(wèn)題。
實(shí)際上,通過(guò)對(duì)比C 和Python 差異,能突出兩種語(yǔ)言的特點(diǎn)。利用兩種語(yǔ)言各自優(yōu)點(diǎn),更有利于培養(yǎng)學(xué)生計(jì)算思維、程序設(shè)計(jì)思想和編程技能。有分析,才能有比較;有比較,才能有鑒別[6]。利用Python 語(yǔ)法簡(jiǎn)單,上手容易的特點(diǎn)輔助引入問(wèn)題建模、算法設(shè)計(jì)等程序設(shè)計(jì)思想和計(jì)算思維[7];繼而引入C的實(shí)現(xiàn),這樣可以更好地幫助學(xué)生掌握C 的繁雜語(yǔ)法。有鑒于此,本文在程序設(shè)計(jì)基礎(chǔ)上引入對(duì)比教學(xué)法,并在2021 級(jí)計(jì)算機(jī)和軟件工程兩個(gè)專業(yè)班級(jí)進(jìn)行了教學(xué)實(shí)踐,結(jié)果表明對(duì)課程教學(xué)質(zhì)量的提高有較大的促進(jìn)作用。
20 世紀(jì)80 年代,為了能寫(xiě)出讓計(jì)算機(jī)更快運(yùn)行的程序,C程序員要學(xué)會(huì)像計(jì)算機(jī)一樣思考,這使得編程需要耗費(fèi)大量的時(shí)間。吉多·范·羅蘇姆(Guido van Rossum)針對(duì)該問(wèn)題,同時(shí)結(jié)合了Shell編程的優(yōu)點(diǎn),發(fā)明了Python語(yǔ)言。可以說(shuō)Python語(yǔ)言的設(shè)計(jì)之初就是為了解決C語(yǔ)言學(xué)習(xí)和使用中的缺點(diǎn),是天然的適合與C 語(yǔ)言組合,作為對(duì)比教學(xué)設(shè)計(jì)的語(yǔ)言[8]。在C 語(yǔ)言程序設(shè)計(jì)基礎(chǔ)教學(xué)過(guò)程中,注意C語(yǔ)言某些語(yǔ)法知識(shí)出現(xiàn)的歷史背景,并有意識(shí)地引入Python 語(yǔ)言的語(yǔ)法作為對(duì)比,這樣層層遞進(jìn),逐步深入、分辨異同,可以幫助學(xué)生深入掌握C語(yǔ)言中的重點(diǎn)和難點(diǎn)。下面分為以下七個(gè)部分對(duì)C 語(yǔ)言與Python 進(jìn)行對(duì)比教學(xué)設(shè)計(jì)。
從程序設(shè)計(jì)思想角度,可以將高級(jí)編程語(yǔ)言分為面向?qū)ο蠛兔嫦蜻^(guò)程兩類(lèi)。面向過(guò)程是將要解決的問(wèn)題自頂向下,按解決步驟把問(wèn)題逐步細(xì)分為更小的問(wèn)題,然后編寫(xiě)相應(yīng)的函數(shù)解決這些步驟對(duì)應(yīng)的問(wèn)題,C語(yǔ)言是典型的面向過(guò)程的語(yǔ)言。面向過(guò)程的編程語(yǔ)言特點(diǎn)是速度快,性能高;缺點(diǎn)是對(duì)程序員的要求高,不易維護(hù)、復(fù)用性差、不易擴(kuò)展,不適合開(kāi)發(fā)操作系統(tǒng),硬件驅(qū)動(dòng)。
面向?qū)ο笫菍?duì)要解決的問(wèn)題中涉及的對(duì)象進(jìn)行建模,利用對(duì)象描述解決問(wèn)題中涉及屬性、行為,有封裝、繼承、多態(tài)的特性。Python是面向?qū)ο蟮恼Z(yǔ)言,以功能而不是步驟對(duì)問(wèn)題進(jìn)行劃分。優(yōu)點(diǎn)是易維護(hù),復(fù)用性好,易擴(kuò)展;缺點(diǎn)是性能比面向過(guò)程語(yǔ)言的程序低,適合桌面應(yīng)用、網(wǎng)應(yīng)用等軟件開(kāi)發(fā)。
程序設(shè)計(jì)基礎(chǔ)課程伊始,引導(dǎo)學(xué)生建立對(duì)面向過(guò)程和面向?qū)ο笳Z(yǔ)言的正確認(rèn)識(shí),了解兩種不同的程序設(shè)計(jì)思想,通過(guò)對(duì)比,為后續(xù)的面向?qū)ο蟪绦蛟O(shè)計(jì)課程做鋪墊,打基礎(chǔ)。
使用高級(jí)編程語(yǔ)言編寫(xiě)的源程序要在計(jì)算機(jī)上執(zhí)行,必須轉(zhuǎn)換為二進(jìn)制指令,稱為編譯。根據(jù)編譯的不同,可將高級(jí)編程語(yǔ)言分為編譯型語(yǔ)言和解釋性語(yǔ)言。編譯是將源程序編譯成可執(zhí)行的目標(biāo)程序,編譯和運(yùn)行是分開(kāi)的;解釋是在執(zhí)行程序的時(shí)候?qū)υ创a進(jìn)行編譯和執(zhí)行,編譯和運(yùn)行合二為一。
C語(yǔ)言是典型的編譯型語(yǔ)言,其編譯過(guò)程如圖1所示。
沒(méi)有編譯原理基礎(chǔ)的大一新生對(duì)上面的編譯流程理解存在困難。Python 是一種典型的解釋性語(yǔ)言。教學(xué)中可以以輸出“hello world”為例,演示C語(yǔ)言和Python語(yǔ)言的區(qū)別。C語(yǔ)言程序首先對(duì)源程序進(jìn)行編碼,然后經(jīng)過(guò)編譯和鏈接生成目標(biāo)可執(zhí)行程序,然后再執(zhí)行。Python語(yǔ)言可以直接在環(huán)境中調(diào)用函數(shù)進(jìn)行輸出;或者編寫(xiě)源程序后,調(diào)用Python 命令來(lái)執(zhí)行源程序,不會(huì)生成可執(zhí)行程序。
C 語(yǔ)言出現(xiàn)在20 世紀(jì)70 年代,當(dāng)時(shí)個(gè)人電腦典型的內(nèi)存為幾百KB。為了能寫(xiě)出高效運(yùn)行的程序,C語(yǔ)言程序員需要對(duì)內(nèi)存進(jìn)行精確管理與使用。這種考慮,導(dǎo)致C語(yǔ)言是一種靜態(tài)弱類(lèi)型語(yǔ)言,定義了超過(guò)十種的變量類(lèi)型。在C 語(yǔ)言中,變量必須先定義后使用,每種變量類(lèi)型有取值范圍,而且不同數(shù)據(jù)類(lèi)型存在相互的隱式轉(zhuǎn)換和顯示轉(zhuǎn)換。學(xué)生在學(xué)習(xí)本知識(shí)點(diǎn)時(shí),存在非常大的困難。
而Python出現(xiàn)在20世紀(jì)90年代,計(jì)算機(jī),包括個(gè)人電腦的內(nèi)存已經(jīng)大大提高。出現(xiàn)了動(dòng)態(tài)類(lèi)型、內(nèi)存自動(dòng)管理、面向?qū)ο笾欣詣?dòng)回收等內(nèi)存自動(dòng)管理技術(shù)。因此,Python將數(shù)據(jù)類(lèi)型的指定交給解釋器來(lái)管理,是動(dòng)態(tài)強(qiáng)類(lèi)型語(yǔ)言。在Python中,變量使用前不需要先定義變量的類(lèi)型,解釋器會(huì)根據(jù)變量所賦值自動(dòng)決定變量的類(lèi)型;而且一般情況下,可以認(rèn)為整數(shù)類(lèi)型和浮點(diǎn)類(lèi)型是沒(méi)有范圍限制的。
教學(xué)中以Python變量為切入點(diǎn),引入變量和變量類(lèi)型。因?yàn)镻ython 中基本類(lèi)型少,結(jié)合使用Python 的bin()函數(shù),可以使得學(xué)生比較容易理解變量類(lèi)型與變量在內(nèi)存中存儲(chǔ)的關(guān)系。此后,引入C語(yǔ)言出現(xiàn)歷史背景,引導(dǎo)學(xué)生思考,如何在較小內(nèi)存前提下,更加高效地存儲(chǔ)數(shù)據(jù),以此過(guò)渡到C 語(yǔ)言中的數(shù)據(jù)類(lèi)型。在講授過(guò)程中可以以不同類(lèi)型的溢出為例,幫助學(xué)生理解C 語(yǔ)言基本變量類(lèi)型、數(shù)據(jù)類(lèi)型的范圍及相互間轉(zhuǎn)換的原理。
雖然在變量使用方面,Python比C語(yǔ)言更為簡(jiǎn)單,但在運(yùn)行速度方面,前者不及后者。課堂中設(shè)計(jì)了“1+…+1”的實(shí)例演示兩種語(yǔ)言運(yùn)行速度方面的差異。在累加百萬(wàn)次的時(shí)候,兩者差距不明顯;但是當(dāng)累加十億次后,兩者運(yùn)行的時(shí)間差距達(dá)到幾十倍。這種運(yùn)行時(shí)間的差距是由編譯類(lèi)型和解釋類(lèi)型,以及Python 的內(nèi)存自動(dòng)管理等因素造成。解此例可以進(jìn)一步向?qū)W生闡述兩種語(yǔ)言的特點(diǎn)和不同的應(yīng)用領(lǐng)域。
C和Python 包含順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種控制結(jié)構(gòu)。
對(duì)于選擇結(jié)構(gòu),C用零表示條件為假,非零表示條件為真;Python則提供用于判斷真假的Bool類(lèi)型,也兼容C語(yǔ)言的條件規(guī)則;教學(xué)中可以使用bool()函數(shù)進(jìn)行測(cè)試舉例。C 使用&&,||,!的抽象符號(hào)表示邏輯與、或、非運(yùn)算,學(xué)生難以記憶;而Py‐thon使用英文單詞AND、OR 和NOT 表示,兩者對(duì)應(yīng)關(guān)系如表1所示。通過(guò)對(duì)比,學(xué)生更容易記住C中抽象符號(hào)所表達(dá)的含義及運(yùn)算規(guī)則。在實(shí)現(xiàn)上,C 提供了if、switch 和?:運(yùn)算符等條件控制語(yǔ)句;Python 只提供了if 條件語(yǔ)句。Python 之所以可以簡(jiǎn)化,因?yàn)閟witch和?:運(yùn)算符均可以由if語(yǔ)句等價(jià)實(shí)現(xiàn)。教學(xué)中,可以引導(dǎo)學(xué)生在C中使用if實(shí)現(xiàn)switch和?:控制語(yǔ)句。

表1 C和Python的邏輯值和邏輯運(yùn)算
對(duì)于循環(huán)結(jié)構(gòu),C 提供while、do-while 和for 三種循環(huán)控制語(yǔ)句;Python提供while和for循環(huán)控制語(yǔ)句。通過(guò)對(duì)比C和Py‐thon的流程控制語(yǔ)句的異同,可以使同學(xué)更加深入理解不同控制語(yǔ)句之間的關(guān)系;了解不同語(yǔ)言在流程控制語(yǔ)句上的借鑒與發(fā)展。
Python 中的函數(shù)定義和使用相對(duì)簡(jiǎn)單,沒(méi)有對(duì)函數(shù)聲明、函數(shù)返回值的限定要求。教學(xué)中以Python 中的簡(jiǎn)單加法例子為切入點(diǎn),引入函數(shù),介紹函數(shù)的定義、實(shí)現(xiàn)過(guò)程和調(diào)用。以Python的例子為基礎(chǔ),引入C語(yǔ)言的函數(shù)定義形式。闡述兩者的區(qū)別和相同點(diǎn),加深學(xué)生對(duì)C 語(yǔ)言函數(shù)定義的掌握。首先C語(yǔ)言的函數(shù)需要有返回值類(lèi)型;其次C語(yǔ)言的函數(shù)體,與Python的縮進(jìn)定義不同的是由一對(duì){}括起來(lái)的語(yǔ)句組成。C語(yǔ)言的語(yǔ)句之后均帶有分號(hào);以表示語(yǔ)句的結(jié)束,Python的每條語(yǔ)句占一行。根據(jù)C語(yǔ)言靜態(tài)弱類(lèi)型的特點(diǎn),指出函數(shù)聲明的作用。兩者定義的函數(shù)均需要定義函數(shù)名,函數(shù)名后為一對(duì)圓括號(hào);如果有參數(shù),參數(shù)要寫(xiě)在圓括號(hào)內(nèi);均由return語(yǔ)句指定函數(shù)的返回值。參數(shù)的傳遞中,對(duì)于簡(jiǎn)單類(lèi)型,兩者都是值傳遞,也即形參的更改不會(huì)修改實(shí)參的值。
數(shù)組是用一個(gè)變量名保存多個(gè)相同類(lèi)型的值。在Python中,一般認(rèn)為沒(méi)有內(nèi)置對(duì)數(shù)組的支持,可以使用元組或列表代替。相比C語(yǔ)言,Python的列表定義和初始化更為簡(jiǎn)單[9]。
教學(xué)中,首先介紹Python 中列表的使用,讓學(xué)生首先熟悉程序設(shè)計(jì)中數(shù)組的使用方法。然后引入C 語(yǔ)言的數(shù)組,結(jié)合C語(yǔ)言的出現(xiàn)歷史背景,指出C語(yǔ)言的數(shù)組表示內(nèi)存中一片連續(xù)的存儲(chǔ)區(qū)。C99 之前,為了優(yōu)化對(duì)內(nèi)存的使用,定義數(shù)組時(shí)必須指定數(shù)組類(lèi)型和大小,在使用過(guò)程中數(shù)組大小是不可變的;隨著技術(shù)進(jìn)步,C99標(biāo)準(zhǔn)規(guī)定了可以使用變長(zhǎng)數(shù)組。通過(guò)對(duì)比Python數(shù)組定義和初始,加深學(xué)生對(duì)C語(yǔ)言數(shù)組定義和初始化規(guī)則的理解和記憶。
此外數(shù)組作為實(shí)參,是傳址方式,即實(shí)參和形參共用同一個(gè)存儲(chǔ)空間。在高級(jí)編程語(yǔ)言中,為了實(shí)現(xiàn)內(nèi)存的高效使用,對(duì)于數(shù)組這種復(fù)合數(shù)據(jù)類(lèi)型的參數(shù)傳遞,傳遞的是數(shù)組的地址值。通過(guò)C語(yǔ)言和Python中參數(shù)傳遞的對(duì)比,引導(dǎo)學(xué)生理解傳值和傳地址作為參數(shù)的時(shí)機(jī)選擇原理。
Python提供了存儲(chǔ)字符串的類(lèi)型——String,及豐富的字符串處理函數(shù)。Python 中的字符串由一對(duì)單引號(hào)或一對(duì)雙引號(hào)定義。而在C語(yǔ)言中一對(duì)單引號(hào)定義的是單個(gè)字符,一對(duì)雙引號(hào)定義的是字符串。如果在字符串中出現(xiàn)的單引號(hào)或雙引號(hào)字符,Python的定義可以避免其引起的結(jié)束歧義;而在C語(yǔ)言,則需要使用轉(zhuǎn)義字符進(jìn)行轉(zhuǎn)義。在Python中,字符串也是以列表方式存儲(chǔ),其簡(jiǎn)單的定義和豐富的函數(shù),可以幫助學(xué)生快速掌握字符串的定義和使用。
課堂教學(xué)中,首先使用Python 引入字符串,然后介紹C 語(yǔ)言中的字符串的定義和使用,特別要指出C語(yǔ)言使用字符數(shù)組對(duì)字符串進(jìn)行存儲(chǔ)和表示,且字符數(shù)組的末尾為元素0。根據(jù)Python提供的字符串處理函數(shù),以及C語(yǔ)言中字符串存儲(chǔ)特點(diǎn),引導(dǎo)學(xué)生實(shí)現(xiàn)Python字符串不同處理函數(shù)的功能。
本文2021 年在程序設(shè)計(jì)基礎(chǔ)中引入對(duì)比教學(xué)法。通過(guò)2019、2020和2021級(jí)期末考試成績(jī)分布情況,可以考察對(duì)比教學(xué)的效果。同時(shí)利用超星泛雅平臺(tái)提供的問(wèn)卷調(diào)查工具,設(shè)計(jì)了調(diào)查問(wèn)卷了解和分析2021級(jí)學(xué)生對(duì)對(duì)比教學(xué)模式的反饋。
2019 級(jí)、2020 級(jí)和2021 級(jí)軟件兩個(gè)班級(jí)的期末考試成績(jī)分布情況如圖2 所示。采用對(duì)比教學(xué)法展開(kāi)教學(xué)的期末考試成績(jī)優(yōu)秀(≥80)率明顯提高,不及格率也有下降。2021 級(jí)期末考試90分以上占比達(dá)到20%以上,相比2019級(jí)的10%和2020級(jí)的14%有了很大的提升;80~89分的占比也從13%左右提升至15%。從圖2 可以看到,提高的部分主要來(lái)源于60~79 分?jǐn)?shù)段的減少。優(yōu)秀成績(jī)的占比提高,中等學(xué)生和不及格學(xué)生占比下降,說(shuō)明使用對(duì)比教學(xué)法,特別是輔助使用Python語(yǔ)言,一方面可以讓本身學(xué)有余力的同學(xué)除了掌握基本的C 語(yǔ)言語(yǔ)法知識(shí),還能進(jìn)一步掌握本課程要求培養(yǎng)的計(jì)算思維和編程能力;另一方面,對(duì)于能滿足基本要求的同學(xué),則能促進(jìn)這些同學(xué)理解C 語(yǔ)言中諸如函數(shù)、數(shù)組、指針等語(yǔ)法,熟練掌握了素?cái)?shù)判斷、函數(shù)遞歸等基本算法的流程和設(shè)計(jì)思想。

圖2 連續(xù)三屆學(xué)生成績(jī)對(duì)比
在學(xué)期末,利用超星泛雅課程平臺(tái)提供的調(diào)查問(wèn)卷工具設(shè)計(jì)了對(duì)比教學(xué)的問(wèn)卷,主要調(diào)查學(xué)生的編程基礎(chǔ)、課堂學(xué)習(xí)效果、課程難點(diǎn)分布以及對(duì)比教學(xué)對(duì)學(xué)習(xí)本課程的幫助等。從調(diào)查問(wèn)卷的統(tǒng)計(jì)結(jié)果來(lái)看,初高中階段,100%的同學(xué)參加了信息技術(shù)教育課程;其中有37%的同學(xué)接觸過(guò)各種形式的編程,對(duì)編程有初步的了解;8%的同學(xué)在初高中學(xué)習(xí)或者自學(xué)過(guò)Py‐thon語(yǔ)言,只有不到1%的同學(xué)在進(jìn)入大學(xué)之前接觸過(guò)C語(yǔ)言。有68%的同學(xué)認(rèn)為C 語(yǔ)言數(shù)據(jù)類(lèi)型是本課程中第一個(gè)遇到的難點(diǎn);所有難點(diǎn)中,指針占比最高,達(dá)到89%,隨后分別是基本算法(包括閏年判斷、素?cái)?shù)判斷、整數(shù)數(shù)位求解等算法)、函數(shù)、數(shù)組、指針、字符串。對(duì)于C語(yǔ)言和Python,91%的同學(xué)認(rèn)為Py‐thon 的語(yǔ)法更加簡(jiǎn)單,更容易上手;87%的同學(xué)認(rèn)為在課堂中引入Python 語(yǔ)言進(jìn)行對(duì)比教學(xué)對(duì)學(xué)習(xí)程序設(shè)計(jì)基礎(chǔ)課程內(nèi)容和C語(yǔ)言的語(yǔ)法知識(shí)有幫助;24%的同學(xué)認(rèn)為引入Python增加了課程的內(nèi)容,增加了作業(yè)題量;7%的同學(xué)認(rèn)為,學(xué)習(xí)過(guò)程中會(huì)將Python和C語(yǔ)言混淆。總的來(lái)說(shuō),大部分學(xué)生比較認(rèn)可在程序設(shè)計(jì)基礎(chǔ)課程中引入Python語(yǔ)言,使用對(duì)比教學(xué)提高教學(xué)質(zhì)量。
Python在程序設(shè)計(jì)基礎(chǔ)課程中的優(yōu)勢(shì)是語(yǔ)法簡(jiǎn)單,相較于C語(yǔ)言更加容易被理解,上手容易,擁有豐富的學(xué)習(xí)資源;使用Python進(jìn)行程序設(shè)計(jì)更容易,而且更符合新生的思維方式。讓學(xué)生從簡(jiǎn)單的Python入手,大大降低了學(xué)習(xí)程序設(shè)計(jì)基礎(chǔ)的門(mén)檻,消除了學(xué)生對(duì)C語(yǔ)言煩瑣語(yǔ)法和復(fù)雜代碼的恐懼心理。教學(xué)中采用兩種語(yǔ)言實(shí)現(xiàn)同一個(gè)任務(wù),通過(guò)對(duì)比,可以深刻理解C 語(yǔ)言的煩瑣語(yǔ)法知識(shí),不僅做到知其然,而且能做到知其所以然。對(duì)比學(xué)習(xí)能夠讓學(xué)生聚焦于程序設(shè)計(jì)基礎(chǔ)中的計(jì)算思維和編程思想的訓(xùn)練;同時(shí)能夠有效避免學(xué)生以往在學(xué)習(xí)C語(yǔ)言過(guò)程中,程序代碼錯(cuò)誤率高的問(wèn)題;幫助學(xué)生理解C 語(yǔ)言的語(yǔ)法細(xì)節(jié),提高學(xué)生編程技能。
雖然對(duì)比式教學(xué)引入Python,但因其語(yǔ)法簡(jiǎn)單,所以并不會(huì)過(guò)多增加教學(xué)內(nèi)容。對(duì)比式教學(xué)目的是通過(guò)比較,培養(yǎng)學(xué)生計(jì)算思維、編程等能力。由簡(jiǎn)入繁,遵循學(xué)生從簡(jiǎn)單到復(fù)雜的認(rèn)識(shí)規(guī)律,從而在教學(xué)上做到有的放矢,使課程教學(xué)目標(biāo)更加明確、教學(xué)內(nèi)容安排更易理解,同時(shí)可以為后續(xù)課程更好地進(jìn)行銜接,更好地搭建專業(yè)知識(shí)體系,避免知識(shí)點(diǎn)的孤立化、碎片化。在教學(xué)過(guò)程中,講解C 語(yǔ)言知識(shí)點(diǎn)時(shí),對(duì)Python 的語(yǔ)法只是做適當(dāng)延展,為C語(yǔ)言的學(xué)習(xí)做好鋪墊。在講解煩瑣的C語(yǔ)言語(yǔ)法規(guī)則時(shí)要有意識(shí)與Python進(jìn)行對(duì)比,讓學(xué)生認(rèn)識(shí)到每處語(yǔ)法不同的深層次原因,特別是C語(yǔ)言中復(fù)雜語(yǔ)法是在歷史背景下有來(lái)由的,這樣就實(shí)現(xiàn)了知識(shí)點(diǎn)的深刻理解。
此外,對(duì)比教學(xué)法較好地解決了學(xué)生學(xué)習(xí)時(shí)難度太大,積極性不高,學(xué)習(xí)目的不明確的問(wèn)題。在教學(xué)實(shí)踐中,分別用Py‐thon 和C 語(yǔ)言給學(xué)生布置的作業(yè)。Python 比C 語(yǔ)言要簡(jiǎn)潔很多,以Python為引入,利用Python的簡(jiǎn)潔語(yǔ)法,可以讓學(xué)生快速完成布置的作業(yè),掌握諸如數(shù)據(jù)類(lèi)型、函數(shù)、數(shù)組等通用知識(shí)點(diǎn)的使用。然后再使用C 語(yǔ)言,使用更為細(xì)碎煩瑣的語(yǔ)法,更為細(xì)致地完成相同的作業(yè),從而提高學(xué)習(xí)效果和教學(xué)質(zhì)量。
雖然對(duì)比教學(xué)法的引入可以一定程度上解決以C 語(yǔ)言為基礎(chǔ)的程序設(shè)計(jì)基礎(chǔ)教學(xué)中遇到的問(wèn)題,但同時(shí)也帶來(lái)了課程內(nèi)容增加、作業(yè)量加大等問(wèn)題;而且以Python作為對(duì)比語(yǔ)言,不能解決學(xué)生學(xué)習(xí)C 語(yǔ)言指針時(shí)的各種困惑和疑問(wèn)。對(duì)于前一個(gè)問(wèn)題,可以增加課時(shí);或者利用網(wǎng)絡(luò)教學(xué)平臺(tái),將有關(guān)Python的內(nèi)容事先放置在課程學(xué)習(xí)平臺(tái)上,讓同學(xué)預(yù)習(xí)和復(fù)習(xí)。對(duì)于后面一個(gè)問(wèn)題,學(xué)生在學(xué)習(xí)指針時(shí)最大的疑惑在于如何使用,所以可以嘗試將數(shù)據(jù)結(jié)構(gòu)的部分內(nèi)容引入,增加學(xué)生對(duì)指針必要性的理解,以及對(duì)使用規(guī)則的熟悉。這也是本文接下來(lái)要繼續(xù)準(zhǔn)備做的工作。
通過(guò)在程序設(shè)計(jì)基礎(chǔ)中使用Python和C語(yǔ)言的對(duì)比,論述了對(duì)比教學(xué)法在教學(xué)過(guò)程中所起的作用,更好地開(kāi)展了程序設(shè)計(jì)基礎(chǔ)課程教學(xué),提出了一個(gè)新的課堂教學(xué)設(shè)計(jì)。該教學(xué)方法的有效實(shí)施,對(duì)教學(xué)質(zhì)量的提高有較大的促進(jìn)作用。