999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

“VB程序設計”課程教學中的變量類型使用問題研究

2008-12-31 00:00:00
計算機教育 2008年20期

文章編號:1672-5913(2008)20-0138-02

摘 要:變量的使用是VB程序設計中必不可少的重要環節,而在教學中變量的使用技巧沒有得到足夠的重視,學生的掌握程度不佳。本文著重探討了變量錯用導致的“溢出”問題和變體型變量的使用問題。

關鍵詞:VB程序設計;變量類型;溢出;變體型

中圖分類號:G642 文獻標識碼:B

1 引言

Visual Basic(以下簡稱VB)是一種可視化的、面向對象和采用事件驅動方式的結構化高級程序設計語言,可用于開發Windows環境下的各類應用程序。它簡單易學、效率高、功能又強,所以目前很多院校將它作為非計算機專業軟件技術基礎課程講授的編程語言之一(使用VB6.0版本)。

筆者在講授這門課程的過程中發現,變量的使用是任何一種程序設計語言中都必不可少的環節,變量用來存放程序運行時使用到的數據和程序運行產生的中間結果,正確的使用變量可以使程序清晰明了,減少程序運行時占用的內存,提高運行效率。然而由于VB常作為非計算機專業的第一門程序設計課程,加之課時有限,所以無論在教材中,還是在課堂講授中,對變量的講解都比較淺顯,不能滿足學生實際應用的需要。筆者特將兩個和變量相關的問題提出來,與講授這門課程的教師們共同探討。

2 變量類型使用錯誤導致的溢出問題

大多數VB程序設計教程都很少提及賦值和計算中的“溢出”問題。然而在學生的編程中,“溢出”卻是不可回避的一個問題。不正確的變量類型使用可能導致“溢出”。例如在龔沛曾等主編的教材《Visual Basic 程序設計教程》(第3版)的實驗篇中有這樣一道題目[1]。

[例1]計算π的近似值,π的計算公式為:

注意:

① 分別顯示當n=10、100、1000時的結果,由此可見,此公式收斂程度如何?

② 同時為防止大相乘是結果溢出的問題,將變量類型改為長整型或實數類型。

大部分學生會寫出這樣的程序段:

Private Sub Form_Click()

Dim pi As Single, n As Integer, t As Single

pi = 2

For n = 1 To 10

t = (2 * n) ^ 2 / ((2 * n - 1) * (2 * n + 1))

pi = pi * t

Next n

Print \"n=10時,π=\"; pi

pi = 2

For n = 1 To 100

t = (2 * n) ^ 2 / ((2 * n - 1) * (2 * n + 1)) ‘此句發生溢出

pi = pi * t

Next n

Print \"n=100時, =\"; pi

……

End Sub

當程序運行到程序中加注釋的語句時會產生運行期錯誤“實時錯誤'6':溢出”。(見圖1)學生們都注意到變量t用來保存公式的通項,應該使用精度比較高的實型數據,而認為n變量的取值分別是1~10、1~100、1~1000,當然使用整型(integer)就可以了。其實,錯誤就出在這里。為了解釋這個問題,我們舉一個簡單的例子,如下程序段:

[例2] Private Sub Command1_Click()

Dim c As Long

c = 3 2* 1024

End Sub

圖1

程序運行時會發生溢出錯誤。大部分學生會認為,變量c已經是長整型了,足以放的下32×1024的積,怎么還會溢出呢?其實,VB在做數值運算時,會先開辟一個內存地址來存放計算結果,然后再傳送到指定的變量中。如上面的程序,變量c雖然是長整型,其可存放數值的范圍是(-2147483648,+2147483647),但VB做計算時,將32判斷為整數,1024也判斷為整數,就任意在內存的某個位置開辟2Byte大小的空間來存放32×1024的值,然后再回存至變量c。但32×1024(即32768)已超過任意在內存的某個地址開辟的2Byte的大小,故溢出。

怎樣解決溢出問題呢?答案就是轉變數據的類型。將例2的程序段改為:

Private Sub Command1_Click()

Dim c As Long

c = CLng(3 2)*CLng( 1024)

End Sub

就可以正常計算了。理解了VB做數值運算的內部機理,我們就可以重新審視例1。當程序發生溢出錯誤時,我們點擊“調試”,出錯的語句會高亮度顯示,我們把光標放在n變量上,可以發現溢出時n的值為91,n=91時,表達式(2 * n - 1) * (2 * n + 1)的值為33123。通過例2我們得知,n為整型變量,計算機會認為表達式2*n-1和2*n+1也是整型,所以會在內存中開辟2Byte的空間暫時存儲表示式(2 * n - 1) * (2 * n + 1)的值,當n取值91時,乘積大于整型變量的取值范圍-32768~+32767,故溢出。解決的辦法可以有多種:

(1)將變量n定義為長整型或實型。

(2)將錯誤語句中的乘數2后面加上長整型類型符或者實型符號!、#均可。

(3)避免大數相乘,將錯誤語句改為t = (2 * n) ^ 2 / (2 * n - 1) / (2 * n + 1)。

3 慎用變體型(Variant)變量

很多教師在講授VB程序設計的過程中不注重強調變量的顯式聲明,而且在安裝VB時,它的默認設置并不要求對變量進行顯式聲明,所以學生們都不是很注意這個問題。由于VB程序設計課程不強調在程序編寫之前畫出流程圖,所以大部分學生習慣于在程序編寫之前不對程序所要使用的變量進行通盤考慮,而是在最后需要使用的時候才將變量插進來。而VB規定所有未定義的變量默認為Variant型。例如下面的程序段,其中的變量i將作為Variant處理。

