王慧蓉
(長治學(xué)院 數(shù)學(xué)系,山西 長治 046011)
C語言是目前世界上使用最廣泛,最流行的計算機編程軟件之一,在計算機中的應(yīng)用具有很多方面的特點,主要表現(xiàn)在對文字和數(shù)據(jù)進行有效表達、變量的靈活設(shè)置、完善的內(nèi)存儲器、對關(guān)鍵環(huán)節(jié)的有效處理等方面。
Maple被稱為當(dāng)今世界最流行的符號軟件之一,它具有強大的交互式工程數(shù)學(xué)計算功能,具有很強的數(shù)據(jù)可視化功能,其豐富的函數(shù)包能滿足用戶在各方面的需求。它既是計算軟件還是一種值得推廣和被高校學(xué)生深入學(xué)習(xí)并運用于實踐的計算機編程軟件,是一款全方位的數(shù)學(xué)軟件。
判斷101——200之間有多少個素數(shù),并輸出所有素數(shù)。
在C語言中的源程序為:
在Maple中的程序為:
判斷一個數(shù)是否是素數(shù),兩種軟件采用的思想都是用一個數(shù)去除以2,如果能被2整除則表明這個數(shù)是素數(shù),反之不是,并且兩者都采用for循環(huán)來進行編程。Maple中的for循環(huán)很接近于英語語法,循環(huán)體可以是空語句,一條語句或者多條語句,循環(huán)體結(jié)束的標(biāo)志也就是整個for循環(huán)結(jié)束的標(biāo)志。在循環(huán)中初始值和終止值必須是數(shù)值型的,也必須是實數(shù)。C語言中的for語句是功能強大的構(gòu)成“當(dāng)型”循環(huán)結(jié)構(gòu)的循環(huán)語句,編程不受循環(huán)次數(shù)是否明確的影響,當(dāng)然循環(huán)結(jié)束的條件應(yīng)該明確。
在C語言中的源程序為:
C語言中運用了if判斷語句和do while判斷語句相結(jié)合的方式來解決這一問題。首先用if語句對給定的兩個數(shù)進行大小判斷,決定輾轉(zhuǎn)相除法開始時的順序問題,首先使用while循環(huán)語句進行判斷,接著使用do while循環(huán)語句,先執(zhí)行一次循環(huán)體語句,然后計算表達式的值。當(dāng)q的結(jié)果不是0時就一直循環(huán),直到q等于0循環(huán)結(jié)束,此時程序跳轉(zhuǎn)到下一語句。Maple中使用的是while循環(huán)體,首先判斷條件是否為真,若條件為真就執(zhí)行循環(huán),直到條件不成立循環(huán)結(jié)束,它的特點是在未知循環(huán)次數(shù)的情況下可以一直執(zhí)行循環(huán)。兩者一個是先執(zhí)行后判斷,一個是先判斷后執(zhí)行,使用的都是直到型循環(huán),但是卻在語句的選擇和使用上有很大不同。
飼養(yǎng)一對兔子,從出生后第三個月起這對兔子每個月都繁殖一對兔子,新生的兔子長到第三個月后也每個月都繁殖一對兔子,假如兔子都不死,以此類推下去,問每個月的兔子總數(shù)為多少?
在C語言中,程序源代碼為:
在Maple中程序為:
這是非常有名的Fibonacci數(shù)列,兔子的規(guī)律為數(shù)列:1,1,2,3,5,8,13,21...在C語言與Maple軟件中求解的編程過程,我們看到為了解決這個問題在C語言中用到了for的當(dāng)型循環(huán)語句,運用遞歸的原理,符合條件即循環(huán),i以自增的方式賦新值,每循環(huán)一次就打印兩個月的數(shù)字,循環(huán)兩次就換行,造成了控制每行輸出四個的結(jié)果,循環(huán)過程一目了然,簡單易懂。但是也容易發(fā)現(xiàn),在這個程序中,要求數(shù)值的取值不能太大,這就局限了程序的應(yīng)用。但是當(dāng)我們看到Maple語句時發(fā)現(xiàn),似乎語句更簡潔,在Maple中,我們使用了if,else條件語句來實現(xiàn)遞歸,只需要將讀到的的條件依次輸入即可得到結(jié)果,設(shè)置了兩種條件語句,符合哪一種即執(zhí)行哪一種,并且由于option remember的設(shè)定,在Maple中可以進行大數(shù)據(jù)的執(zhí)行,不僅簡潔而且更實用。綜上我們發(fā)現(xiàn)在程序編寫復(fù)雜程度沒有很大區(qū)別的情況下,Maple卻可以進行大數(shù)據(jù)的處理,更為快捷。
與C語言相同,Maple的過程體也是由賦值語句、條件語句、循環(huán)語句組成的,其條件語句也可以進行嵌套;同樣的Maple軟件也提供了for循環(huán)和while循環(huán)兩種循環(huán)語句。編寫Maple程序?qū)嶋H上是比較簡單的,Maple系統(tǒng)中含有數(shù)以千計的命令,其中百分之八十自身就是Maple程序,語言的可交互性大大方便了程序的設(shè)計與修改,提高了運行效率。
在C語言和Maple軟件的編程中我們還常常會用到遞歸思想,遞歸通常使用在函數(shù)的調(diào)用上。實現(xiàn)遞歸調(diào)用應(yīng)該滿足以下三個條件:(1)要解決的問題可以拆分為幾個小的問題,但并不因為分解而改變解法,只是計算過程變成了有規(guī)律的遞進和返回,這就達到了遞歸的條件;(2)在符合(1)的條件下繼續(xù)將原問題分解下去,直到最終分解出來一個已知解的問題,然后開始層層返回,從而達到解決原問題的目的,整體實現(xiàn)了遞歸;(3)如果不加條件,遞歸算法是無止境的,為此一定要有一個明確結(jié)束遞歸的條件。
Maple程序之所以更為簡短、運行效率更高,是因為它具有語言的可交互性且含有豐富的功能強大的命令,可以將一些復(fù)雜的編碼的任務(wù)簡化為一個簡單的命令。
綜上所述兩種語言其實是可以相互轉(zhuǎn)化的,在很多問題的解決上,兩種語言的出發(fā)點都是一致的,分析問題的想法也都一致,經(jīng)常選用同樣的程序語言進行編程,雖然在復(fù)雜程度上有時會有很大差別,但其在本質(zhì)上是相同的。
總而言之,C語言和Maple在解決經(jīng)典算法的問題上既有區(qū)別又有聯(lián)系,它們都能很好的解決實際問題,都是強大的編程軟件。我們不能一概而論的說哪一種軟件更加有優(yōu)勢,只能說在遇到實際問題時應(yīng)該酌情考慮優(yōu)先使用哪一種軟件可以使編程更加簡潔明了,更加具有可讀性。