渭南技術學院 王 玲
我是一名中等職業技術學院講授Visual Basic(簡稱VB)程序設計課程的教師。VB是一種面向對象的程序設計的高級語言,是目前最為流行的程序設計語言之一。它由Basic發展而來,目前已進入了VB.NET階段。
上個世紀50年代,當計算機還處于第一代——即電子管計算機時代時,為了使工程技術人員在科學計算中,能充分利用計算機,人們在計算機的低級語言:機器語言和匯編語言之后,開發了第一個適用于科學計算的程序設計高級語言——FORTRAN語言(Formuler Translation)。到了60年代,當計算機上升為第二代——晶體管時代時,為了普及計算機程序設計,就誕生了第二個程序設計高級語言:基于初學者通用目的的符號指令代碼——Basic(Beginner’s ALL-puperse Symbolic Instruction Code)。在此之后各種面向過程的程序設計高級語言如雨后春筍般的被開發了出來,如70年代發展起來的C程序設計語言等。進入80年代后,伴隨著計算機進入了第三代(中小規模集成電路計算機)、第四代(大規模集成電路計算機),微型計算機得到了空前的大普及。微機操作系統由磁盤操作系統DOS(Disk Operating System)被視窗操作系統Windows所取代。人們在面向過程的程序設計基礎上,引入了可視化編程(Visual)的方法,并在程序設計中引入了類和對象、方法和事件驅動等概念,程序設計逐漸由面向過程過渡到了面向對象。如人們最常用的Visual Basic、Visual C++、Visual J++、Visual FoxPro等。但既然是過渡,盡管人們進入了面向對象的程序設計時代,但各種程序設計高級語言都不可避免地帶有面向過程的烙印。如程序的基本結構,都分為順序結構、選擇結構、循環結構。

圖1 窗體界面
作為一名中等職業技術學院的計算機教師,面對的是一些理解力較差、概念較為模糊、基本功較低的學生。如何對這些學生講好程序設計課?如何使他們對程序設計產生興趣、提高學習積極性,學好程序設計課?幾年來在教學實踐中,總結正反兩方面的經驗和教訓,我深深地認識到,要想真正上好面向對象的程序設計課,并非易事。必須在理論聯系實際,激發學生的學習興趣,提高他們的學習積極性上狠下功夫。只有千方百計,通過挖掘選擇有趣的古今中外著名算例,聯系實際,深入淺出地進行剖析,才能為學生講清講透程序設計語言中的數據類型、運算符、表達式、基本結構等基本概念,提高程序設計課的教學質量,使學生在學習程序設計時少走或不走彎路,達到事半功倍的結果。

圖2 運行結果1
在講VB程序設計時,為了使學生能夠較深刻的理解不同數據類型所允許的運算,不同運算符的功能差異,學會正確使用基本結構的嵌套,經認真篩選,我選擇了以中國古代算題“百錢買百雞”為例,引導學生設計解決該問題的VB應用程序。該題要解決的問題是:
每只公雞5元錢,每只母雞3元錢,每3只小雞1元錢。今有100元錢,要求必須且只能買100只雞。問可買公雞、母雞、小雞各多少只。
這個問題既可蛻變為中國民間婦孺皆知的“百僧分百饃”問題,也和“百馬馱百擔”問題類似,都是未知數的個數比方程的個數多1個不定解問題。它可能無解,也可能只有一組解或多組解。

圖3 運行結果2
同學們對此題非常感興趣,因為他們在孩提時代就拼湊過“百僧分百饃”的古老算題,但只是拼出了答案:25個大和尚、75個小和尚,但卻說不清楚是否還有別的解。此時,看到要解決一直困擾他們的問題了,學生們精神大振,動腦筋分析問題的積極性機靈型也大為提高。據此引導他們分析該題。
由于每只公雞(coke)5元錢,所以100元全部用來買公雞,也最多一直能買20只。因此買公雞的可能是0只到20只;同理買母雞(hen)的可能是0只到33只;而買小雞(poult)的可能只能是100-公雞數-母雞數??梢娺@是一個典型的枚舉求解問題,所以設計出了如圖1所示VB窗體界面,并未窗體中標題為“計算開始”的按鈕,設計出了單擊按鈕Command1_Click程序。它的VB程序源代碼如下:

程序運行后,結果如圖2所示。這個結果無疑是正確的,因為通過核對,不但雞的和為100個,錢的和也是100元。該題的第一組接則是“百僧分百饃”的算題解。但當我們將語句:
money=5*coke+3*hen+poult/3
中的除法運算符“/”改為整除運算符””時,將會得到如圖3所示的運行結果。顯然圖3的解比圖2的解多了3組:

分析這三組解,經核對會發現盡管公雞、母雞、小雞的和是100只,但錢數卻不對,這3組解,錢數分別為100.67,比限定的100元多出了0.67元,即隱藏著多買了2只小雞問題。此時學生的興趣更濃,都急于想知道錯在了什么地方。
此時引導學生進一步分析產生錯誤的原因。學生立即會聯想到,程序僅修改了一個算術運算符,肯定是由于兩種除法運算符的功能不同所導致的。
在正確的結果1中,使用了除法運算符“/”。它是一個實型算子,該算子的特點是對實型數進行運算,運算的結果也是實型數。如除數和被除數都是整型數,系統會自動將它們全部換算為對應的實型數,然后再進行實型運算,得到實型結果。例如:
77/3=25.67
此時表達式:
3*5+20*3+77/3的結果將是100.67,顯然這不符合錢數限定為100元的要求,它將被因錢數超出了0.67元而被排除,同樣其它兩組解也以同樣的理由被排除。
再分析在錯誤結果2中,由于計算買小雞所用的錢數時使用了整除算子“”,而整除的結果是不帶小數的。當結果有小數部分存在時,將自動被截去小數部分而僅保留整數部分。此時753、763、773均為25;783、793、803均為26;813、823、833均為27。正因為如此,在上面三組解中,錢數計算的結果將都是100元,而并非100.67元,從而導致了錢數似乎符合100元限定的錯誤結論,錯誤的結論必然產生錯誤的結果,從而認為“錢數剛好”而作為是“正確解”輸出。
在學生明白了錯誤產生的原因后,又通過引導學生探討如何避免此類錯誤發生,使學生更進一步拓寬了知識面。指出,在計算實際買小雞所花的錢時,最好的方法的使用實型算子“/”,它方便快捷。但絕不能依次就得出不能使用整型算子“”的結論。事實上如使用了它,則只要將后面的:

則會排除掉上面錢數超限的三組解,從而取得于圖1完全一致的結果。其原因是,只有當欲買小雞的只數是3的整數倍時,poult/3才與poult3真正相等。只不過此時if語句中的條件表達式就成了復合條件表達式,它將徹底解決錢數超出的問題。
這樣學生在實際案例中理解了VB除法算子和整除算子各自的功能和區別,學到了循環嵌套的有關知識。學生們普遍反映這的確是一個教授程序設計課好方法。
綜上所述,在程序設計中,正確選用一些古今中外有名的算例,聯系所講高級語言的數據類型、運算符、語句語法等特點,通過對算例的認真剖析,一定會使枯燥艱澀的程序設計課程變得生動活潑,使學生由怕程序設計變為愛程序設計,從而調動他們的學習程序設計的積極性,一定會在高級語言程序設計中達到事半功倍的良好效果。
[1]賈長林等.可視化編程應用——Visual Basic(第2版)[M].北京:高等教育出版社,2001.
[2]龔沛曾等.Visual Basic程序設計教程(6.0版)[M].北京:高等教育出版社,2000.