吳芳
摘? 要:闡述程序設(shè)計(jì)與學(xué)生邏輯思維能力培養(yǎng)的重要性,如何在程序設(shè)計(jì)中逐步培養(yǎng)學(xué)生邏輯思維的方法,程序設(shè)計(jì)應(yīng)分析問(wèn)題且精心設(shè)計(jì)算法并調(diào)試成功的過(guò)程,進(jìn)而更好地發(fā)揮學(xué)生的學(xué)識(shí)和才智。
關(guān)鍵詞:程序設(shè)計(jì)? 算法設(shè)計(jì)? 調(diào)試? 邏輯思維
中圖分類(lèi)號(hào):TP311.52 ? ?文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2019)12(a)-0222-02
在程序設(shè)計(jì)中較為關(guān)心的是程序效率與正確性。程序效率常由算法的效率來(lái)決定。程序設(shè)計(jì)有一個(gè)特點(diǎn),就是它必須與實(shí)踐密切相聯(lián)。在計(jì)算機(jī)上進(jìn)行實(shí)際操作是學(xué)好程序設(shè)計(jì)的重要環(huán)節(jié),它直接關(guān)系著教學(xué)質(zhì)量的好壞。因此,在上機(jī)實(shí)踐中,我們應(yīng)該培養(yǎng)學(xué)生掌握正確的邏輯思維方法,只有養(yǎng)成好的程序設(shè)計(jì)習(xí)慣,才能使其編制的程序具有良好風(fēng)格。心理學(xué)家紐威爾在總結(jié)人類(lèi)大量的思維活動(dòng)經(jīng)驗(yàn)的基礎(chǔ)上發(fā)現(xiàn),人在解決各種不同的問(wèn)題時(shí),存在某些共同的規(guī)律。概括起來(lái)主要為以下3個(gè)方面:首先先想出大致的“解題計(jì)劃”,其次根據(jù)理論和推理規(guī)則,去“組織解決”,最后進(jìn)行“方法—目的分析”。因此,我們編制程序時(shí)應(yīng)提倡獨(dú)立思考,要講點(diǎn)思維邏輯。程序設(shè)計(jì)一般要經(jīng)過(guò)分析問(wèn)題、確定算法、編制程序、上機(jī)調(diào)試這樣幾個(gè)步驟。
1? 在分析問(wèn)題時(shí)逐步培養(yǎng)學(xué)生獨(dú)立思維的能力
上機(jī)操作前,我們強(qiáng)調(diào)讓學(xué)生做好前期準(zhǔn)備工作,最好把程序?qū)懞?。一般?lái)講,寫(xiě)完一個(gè)程序只能說(shuō)完成了設(shè)計(jì)任務(wù)的一半。往往有這樣的情況,有的程序編好了,在上機(jī)時(shí)又全部被否定。現(xiàn)象一:程序的運(yùn)行沒(méi)有得到預(yù)期的結(jié)果?,F(xiàn)象二:想讓程序做的事,程序并沒(méi)有去做或者是做錯(cuò)了。
為什么會(huì)發(fā)生這樣的現(xiàn)象呢?有的學(xué)生對(duì)客觀實(shí)際問(wèn)題了解得不夠全面,有的則是沒(méi)有掌握好解決問(wèn)題的方法。可以這樣說(shuō),各種計(jì)算機(jī)語(yǔ)言都是用來(lái)解決客觀問(wèn)題的工具。編制程序時(shí),除掌握好工具之外,更要有解決客觀實(shí)際的科學(xué)思維方法。我們常在學(xué)生提出問(wèn)題時(shí),不是馬上去告訴其如何去做,而是啟發(fā)他“再想一想”。以問(wèn)題促進(jìn)思考,用問(wèn)題啟發(fā)思維,這個(gè)“再想一想”就是一個(gè)培養(yǎng)其從借助于感覺(jué)和表象認(rèn)識(shí)客觀事物的外部,聯(lián)系到借助于判斷和推理逐步認(rèn)識(shí)客觀事物的內(nèi)部聯(lián)系的思維過(guò)程。為了解決一個(gè)問(wèn)題,學(xué)生們都在進(jìn)行思考,有的同學(xué)善于看到問(wèn)題的焦點(diǎn),有的同學(xué)卻走了許多彎路,可見(jiàn),這個(gè)過(guò)程不是一朝一夕就能完成的。
2? 在程序設(shè)計(jì)中有意識(shí)地運(yùn)用邏輯思維
計(jì)算機(jī)技術(shù)具有實(shí)踐性很強(qiáng)的技術(shù)。要求從事這一領(lǐng)域的人不僅應(yīng)了解和熟悉有關(guān)理論和方法,還要求自己動(dòng)手實(shí)踐。計(jì)算機(jī)可以像“人腦”一樣進(jìn)行計(jì)算、進(jìn)行邏輯判斷,但計(jì)算機(jī)的計(jì)算和判斷都是受到程序制約的。用高級(jí)語(yǔ)言編寫(xiě)程序,可以擺脫計(jì)算機(jī)本身的特性限制,而集中精力于算法本身。
2.1 注重算法設(shè)計(jì)
算法設(shè)計(jì)是整個(gè)程序設(shè)計(jì)的核心。算法設(shè)計(jì)必須精益求精,算法要經(jīng)得起各方面的推敲。如果算法有誤,可能導(dǎo)致整個(gè)程序的失敗。對(duì)于一般的數(shù)值運(yùn)算,有成熟的算法可供參考。我們要求學(xué)生掌握這些算法,并能根據(jù)需要做必要的修改,善于從基本常用算法中歸納總結(jié)出解決同類(lèi)問(wèn)題的算法。比如:學(xué)習(xí)了遞推法,知道求N!的算法,這個(gè)算法做點(diǎn)修改就可以得到用近似公式,求自然對(duì)數(shù)底的值算法。對(duì)于非數(shù)值的算法,由于實(shí)際問(wèn)題多樣化,沒(méi)有統(tǒng)一的算法,學(xué)生應(yīng)能根據(jù)需要認(rèn)真分析問(wèn)題,設(shè)計(jì)所需算法。一旦程序運(yùn)行結(jié)果不對(duì),很多同學(xué)懂得這樣去想:“我這個(gè)算法對(duì)嗎?”“錯(cuò)在哪?”。
算法用于解決客觀實(shí)際問(wèn)題,要求同學(xué)們要進(jìn)行周密的思考,思維方式要符合客觀實(shí)際的邏輯規(guī)律,才能盡量避免出現(xiàn)邏輯錯(cuò)誤。解題常常需要借助于一定的邏輯規(guī)律,我們要求學(xué)生從題目出發(fā),對(duì)整個(gè)問(wèn)題不斷分析,一步步細(xì)化,直至每一個(gè)子問(wèn)題都簡(jiǎn)明易解。引導(dǎo)學(xué)生由淺入深,由表及里,即可輕而易舉地設(shè)計(jì)算法框圖,再用高級(jí)語(yǔ)言來(lái)描述之。在算法設(shè)計(jì)的過(guò)程中,逐步培養(yǎng)學(xué)生的邏輯思維能力和嚴(yán)謹(jǐn)?shù)目茖W(xué)作風(fēng)。
2.2 程序的邏輯結(jié)構(gòu)要嚴(yán)密
程序的邏輯結(jié)構(gòu)是程序的骨架,我們目前大多數(shù)程序都是用模塊化結(jié)構(gòu)來(lái)設(shè)計(jì)的。一個(gè)程序的邏輯結(jié)構(gòu)安排是否合理,也是程序能否編制好的關(guān)鍵問(wèn)題之一。學(xué)生編制的程序有時(shí)會(huì)出現(xiàn)這樣的情況,程序結(jié)構(gòu)松散不能將算法和各模塊緊密結(jié)合起來(lái),我們要求學(xué)生要學(xué)會(huì)分析,全面細(xì)致地分析各模塊之間的內(nèi)在聯(lián)系,只有通過(guò)分析明確各模塊之間的內(nèi)在聯(lián)系,才能用綜合方法把解決不同問(wèn)題的各個(gè)模塊聯(lián)系起來(lái),以便完成程序的整體邏輯結(jié)構(gòu)。
程序應(yīng)當(dāng)是深思熟慮且通盤(pán)思考精心設(shè)計(jì)的結(jié)果,而不應(yīng)是信手拈來(lái)或東拼西湊的產(chǎn)物。
在“軟件工程”的課程設(shè)計(jì)過(guò)程中經(jīng)常要完成復(fù)雜的題目,有的學(xué)生花幾小時(shí)編完了程序,修改與調(diào)試的時(shí)間往往比編程所花費(fèi)的時(shí)間要多好幾倍,這就是由于該同學(xué)忽視程序的邏輯結(jié)構(gòu)設(shè)計(jì),沒(méi)有遵循一定的規(guī)律,他希望把結(jié)構(gòu)設(shè)計(jì)是否合理留給計(jì)算機(jī)系統(tǒng)去判斷,當(dāng)出現(xiàn)問(wèn)題再去修改,這樣的程序即使勉強(qiáng)通過(guò),質(zhì)量也會(huì)很差,最可惜的是它還浪費(fèi)了寶貴的機(jī)時(shí)。
因此,如果程序的邏輯結(jié)構(gòu)嚴(yán)密,在編制各個(gè)模塊的程序代碼時(shí)相對(duì)出現(xiàn)的問(wèn)題較少,這給程序調(diào)試節(jié)省了時(shí)間。
3? 排除程序的邏輯錯(cuò)誤
編寫(xiě)好的程序是否有錯(cuò)誤是我們極其關(guān)心的問(wèn)題,盡管我們?cè)诰帉?xiě)時(shí)十分認(rèn)真,但程序有時(shí)難免蘊(yùn)含著各種錯(cuò)誤。程序設(shè)計(jì)的各個(gè)環(huán)節(jié)都是密切相關(guān)的,哪一個(gè)環(huán)節(jié)出現(xiàn)錯(cuò)誤,其最終都以非正常的運(yùn)行結(jié)果表現(xiàn)出來(lái)。
由于缺乏程序設(shè)計(jì)的經(jīng)驗(yàn),所以在程序調(diào)試時(shí)會(huì)遇到這樣那樣的問(wèn)題。為了盡量減少排除人為疏忽造成的紙面上的靜態(tài)錯(cuò)誤所占用的時(shí)間,我們要求學(xué)生在上機(jī)前編寫(xiě)程序,并經(jīng)人工檢查無(wú)誤時(shí)才輸入程序,以提高上機(jī)效率。
程序中的語(yǔ)法錯(cuò)誤比邏輯錯(cuò)誤容易排除。下面我們來(lái)看看,在C語(yǔ)言中要實(shí)現(xiàn):1+2+3+…+100之和為多少這樣一段程序。
Main()
{int? i,sum=0;
i=1;
while (i<=100)
sum=sum+i;
i++;
printf(”sum=%d\n ”,sum);}
這段小程序中無(wú)語(yǔ)法錯(cuò)誤,源程序的編譯和鏈接都能通能通過(guò),但程序的運(yùn)行結(jié)果卻不對(duì),while語(yǔ)句的循環(huán)只能到其后的第一個(gè)分號(hào)為止,所以這段程序只能重復(fù)sum=sum+i的操作,無(wú)輸出結(jié)果,而循環(huán)不終止(其錯(cuò)誤在于沒(méi)有用花括號(hào)將循環(huán)體的復(fù)合語(yǔ)句括起來(lái))。C編程系統(tǒng)無(wú)法辨別程序的語(yǔ)句是否符合設(shè)計(jì)者的意愿,只是忠實(shí)地執(zhí)行sum=sum+i這條指令。程序出現(xiàn)的這種錯(cuò)誤就是常說(shuō)的“這個(gè)程序有邏輯問(wèn)題”,即廣義上指的是一種思維混亂現(xiàn)象,它是由于人為因素而造成的對(duì)客觀事物的非準(zhǔn)確反應(yīng)。這種邏輯錯(cuò)誤必須排除,否則會(huì)使程序設(shè)計(jì)的結(jié)果難以預(yù)料。
對(duì)于程序的邏輯錯(cuò)誤而言解決的方法很多,通常需要檢查流程圖或設(shè)置輸出“斷點(diǎn)”,或檢查算法或使用DEBUG(調(diào)試)工具來(lái)找出邏輯錯(cuò)誤,避免在以后的程序設(shè)計(jì)中產(chǎn)生類(lèi)似的錯(cuò)誤。我們調(diào)試程序的目的,不僅僅是證明程序是正確的,而且要去找出并排除程序的邏輯錯(cuò)誤。
4? 結(jié)語(yǔ)
總之,程序設(shè)計(jì)是一項(xiàng)細(xì)致而復(fù)雜的工作,需要學(xué)生多動(dòng)腦多動(dòng)手。在實(shí)際操作中總結(jié)經(jīng)驗(yàn),用合乎邏輯規(guī)律的方法分析解決不同程序設(shè)計(jì)中的問(wèn)題,我們對(duì)程序設(shè)計(jì)的目的不僅僅要使程序正確,更重要的是要使學(xué)生提高程序設(shè)計(jì)的科學(xué)邏輯思維能力,更好地發(fā)揮學(xué)生的學(xué)識(shí)和才智,為今后的學(xué)習(xí)和工作打下良好的程序設(shè)計(jì)基礎(chǔ)。
參考文獻(xiàn)
[1] 梁宇.數(shù)學(xué)教育中邏輯思維能力的培養(yǎng)策略[J].教學(xué)與管理,2017(5):86-88.
[2] 譚浩強(qiáng).C程序設(shè)計(jì)[M].5版.北京:清華大學(xué)出版社,2017.
[3] 李文生,吳舜歆.面向計(jì)算思維能力培養(yǎng)的程序設(shè)計(jì)課程[J].計(jì)算機(jī)教育,2014(3):57-60.
[4] 張晨靜.用計(jì)算機(jī)思維知道程序設(shè)計(jì)課程[J].科教文匯. 2013(36):63-65.