文靜
摘要:VisualBasic是很多高校非計算機專業(yè)理工科開設(shè)的一門公共基礎(chǔ)課。本文以實例闡述了如何采用層次遞進的教學方式,實踐證明,深入淺出的講解能有效地提高教學質(zhì)量。
關(guān)鍵詞:Visual Basic;教學;層次遞進教學法
Visual Basic是具有友好界面和較強實用性的可視化編程語言。采用面向?qū)ο蟪绦蛟O(shè)計思想、采用事件驅(qū)動編程機制、直觀易操作的開發(fā)環(huán)境,與傳統(tǒng)的面向過程的程序設(shè)計語言存在很大差別。目前已經(jīng)成為許多高等院校計算機教學的公共課,該課程的目的是使學生掌握計算機程序設(shè)計的思路和方法,初步具有運用VB程序設(shè)計解決實際問題的能力,是二級考試程序設(shè)計的主要候選語言之一。
一、存在的問題
很多非計算機專業(yè)學生是初次接觸程序設(shè)計的,理解力相對較差。在課程的前半段,基礎(chǔ)理論知識比較零散、枯燥,好多同學容易忽視基礎(chǔ)知識的重要性,到后面編程時,由于前面的理論基礎(chǔ)薄弱,又缺乏算法和數(shù)據(jù)結(jié)構(gòu)的知識,自己編寫程序很容易出錯,這樣會使得學生失去學習VB的興趣。為了能解決好這一矛盾,可以深入淺出地進行講解,將一個大的、復雜的難題化整為零,層層遞進地講解,從而有利于學生理解和掌握。
二、層次遞進教學法
初次接觸編程的同學很難理解和接受就題講題,一節(jié)課下來絕大部分同學似懂非懂。教師可以從已有知識下手,尋找突破口,一點一點地增加難度,深入淺出,循循善誘,層層遞進,這樣會獲得不錯的教學效果。本文以判斷素數(shù)為例分析層次遞進教學法。素數(shù)指的是只能被1或者自身整除的自然數(shù)(不包括1),也稱為質(zhì)數(shù)。與素數(shù)相對的叫合數(shù)。判斷素數(shù)是所有程序設(shè)計語言都繞不過的經(jīng)典算法。
1.判斷一個數(shù)的奇偶性
例題l,判斷一個自然數(shù)n是奇數(shù)還是偶數(shù),將結(jié)果打印在窗體上,該數(shù)通過鍵盤輸入。
這是小學數(shù)學的內(nèi)容,每個學生都知道判斷的依據(jù)是n是否可以被2整除。具體過程為從鍵盤輸入變量n的值,采用Mod求余運算,判斷n除以2的余數(shù)是否為0,如果為0則判斷n是偶數(shù),否則是奇數(shù)。代碼如下:
例題1是針對某一個數(shù)進行判斷,在此基礎(chǔ)上拓展教學,進一步學習針對一組數(shù)進行判斷。
2.判斷一組數(shù)的奇偶性
例題2,判斷出100以內(nèi)所有的偶數(shù),將它們打印在窗體上。
在本例中,需要對1~100這一百個數(shù)依次進行判斷,通過Mod運算將其中所有的偶數(shù)判斷出來并顯示在窗體上。
本代碼中,所有的偶數(shù)均打印在窗體上,課堂教學中為了顯示效果,可以將偶數(shù)5個一行地打印于窗體上,或者顯示于列表框中。此為教師課堂額外拓展,本題及下例不再贅述。
3.判斷一個數(shù)是否為素數(shù)
(1)除數(shù)取值范圍為區(qū)間[2,n.1]
例題3,判斷數(shù)一個數(shù)n是否是素數(shù),n由鍵盤輸入。
根據(jù)定義,因為素數(shù)除了1和本身之外沒有其他約數(shù),所以判斷n是否為素數(shù)可用2~n-1依次分別去除n,如果每一個除數(shù)均除不盡,則n為素數(shù)。只要有一個除數(shù)能被n除盡,則n一定是非素數(shù)。具體過程為,設(shè)置循環(huán)變量i表示除數(shù)的范圍,n依次對每一個除數(shù)i做Mod求余運算,如果對于所有的除數(shù)i均不能整除,則n是素數(shù)。如果有一個除數(shù)i使得Mod運算結(jié)果不為0,即可判斷出n不是素數(shù),且后續(xù)的除數(shù)i也無需再判斷,可以提前退出循環(huán)。代碼如下:
(2)除數(shù)取值范圍為區(qū)間[2,n/2]
在例題3里,循環(huán)變量i代表的除數(shù)的范圍是2~n-1,當除數(shù)i的值為n/2時,n除以i結(jié)果是2,當i處于區(qū)間[n/2,n]時,商不可能超過2,即只能位于區(qū)間(1,2),所以無需考慮區(qū)間[n/2,n-1],因為考慮到除數(shù)i為整型數(shù),所以在程序中除數(shù)i取值范圍[2,Int(n/2)]。代碼可優(yōu)化為:
(3)除數(shù)取值范圍是區(qū)間[2,Sqr(n)]
因為如果一個數(shù)不是素數(shù)是合數(shù),那么一定可以由兩個自然數(shù)相乘得到,其中一個大于或等于它的平方根,一個小于或等于它的平方根,并且成對出現(xiàn)。所以可以進一步優(yōu)化除數(shù)i的取值范圍為[2,Sqr(n)]。因為考慮到除數(shù)i為整型數(shù),所以在程序中i取值范圍為[2,Int(Sqr(n))]。代碼可進一步優(yōu)化為:
4.判斷一組數(shù)中的素數(shù)
例題4,判斷出100以內(nèi)所有的素數(shù),將它們打印在窗體上。
上例是判斷某一個數(shù)是否是素數(shù),例題4進一步加大題目的難度,判斷一組數(shù)中的素數(shù)。需要在例題3的基礎(chǔ)上,增加外循環(huán)變量n,用來表示需要判斷的每一個數(shù),表示的范圍為[2,100]。對于每一個外循環(huán)變量n,判斷素數(shù)的方法與例題3完全相同。代碼如下:
至此,學生已經(jīng)掌握對素數(shù)的判斷,無論是判斷一個數(shù)還是判斷一組數(shù)。
5.判斷素數(shù)的通用過程
隨著教學的深入,接觸了通用過程。所謂通用過程是指如果完成一定功能的程序段在程序中重復出現(xiàn)多次,且這些重復的程序段代碼相同,只是處理的數(shù)據(jù)不同,那么可以把程序段分離出來,設(shè)計成一個具有一定功能的獨立程序段,即通用過程。通用過程可分為子程序過程和函數(shù)過程,它們的區(qū)別是后者有返回值,而前者沒有。對于素數(shù)的判斷,最終將給出判斷是或否的結(jié)果,所以應該采用函數(shù)過程,且結(jié)果只在是與否之間,所以函數(shù)過程的返回值為布爾型。
例題5,判斷素數(shù)的通用過程。
在通用過程里n是虛參,可以抽象地看成每一個需要被判斷的數(shù)。循環(huán)變量i的取值范圍采用最普通的[2,n-1]。由于在函數(shù)過程中函數(shù)名Prime可以被看成一個變量,且是布爾型,所以函數(shù)名Prime的初值為False。當有一個i使得Mod運算的結(jié)果為0,則提前退出通用過程,此時通用過程的返回值為False。若循環(huán)變量可以從初值運行到終值,并Rn對每一個i均不能除盡,那么不會提前退出循環(huán),則函數(shù)名Prime最終被賦值為True。代碼如下:
三、結(jié)論
整個教學過程層層遞進,由淺及深,從必須掌握的判斷偶數(shù)這個基礎(chǔ)知識開始講起。先是判斷一個數(shù),把小學生都知道的知識“翻譯”成VB程序。然后加深難度,通過增加一個循環(huán)變量來判斷一組數(shù),即n由一個鍵盤輸入的固定值變?yōu)橐粋€表示范圍的循環(huán)變量。接著再進一步把除數(shù)從固定的2變化為區(qū)間,此時用循環(huán)變量i表示這個區(qū)間。再增加難度,從判斷一個數(shù)是否是素數(shù),擴大到判斷一組數(shù)是否是素數(shù)。最后,把判斷過程升華為函數(shù)過程。
從本例可以看出,經(jīng)典的算法對于學生來說,可能掌握起來比較困難。但是化整為零、知識難點各個擊破,層層遞進,有利于學生理解和接受。其他的經(jīng)典算法也可以采用這樣的方式。
VB作為一門重要的基礎(chǔ)性編程語言,在教學中最大限度地培養(yǎng)學生的興趣,調(diào)動學生的學習積極性和創(chuàng)造力,培養(yǎng)學生的創(chuàng)新能力。教師對VB語言及要講解的內(nèi)容非常熟悉,知識點能融會貫通。同時在教學方法和手段等方面進行不斷地探索,VB課程的教學質(zhì)量必將得到不斷提高,從而達到預期的教學目的。實踐證明,分層遞進教學在提高學生學習興趣、主動性及培養(yǎng)“計算思維”能力方面都大有幫助。