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