Private Sub Command1_Click()

Dim MyArray(5) As Single

For i = 0 To 5

a(i) = inputbox(\"請輸入第\" i \"個元素的值\")

Next i

End Sub

還有一些同學在變量聲明中沒有包含As<類型>子句,那么該變量也被創建為Variant型。例如下面兩個變量聲明將產生相同的結果:

Dim MyVarialble

Dim MyVarialble As Variant

對于用戶創建的Function過程來講,這一原則也同樣使用。定義一個函數時,如果不包含As<類型>子句,函數的返回值將始終是Variant。下面兩個函數定義也產生相同的結果:

Private Function MyFunction()

Private Function MyFunction() as Variant

這一點也是我們講課時經常忽略的。

雖然VB能夠很好地確定Variant中存放的數據類型并應用相應的運算規則,然而Variant變量存在一個重大的缺陷就是它們占用的內存比VB的任何其他數據類型都要多。每一個Integer占2個字節,Double占8個字節,而每一個Variant存放任何數值數據都占用個16字節。變長字符串變量占用4個字節加上宇符串中每一個宇符占用1個字節,而每一個包含字符串的Variant都要占用22個字節加上字符串長度。任何數據類型的Variant數組都要占用20個字節內存,加上4字節用于每個維數,再加上用于每個數據元素本身的字節數。Variant不僅占用的內存比其他數據類型要多,而且對于Variant中的數據操作時的速度幾乎總是比對其他數據類型進行操作的速度要慢[2]。因此在用作局部變量或過程的參數時,Variant變量是特別煩人的,因為它們消耗堆??臻g太快[3]。因此,教師應引導學生在開始學習編程時就養成良好的習慣,注意顯示聲明變量,并為變量精心選擇數據類型,絕對必要時才采用變體型。

4 結束語

本文對VB教學中普遍容易忽略的變量類型選用問題進行了初步的探討,變量的正確使用關系到程序運行結果的準確型和運行的效率,關系重大,值得我們認真加以研究。同時,要精確的使用變量,也非一件易事,需要我們進一步的探討。

參考文獻

[1] 龔沛曾.Visual Basic程序設計教程[M].北京:高等教育出版社,2007.

[2](美)James D.Foxall著.王建華譯.Visual Basic編程標準[M].北京:機械工業出版社,2000.

[3] 姚福娥.談VB程序設計的后續的若干問題[J].科技信息,2006,(8):12-13.

“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”

主站蜘蛛池模板: 又爽又黄又无遮挡网站| 亚洲欧美自拍一区| 97视频免费看| 999国产精品| 亚洲AV人人澡人人双人| 无码精油按摩潮喷在线播放| 欧美精品一二三区| 蜜臀AV在线播放| 囯产av无码片毛片一级| 中文字幕在线看| 青青青亚洲精品国产| 国产经典三级在线| 国产网站黄| 国产第一页亚洲| 日韩国产一区二区三区无码| 亚洲熟妇AV日韩熟妇在线| 2018日日摸夜夜添狠狠躁| 国产精品流白浆在线观看| 亚洲视频欧美不卡| 91丝袜在线观看| 99久久免费精品特色大片| 成人小视频网| 欧美在线观看不卡| 亚洲日韩AV无码精品| 永久天堂网Av| 国产黄网永久免费| 国产99视频免费精品是看6| 婷婷伊人五月| 免费一级毛片在线观看| 日韩资源站| 亚洲系列无码专区偷窥无码| 精品国产免费观看一区| 亚洲国产成人久久77| 波多野结衣久久精品| 亚洲精品视频免费看| 尤物成AV人片在线观看| 久久黄色一级片| 人妻中文久热无码丝袜| 欧美午夜理伦三级在线观看 | 久久精品免费国产大片| 亚洲国产成熟视频在线多多| 日韩小视频网站hq| 亚洲动漫h| 真实国产乱子伦视频| 97人人模人人爽人人喊小说| 国产靠逼视频| 欧美色伊人| 在线看国产精品| 欧美日韩国产成人在线观看| 亚洲女同欧美在线| 一级不卡毛片| 日韩东京热无码人妻| 精品伊人久久久久7777人| 午夜视频免费一区二区在线看| 亚洲国产看片基地久久1024| 国产成人精品一区二区秒拍1o | 久久窝窝国产精品午夜看片| 亚洲精品第一页不卡| 久久无码av一区二区三区| 欧美性久久久久| 成人午夜免费观看| 色婷婷在线播放| 色婷婷狠狠干| 久久中文字幕不卡一二区| 中文字幕啪啪| 无码精品一区二区久久久| 欧美人与牲动交a欧美精品 | 国产精品亚洲专区一区| 9啪在线视频| 国产微拍一区二区三区四区| 午夜视频免费试看| 97视频精品全国免费观看| 国产白浆一区二区三区视频在线| 国产欧美在线观看精品一区污| 在线视频亚洲色图| 热这里只有精品国产热门精品| 久久国产成人精品国产成人亚洲 | 免费一级无码在线网站| 欧美日本在线| 色精品视频| 永久在线播放| 国产精品网址在线观看你懂的|