李 娟,張 燕
(西北民族大學(xué) 電氣工程學(xué)院,甘肅 蘭州 730000)
C語(yǔ)言程序設(shè)計(jì)是針對(duì)大一學(xué)生開設(shè)的一門程序設(shè)計(jì)課程,是一門語(yǔ)法靈活、功能齊全、應(yīng)用廣泛的高級(jí)程序設(shè)計(jì)語(yǔ)言,是后續(xù)程序設(shè)計(jì)課程的重要基礎(chǔ)。通過(guò)學(xué)習(xí)這門課程,學(xué)生主要掌握程序設(shè)計(jì)的基本方法,培養(yǎng)正確的程序設(shè)計(jì)思想,熟練地使用C語(yǔ)言編寫程序并具備程序調(diào)試的能力,為后續(xù)課程的學(xué)習(xí)奠定一定的計(jì)算機(jī)基礎(chǔ),同時(shí)也為工程技術(shù)工作者使用計(jì)算機(jī)解決實(shí)際問(wèn)題提供方法。該課程的特點(diǎn)是理論與實(shí)踐相結(jié)合,理論教學(xué)是實(shí)踐教學(xué)的基礎(chǔ),實(shí)踐教學(xué)是理論教學(xué)的強(qiáng)化和應(yīng)用。
在實(shí)際教學(xué)中,教師講課采用的是傳統(tǒng)的“純理論”講授方式,導(dǎo)致該課程出現(xiàn)很多弊端。第一,C語(yǔ)言的語(yǔ)法和概念比較多,現(xiàn)有的大部分教材是先給出某個(gè)知識(shí)點(diǎn),然后闡述該知識(shí)點(diǎn)的語(yǔ)法形式和定義,最后舉例說(shuō)明。傳統(tǒng)教學(xué)中,教師也是采用這樣的授課思維方式,忽視了學(xué)習(xí)C語(yǔ)言的關(guān)鍵是讓學(xué)生掌握程序設(shè)計(jì)的方法并解決實(shí)際問(wèn)題,教出來(lái)的學(xué)生只能看懂程序卻不能使用C語(yǔ)言編寫程序解決實(shí)際的問(wèn)題?!八惴ㄊ浅绦蛟O(shè)計(jì)的靈魂,語(yǔ)言是工具,編程需要采用合適的方法”[1],因此在講解C語(yǔ)言的時(shí)候要重視算法的重要性。第二,C語(yǔ)言是一門實(shí)踐性很強(qiáng)的課程[2],上機(jī)實(shí)踐是C語(yǔ)言的一個(gè)關(guān)鍵環(huán)節(jié)。很多高校C語(yǔ)言的理論學(xué)時(shí)很充足,而上機(jī)實(shí)踐學(xué)時(shí)較少,上機(jī)課程只是簡(jiǎn)單的程序代碼輸入,屬于驗(yàn)證性的實(shí)驗(yàn),設(shè)計(jì)性和綜合性的實(shí)驗(yàn)很少,沒(méi)有起到上機(jī)實(shí)驗(yàn)鍛煉編程能力的作用,導(dǎo)致學(xué)生實(shí)際編寫程序能力沒(méi)有得到很好的提高。第三,大部分普通高校的C語(yǔ)言考核是筆試的方式,這導(dǎo)致教師在教學(xué)中就會(huì)以考試為目的,考的內(nèi)容就講,不考的內(nèi)容就不講,考的內(nèi)容較多的就講得比較詳細(xì),考的內(nèi)容較少的就講得比較淺顯,卻沒(méi)有把握住C語(yǔ)言學(xué)習(xí)的真正目的是讓學(xué)生學(xué)會(huì)編寫程序[3],而不是應(yīng)付考試。
1996年,Bohra和Jacopini提出了程序設(shè)計(jì)的3種基本結(jié)構(gòu)是順序結(jié)構(gòu)程序設(shè)計(jì)、選擇結(jié)構(gòu)程序設(shè)計(jì)和循環(huán)結(jié)構(gòu)程序設(shè)計(jì)[4],并且已經(jīng)證明由這3種基本結(jié)構(gòu)組成的算法結(jié)構(gòu),可以解決任何不管是簡(jiǎn)單還是復(fù)雜的問(wèn)題。循環(huán)結(jié)構(gòu)程序設(shè)計(jì)是C程序設(shè)計(jì)中最重要和最難掌握的程序設(shè)計(jì)結(jié)構(gòu),每一個(gè)C程序設(shè)計(jì)都少不了循環(huán)結(jié)構(gòu)。C語(yǔ)言中提供了3種循環(huán)語(yǔ)句:while循環(huán)語(yǔ)句、do while循環(huán)語(yǔ)句和for循環(huán)語(yǔ)句,其中for循環(huán)語(yǔ)句是最難掌握的一種語(yǔ)句。在一般情況下,為了解決實(shí)際的程序設(shè)計(jì)問(wèn)題,在條件確定給出循環(huán)次數(shù)時(shí),首選的循環(huán)語(yǔ)句是for語(yǔ)句,因?yàn)閒or語(yǔ)句使用時(shí)簡(jiǎn)潔明了、4要素清楚、結(jié)構(gòu)緊湊、靈活多變、執(zhí)行效率高,因此完全可以取代while循環(huán)語(yǔ)句和do while循環(huán)語(yǔ)句,但是在某些情況下,也可以采用while循環(huán)語(yǔ)句和do while循環(huán)語(yǔ)句解決問(wèn)題。
學(xué)生學(xué)習(xí)循環(huán)程序設(shè)計(jì)的問(wèn)題主要是以下幾個(gè)方面:①循環(huán)結(jié)構(gòu)在哪些問(wèn)題中可以使用;②哪些操作需要重復(fù)執(zhí)行;③這些操作在什么情況下需要重復(fù)執(zhí)行;④循環(huán)變量如何改變;⑤編寫的程序容易陷入無(wú)限循環(huán),既不報(bào)告數(shù)據(jù)有錯(cuò),又不結(jié)束循環(huán)。C語(yǔ)言程序設(shè)計(jì)課程的教學(xué)大綱中明確指出循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)是C語(yǔ)言的重點(diǎn)內(nèi)容,也是難點(diǎn)內(nèi)容,為后續(xù)內(nèi)容的學(xué)習(xí)提供重要的基礎(chǔ)。對(duì)于初學(xué)者來(lái)說(shuō),教師在教學(xué)過(guò)程中采用好的教學(xué)方法,更有助于學(xué)生掌握C語(yǔ)言中循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的方法。
對(duì)于C語(yǔ)言程序設(shè)計(jì)這門課程中循環(huán)結(jié)構(gòu)的教學(xué),根據(jù)知識(shí)點(diǎn)的特點(diǎn),教師可以采用滲透式的漸進(jìn)案例驅(qū)動(dòng)教學(xué)法以及遷移引導(dǎo)式的方法,使學(xué)生掌握如何運(yùn)用知識(shí)解決實(shí)際問(wèn)題。該教學(xué)法分別吸收滲透式教學(xué)法[5]、漸進(jìn)式教學(xué)法[6]和案例驅(qū)動(dòng)教學(xué)法[7]的優(yōu)點(diǎn),具有如下特點(diǎn):①通過(guò)講解案例滲透基本概念,達(dá)到讓學(xué)生潛移默化吸收知識(shí)的目的;②案例驅(qū)動(dòng)教學(xué)法的關(guān)鍵是選擇包含相應(yīng)知識(shí)點(diǎn)的經(jīng)典案例,并且講解案例時(shí)進(jìn)行分解,采用由易到難、由淺入深、循序漸進(jìn)的教學(xué)法;③采用循序漸進(jìn)的教學(xué)法講解案例,讓學(xué)生發(fā)現(xiàn)規(guī)律和總結(jié)規(guī)則,理解C語(yǔ)言語(yǔ)法規(guī)則的定義,教師對(duì)于理論知識(shí)再做一個(gè)總結(jié)歸納,使學(xué)生進(jìn)一步提高認(rèn)識(shí),達(dá)到舉一反三應(yīng)用的效果;④在講解完語(yǔ)法規(guī)則和案例后,采用遷移式的教學(xué)法,讓學(xué)生及時(shí)進(jìn)行課堂練習(xí),既鞏固所學(xué)知識(shí),又提高解決實(shí)際問(wèn)題的能力,達(dá)到學(xué)以致用的目的。
案例的設(shè)計(jì)思路是厚基礎(chǔ)、抓重點(diǎn)、破難點(diǎn),具體需要考慮以下幾方面:①所選的案例必須包含相關(guān)的知識(shí)點(diǎn);②案例的選擇要難易程度適中,符合學(xué)生的學(xué)習(xí)水平,并且可以提高學(xué)生的學(xué)習(xí)興趣;③案例的選擇要具有典型性,可以達(dá)到舉一反三的目的;④案例的講解要采用循序漸進(jìn)的教學(xué)方式,由易到難,由淺入深。
案例的設(shè)計(jì)原則是讓學(xué)生理解循環(huán)結(jié)構(gòu)由4部分構(gòu)成,包括循環(huán)變量初始化、循環(huán)控制條件、循環(huán)控制部分和循環(huán)體語(yǔ)句,并且掌握各部分的功能以及作用。
設(shè)計(jì)案例1:求1×2×n的值。
案例分析:案例1是求1到n這n個(gè)數(shù)連乘的乘積。計(jì)算過(guò)程:首先定義一個(gè)變量product保存得到的乘積值,初始化為product=1,然后依次將1, 2n累乘到product中,最后得到product的值就是所求的結(jié)果。通過(guò)觀察發(fā)現(xiàn),每次計(jì)算乘積的時(shí)候,除了乘數(shù)不一樣,其他的過(guò)程都是一樣的。因此,在編寫程序時(shí),可以設(shè)置一個(gè)變量i保存所乘的數(shù),i的值是以1遞增從1變化到n,每次執(zhí)行product=producti,就得到最后的乘積值。通過(guò)分析,給出程序如下:
根據(jù)所給出的程序總結(jié)出for循環(huán)的一般形式和各部分的功能,進(jìn)而把程序推廣到用while和do while表示的形式,程序分別如下:
高性能在線分析計(jì)算現(xiàn)狀與協(xié)同計(jì)算關(guān)鍵技 術(shù)//郭 健,周 京 陽(yáng),李 強(qiáng),Yousu CHEN,羅雅迪,郎燕生//(3):149
while形式:
do while形式:
根據(jù)案例1的設(shè)計(jì),進(jìn)而讓學(xué)生理解循環(huán)結(jié)構(gòu)的特點(diǎn),必須具備4要素且4要素可以靈活變化,出現(xiàn)在不同的地方;同時(shí)讓學(xué)生了解for循環(huán)語(yǔ)句、while循環(huán)語(yǔ)句和do while循環(huán)語(yǔ)句可以互相轉(zhuǎn)換。
設(shè)計(jì)案例2:求1!+2!++100!的值。
案例分析:案例2的講解過(guò)程中,首先讓學(xué)生觀察,發(fā)現(xiàn)它與案例1有相同的部分,借助于案例1的結(jié)論分別求出1!、2!100!,然后把1!加上2!,一直加到100!,就得到最后的結(jié)果,程序設(shè)計(jì)時(shí)用內(nèi)層循環(huán)求n!,外層循環(huán)求1!+2!++100!,這樣構(gòu)成雙重循環(huán),因此程序設(shè)計(jì)如下:
對(duì)于上面的程序,分析出該算法的時(shí)間復(fù)雜度為O(n2),這個(gè)執(zhí)行效率是比較低的。對(duì)于所求解的問(wèn)題,教師應(yīng)進(jìn)一步與學(xué)生探討,求下一個(gè)累加數(shù)的階乘是在前面一個(gè)階乘的基礎(chǔ)上,并且后面一個(gè)數(shù)是前面一個(gè)數(shù)以1遞增得到的,因此對(duì)于前面的程序改進(jìn)后如下:
對(duì)于上面的程序,其算法的時(shí)間復(fù)雜度為O(n),這個(gè)算法的效率就比較高,是線性的。這個(gè)過(guò)程可以培養(yǎng)學(xué)生算法分析的能力和提高其解決實(shí)際問(wèn)題的能力。
案例分析:案例3的講解中,借助于案例2中我們先求 sum=1!+2!++n!,當(dāng)sum>10 000就結(jié)束循環(huán),這時(shí)要有跳出循環(huán)的語(yǔ)句,正好可以使用C語(yǔ)言中的break語(yǔ)句。當(dāng)滿足條件sum>10 000為真(值為1),執(zhí)行break語(yǔ)句,跳出循環(huán),從而終止循環(huán)。程序設(shè)計(jì)如下:
可以看出,for循環(huán)中沒(méi)有循環(huán)控制條件,缺少循環(huán)控制條件就會(huì)變成無(wú)限循環(huán),這時(shí)就要有跳出循環(huán)的語(yǔ)句,即break語(yǔ)句,否則程序?qū)o(wú)休止地執(zhí)行下去,形成死循環(huán)。這個(gè)問(wèn)題的難點(diǎn)是怎么使循環(huán)體滿足條件后結(jié)束循環(huán)體,也是學(xué)生考慮問(wèn)題的關(guān)鍵。
在講解完上述3個(gè)案例后,教師應(yīng)及時(shí)對(duì)用到的知識(shí)和方法做出評(píng)價(jià)和總結(jié),并把相應(yīng)的知識(shí)進(jìn)行延伸,使學(xué)生形成完整的知識(shí)體系。對(duì)于案例1,點(diǎn)評(píng)學(xué)生完成的情況,總結(jié)出循環(huán)結(jié)構(gòu)的一般形式和各部分的功能,得出for循環(huán)語(yǔ)句的一般形式,然后把它推廣到其他形式的循環(huán)結(jié)構(gòu),如while和do while語(yǔ)句。對(duì)于案例2,教會(huì)學(xué)生分析復(fù)雜問(wèn)題的方法,指導(dǎo)學(xué)生將復(fù)雜問(wèn)題分解成簡(jiǎn)單的小問(wèn)題來(lái)解決,從而解決復(fù)雜的問(wèn)題;同時(shí)在進(jìn)行程序設(shè)計(jì)時(shí),使學(xué)生潛移默化地理解算法的優(yōu)劣,懂得設(shè)計(jì)出更好程序的關(guān)鍵是設(shè)計(jì)執(zhí)行效率高的算法。對(duì)于案例3,學(xué)生掌握在進(jìn)行程序設(shè)計(jì)時(shí)怎么避免設(shè)計(jì)成死循環(huán),當(dāng)循環(huán)次數(shù)不確定時(shí),找出可以跳出循環(huán)體的條件,然后用break語(yǔ)句。
在講解完語(yǔ)法規(guī)則和案例后,利用遷移式的學(xué)習(xí)法,讓學(xué)生進(jìn)行課堂練習(xí),進(jìn)一步擴(kuò)展思維,達(dá)到學(xué)以致用的目的。
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)是C語(yǔ)言程序設(shè)計(jì)中的重點(diǎn)和難點(diǎn)內(nèi)容,滲透式的漸進(jìn)案例驅(qū)動(dòng)教學(xué)法的優(yōu)點(diǎn)是:①培養(yǎng)學(xué)生分析算法的能力;②提高學(xué)生解決實(shí)際問(wèn)題的能力;③加強(qiáng)學(xué)生編寫程序的能力。綜上所述,漸進(jìn)式的教學(xué)法培養(yǎng)學(xué)生具備扎實(shí)的基本知識(shí)、良好的邏輯思維能力和演繹能力;案例式的教學(xué)法提高學(xué)生的學(xué)習(xí)興趣,開發(fā)學(xué)生的智力,具有啟發(fā)性和實(shí)踐性;而滲透式的教學(xué)法培養(yǎng)學(xué)生獨(dú)立工作的能力,令學(xué)生具備較強(qiáng)的創(chuàng)造性和開拓性,這幾種方法結(jié)合在一起能夠發(fā)揮各自的優(yōu)勢(shì)。
實(shí)踐表明,這樣的教學(xué)方法符合大一新生學(xué)習(xí)的特點(diǎn),由易到難、由淺入深、逐步分解、環(huán)環(huán)相扣、潛移默化,并且也能很好地提高學(xué)生的學(xué)習(xí)興趣和積極主動(dòng)性。學(xué)生只有自己發(fā)自內(nèi)心想學(xué),才會(huì)積極主動(dòng)地思考問(wèn)題,才會(huì)達(dá)到更好的學(xué)習(xí)效果。
參考文獻(xiàn):
[1]王平勤, 董付國(guó), 原達(dá). 在C語(yǔ)言教學(xué)中注重培養(yǎng)學(xué)生算法分析的能力[J].微型機(jī)與應(yīng)用, 2007(增刊1): 211-213.
[2]裘宗燕. 從問(wèn)題到程序: 程序設(shè)計(jì)與C語(yǔ)言引論[M]. 2版. 北京: 機(jī)械工業(yè)出版社, 2011: 68-102.
[3]李向陽(yáng), 方嬌莉. C語(yǔ)言程序設(shè)計(jì)(基于CDIO思想)[M]. 北京: 清華大學(xué)出版社, 2012: 62-87.
[4]譚浩強(qiáng). C程序設(shè)計(jì)[M]. 4版. 北京: 清華大學(xué)出版社, 2012: 24-26.
[5]楊秀娟, 裴金萍, 劉惹梅. 滲透式教學(xué)法在工程制圖教學(xué)中的應(yīng)用[J]. 中國(guó)電力教育, 2014(15): 82-83.
[6]崔松健. 漸進(jìn)式與項(xiàng)目式教學(xué)方法在“網(wǎng)頁(yè)設(shè)計(jì)技術(shù)”教學(xué)中的融合[J]. 電腦知識(shí)與技術(shù), 2010, 6(33): 9375-9376.
[7]曹風(fēng)華. 案例驅(qū)動(dòng)教學(xué)法在“計(jì)算機(jī)應(yīng)用基礎(chǔ)”課程中的應(yīng)用[J]. 現(xiàn)代計(jì)算機(jī), 2012(12): 41-43.