摘要:《C程序設(shè)計(jì)》是一門程序設(shè)計(jì)基礎(chǔ)課程,在實(shí)驗(yàn)教學(xué)中強(qiáng)調(diào)學(xué)生能夠分析問題,并使用C語(yǔ)言編程解決問題。該文主要針對(duì)在實(shí)驗(yàn)教學(xué)中所遇到的一些問題進(jìn)行探討,在實(shí)際教學(xué)中取得了一定的效果。
關(guān)鍵詞:C程序設(shè)計(jì);實(shí)驗(yàn);教學(xué)
中圖分類號(hào):G424文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)30-7287-03
C程序設(shè)計(jì)課程在高校中一般多作為學(xué)習(xí)程序設(shè)計(jì)技術(shù)的入門課程,它是計(jì)算機(jī)專業(yè)和相關(guān)專業(yè)的必修課[1]。C語(yǔ)言可以作為工作系統(tǒng)設(shè)計(jì)語(yǔ)言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語(yǔ)言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序。通過C程序設(shè)計(jì)這門課程的學(xué)習(xí)可以掌握程序設(shè)計(jì)的方法和技巧。作為一門程序設(shè)計(jì)課程,強(qiáng)調(diào)培養(yǎng)學(xué)生的程序設(shè)計(jì)的能力,因此實(shí)驗(yàn)課是該門課程教學(xué)中必不可少的組成部分。以下主要對(duì)C程序設(shè)計(jì)的實(shí)驗(yàn)課教學(xué)所遇到的一些情況做了一個(gè)總結(jié),并給出相應(yīng)的一些解決方法。
1 實(shí)驗(yàn)教學(xué)中所遇到的問題及其解決方法
1.1 培養(yǎng)學(xué)生解決問題的能力
程序設(shè)計(jì)的關(guān)鍵是解決問題的方法和步驟,因此程序設(shè)計(jì)的核心是算法[2]。在碰到一些問題時(shí),人們都會(huì)對(duì)這個(gè)問題有些想法,若是要利用計(jì)算機(jī)解決問題,則應(yīng)該將這些想法轉(zhuǎn)變成算法。在實(shí)驗(yàn)教學(xué)或課堂教學(xué)中應(yīng)該注重培養(yǎng)學(xué)生解決問題的能力。
計(jì)算機(jī)解決問題時(shí),主要解決思路就是IPO即輸入、處理和輸出。首先,需要分析問題有哪些是輸入的,經(jīng)過處理后需要輸出什么樣的輸出結(jié)果。再進(jìn)行分析,輸入的數(shù)據(jù)類型是什么,輸出的結(jié)果的數(shù)據(jù)類型是什么。最后,考慮問題處理時(shí)采用何種方法,并寫出問題的解決步驟。在實(shí)驗(yàn)過程中,鼓勵(lì)學(xué)生獨(dú)立思考,強(qiáng)調(diào)每個(gè)問題可能有不止一個(gè)解決方法。
例如:一個(gè)天平,砝碼分別為1g、2g、4g、8g、16g、32g、...、1024g,每個(gè)砝碼只有一個(gè),要稱重的物品放在天平的左側(cè),而砝碼只允許放在天平的右側(cè)。已知一個(gè)物品的重量,問如何稱重?試編程解決。
本文作者在實(shí)驗(yàn)課時(shí)布置這個(gè)題目時(shí),有的同學(xué)就覺得題目挺難的,當(dāng)時(shí),教師給予了一定的提示:首先,要求學(xué)生仔細(xì)分析題目的輸入和輸出要求是什么。經(jīng)過分析后,學(xué)生自行得出輸入數(shù)據(jù)的要求:輸入的是物體重量值,而且該重量值因?yàn)榭梢杂庙来a稱量出來(lái),該值應(yīng)該是一個(gè)整數(shù);為了便于檢查,在教師的要求下該題的輸出結(jié)果是:稱重時(shí)所使用的砝碼重量,砝碼的重量按從大到小輸出其值。再次,該問題的解決方法可能有多個(gè),方法一:讓學(xué)生假設(shè)如果現(xiàn)在有一個(gè)天平在眼前,應(yīng)該如何用砝碼稱重,且每種重量的砝碼只有1個(gè),砝碼重量是由大到小進(jìn)行試探稱重,還是砝碼重量是由小到大進(jìn)行試探稱重。學(xué)生由此會(huì)進(jìn)行相關(guān)思考,從而得出第一種算法:
1.2 注意一些運(yùn)算符的使用
程序設(shè)計(jì)過程中會(huì)使用到一些C語(yǔ)言的運(yùn)算符,但是在實(shí)驗(yàn)課時(shí)發(fā)現(xiàn)學(xué)生經(jīng)常會(huì)出現(xiàn)一些運(yùn)算符未能正確掌握,一般常見的錯(cuò)誤如下:
1)“==”的使用
“==”運(yùn)算符是關(guān)系運(yùn)算符,一般用在條件判斷。但是,在使用時(shí)經(jīng)常會(huì)將“==”寫作“=”。例如,判斷4個(gè)連續(xù)自然數(shù)乘積為3024,有的學(xué)生在編程時(shí)寫作:
if (x*(x+1)*(x+2)*(x+3)=3024)
對(duì)于這個(gè)問題,在編程時(shí)要求學(xué)生仔細(xì)想一想此處是判斷左式是否等于右式,還是將右式的值賦給左邊。若是判斷,則用運(yùn)算符“==”;若是賦值,則用運(yùn)算符“=”。
2)“%”的使用
“%”運(yùn)算符是算術(shù)運(yùn)算符,它的作用是求余,該運(yùn)算符要求操作數(shù)必須為整型數(shù)值。但是,在實(shí)驗(yàn)課時(shí),本文作者發(fā)現(xiàn)學(xué)生在編程中使用該運(yùn)算符時(shí)未曾考慮操作數(shù)的數(shù)據(jù)類型。對(duì)于這個(gè)問題,只能要求學(xué)生在使用該運(yùn)算符時(shí),必選檢查兩個(gè)操作數(shù)的數(shù)據(jù)類型是否為整型,若不是整型則可以強(qiáng)制轉(zhuǎn)換為整型。
3)“/”的使用
“/”運(yùn)算符是算術(shù)運(yùn)算符,它是除法運(yùn)算符,該運(yùn)算符有一個(gè)規(guī)定:若兩個(gè)操作數(shù)都為整數(shù),則商為整數(shù),否則商為實(shí)數(shù)。例如,華氏溫度轉(zhuǎn)換成攝氏溫度的公式為:C= 5/9*(F-32),學(xué)生在編程時(shí)寫作:C= 5/9*(F-32),但是不管輸入的F值為多少,輸出的結(jié)果C都為0。此類問題,在編程時(shí)需要注意商是要取整還是需要商的小數(shù)部分,若商要求為整數(shù),則操作數(shù)必須為整數(shù)。
1.3 注意調(diào)試技能的培養(yǎng)
程序設(shè)計(jì)過程中,可能會(huì)出現(xiàn)很多錯(cuò)誤,有的是語(yǔ)法錯(cuò)誤,有的可能是編程時(shí)考慮不夠全面,算法出現(xiàn)了一些問題。因此,在實(shí)驗(yàn)課時(shí)要求學(xué)生能自己使用一定的調(diào)試方法找到錯(cuò)誤并加以修正。至于常用的調(diào)試方法,諸如設(shè)置斷點(diǎn)、單步跟蹤、監(jiān)測(cè)變量以及在某些位置設(shè)置輸出語(yǔ)句等,這些方法在實(shí)驗(yàn)課時(shí)可以先演示,在學(xué)生遇到實(shí)際問題時(shí)讓其自己動(dòng)手,若學(xué)生還是無(wú)法解決,則教師可以進(jìn)行單獨(dú)輔導(dǎo),讓學(xué)生自行操作時(shí)予以發(fā)現(xiàn)問題并告知如何正確操作。
1.4 注意培養(yǎng)學(xué)生建立測(cè)試數(shù)據(jù)的能力
1) 建立測(cè)試數(shù)據(jù)完成程序的測(cè)試
在實(shí)驗(yàn)課時(shí),本文作者發(fā)現(xiàn)不少學(xué)生將程序調(diào)試成功后只輸入一組測(cè)試數(shù)據(jù)就認(rèn)為該程序沒有問題了,但是,實(shí)際上該程序可能并不正確。在實(shí)驗(yàn)課時(shí),要求學(xué)生對(duì)一個(gè)題目要輸入多組數(shù)據(jù),多組數(shù)據(jù)的設(shè)計(jì)一定要求能涵括題目的輸入數(shù)據(jù)的不同要求,特別需要考慮0作為測(cè)試數(shù)據(jù)。
例如,要求編制一個(gè)求方程a*x*x+b*x+c=0的根的程序。其中,a、b、c要求用戶輸入。
這個(gè)題目實(shí)際上不太難,在上實(shí)驗(yàn)課時(shí),很多同學(xué)就輸入了一組測(cè)試數(shù)據(jù):1 2 1。但是他們給出的程序很多都不對(duì)。那么,針對(duì)這個(gè)題目教師要求學(xué)生設(shè)想中學(xué)時(shí)碰到這個(gè)題目時(shí),會(huì)考慮delta=b*b-4*a*c的取值,現(xiàn)在做測(cè)試時(shí),仍然按該思路進(jìn)行考慮,因此,準(zhǔn)備了如下測(cè)試數(shù)據(jù):1 2 1;-1 2 4;1 2 4。教師在檢查作業(yè)時(shí),若發(fā)現(xiàn)學(xué)生只準(zhǔn)備了諸如上述這樣的測(cè)試數(shù)據(jù)時(shí),需要讓學(xué)生注意測(cè)試數(shù)據(jù)0的使用,例如:0 1 2;1 0 2;1 2 0。由于測(cè)試數(shù)據(jù)0的加入,會(huì)讓學(xué)生發(fā)現(xiàn)可能以前可能忽略的a為0的處理。
2) 先建立測(cè)試數(shù)據(jù)再完成程序的編碼
在實(shí)驗(yàn)課時(shí),本文作者發(fā)現(xiàn)有的題目有些學(xué)生感覺不知如何解決,遇到這種情況時(shí),本文作者一般建議學(xué)生先建立測(cè)試數(shù)據(jù),再依據(jù)現(xiàn)有的測(cè)試數(shù)據(jù)進(jìn)行編碼。當(dāng)然,有時(shí)學(xué)生可能無(wú)法獨(dú)自給出測(cè)試數(shù)據(jù),那么教師可以幫助學(xué)生建立測(cè)試數(shù)據(jù)。
例如,加密規(guī)則如下:
要求輸入若干組數(shù)據(jù),每組數(shù)據(jù)均具有如下的形式:
起始行 —— 一行,內(nèi)容為字符串 "START"
密文 —— 給出密文,密文不為空
結(jié)束行 —— 一行,內(nèi)容為字符串 "END"
在最后一組數(shù)據(jù)之后有一行,包括字符串 "ENDOFINPUT",表示輸入結(jié)束。
對(duì)每組數(shù)據(jù),都有一行輸出,給出密文對(duì)應(yīng)的明文。
在實(shí)驗(yàn)課時(shí),學(xué)生從題目描述中感覺無(wú)法理解輸入數(shù)據(jù)的含義,但是能設(shè)計(jì)出如何將密文轉(zhuǎn)換為明文,一般很多同學(xué)寫出如下的代碼:
但是有的同學(xué)就對(duì)輸入和輸出那塊不怎么清楚是什么意思,因此,教師可以給出3個(gè)測(cè)試數(shù)據(jù)文件如下表1所示。
3 總結(jié)
在這門課程的實(shí)驗(yàn)教學(xué)中,學(xué)生們會(huì)出現(xiàn)比較多的情況,需要教師多加引導(dǎo)和指引,以上只是就常見的一些情況做了個(gè)總結(jié),并給出了相應(yīng)的解決思想和方法,在實(shí)際教學(xué)中取得了一定的效果。但是,在實(shí)驗(yàn)教學(xué)中還有很多方面需要進(jìn)行相關(guān)的教學(xué)研究。
參考文獻(xiàn):
[1] 王曉霞.《C語(yǔ)言程序設(shè)計(jì)》教學(xué)策略與效應(yīng)[J].電腦知識(shí)與技術(shù),2012,8(26):6310-6312.
[2] 胡明,王紅梅.程序設(shè)計(jì)基礎(chǔ)——從問題到程序[M].北京:清華大學(xué)出版社,2011:4.