第一篇:VB常用算法總結(jié)
VB常用算法總結(jié)
一、變量值的交換
算法思想:若交換兩個(gè)變量的值,必須引入第三個(gè)新的變量進(jìn)行傳遞。以下代碼是錯(cuò)誤的:
X=12 :Y=34 :X=Y :Y=X 正確的代碼是:
X=12 :Y=23 :T=X :X=Y :Y=T
二、判斷一個(gè)數(shù)是否能被另一個(gè)數(shù)整除
算法思想:可以用整除的定義(余數(shù)為0)或X除以Y等于X整除Y等表達(dá)式進(jìn)行判斷。條件表達(dá)式可以為:X mod Y=0
或
X\ Y=X/Y
或
Int(X/Y)=X/Y 如果以上條件表達(dá)式為T(mén)rue,則表示X能被Y整除。
三、累加、階乘、計(jì)數(shù)和求平均值
算法思想:使用循環(huán)語(yǔ)句,并用一個(gè)變量存放累加的中間及最終結(jié)果。注: 累加求和時(shí)變量初值為0,計(jì)算階乘時(shí)變量初值為1。
統(tǒng)計(jì)計(jì)個(gè)數(shù)(計(jì)數(shù))時(shí)可用一個(gè)變量作為統(tǒng)計(jì)個(gè)數(shù)的累加變量,每次加1即可。求平均值算法思想是先求和,再除以個(gè)數(shù)。條件求和(或計(jì)數(shù)):在循環(huán)語(yǔ)句中加入If-End If判斷語(yǔ)句。
例題:計(jì)算1到10之間所有整數(shù)的累加和以及10!。n=10 sum=0
‘累加求和時(shí),變量的初值一定為0 prod=1
‘累乘(連乘)時(shí),變量的初值一定為1 For i=1 To n
sum=sum+i
prod=prod*i Next i Print sum,prod
例題:統(tǒng)計(jì)0—100之間能被3整除的數(shù)的個(gè)數(shù)、累加和及其平均值。
s=0
n=0
For i=0 To 100
If i mod 3 =0 Then
s=s+i
n=n+1
End If
Next i
Print n,s,s/n
四、隨機(jī)數(shù)的產(chǎn)生 [a,b]之間的隨機(jī)整數(shù) Int((b-a+1)*rnd)+a(a,b)隨機(jī)數(shù)(b-a)*rnd +a
五、求若干個(gè)數(shù)中最大值或最小值
六、常用字符處理函數(shù)
Mid函數(shù):從字符串指定位置取指定個(gè)字符,格式為Mid(字符,p,n),從第p個(gè)字符開(kāi)始,向后截取n個(gè)字符(若n省略則取到最后)。
Left和Right函數(shù):從字符串左邊或右邊取指定個(gè)字符,格式為 Left(字符,n)和Right(字符,n)。Len函數(shù):測(cè)試字符串長(zhǎng)度。
UCase和LCase函數(shù):UCase將小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母;LCase將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母。
Instr([首字符位置 , ] 字符串1, 字符串2 [ , n]):在字符串1中查找字符串2,如果找到,返回字符串2的第一個(gè)字符在字符串1中出現(xiàn)的位置。首字符位置是可選的,如果不指定,從字符串起始位置開(kāi)始查找;如果指明,從指定的位置開(kāi)始查找。
Asc函數(shù):返回字符串中第一個(gè)字符的ASCII碼。Chr函數(shù):將一個(gè)數(shù)值轉(zhuǎn)換為其所對(duì)應(yīng)的字符。
字符的比較規(guī)則是按ASCII碼順序比較,規(guī)則為 空格<”A”~”Z”<”a”~”z” 小寫(xiě)字母的ASCII比大寫(xiě)字母的ASCII小32。
例題:
1.將所有文本轉(zhuǎn)換為大寫(xiě)(小寫(xiě))字母
可以直接使用UCase(LCase)函數(shù)轉(zhuǎn)換。例如: Text2.Text=UCase(Text1.Text)2.對(duì)某個(gè)字符串的所有字符逐一處理
算法思想:如果對(duì)某個(gè)字符串的所有字符逐一處理,即從字符串的第1個(gè)字符開(kāi)始到最后一個(gè)字母,每次處理1個(gè)字符??梢允褂肍or循環(huán)實(shí)現(xiàn)。通用代碼為:
For i=1 To Len(s)
s1=Mid(s,i,1)……
Next i 3.字符轉(zhuǎn)換
算法思想:通過(guò)字符的ASCII碼進(jìn)行處理(使用Asc函數(shù)),然后再使用Chr函數(shù)將ASCII轉(zhuǎn)換成字符。例題:將文本框Text1中字符按如下規(guī)律轉(zhuǎn)換a-b、b-c……z-a,并顯示在文本框Text2中。
s = Text1.Text n = Len(s)For i = 1 To n
s1 = Mid(s, i, 1)
If s1 >= “a” And s1 <= “y” Then
s2 = s2 + Chr(Asc(s1)+ 1)
ElseIf s1 = “z” Then
s2 = s2 + “a”
End If Next i Text2.Text = s2 例題:將文本框Text1中的小寫(xiě)字母轉(zhuǎn)換其對(duì)應(yīng)的大寫(xiě)字母,將大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母,并顯示在文本框Text2中。
Private Sub Command1_Click()s = Text1.Text n = Len(s)m = Asc(“a”)m)
End If
If s1 >= “A” And s1 <= “Z” Then
s2 = s2 + Chr(Asc(s1)+ m)
End If Next i Text2.Text = s2 End Sub 5.統(tǒng)計(jì)某字符出現(xiàn)次數(shù)
算法思想:對(duì)字符串中字符逐一判斷,如果是某字符,則統(tǒng)計(jì)變量加1。
例題:統(tǒng)計(jì)文本框Text1中字符i和j出現(xiàn)的次數(shù)(不區(qū)分大小寫(xiě))。
Private Sub Command1_Click()
s = Text1.Text
n = Len(s)
For i = 1 To n
s1 = Mid(s, i, 1)
If UCase(s1)= “I” Then ni = ni + 1
If UCase(s1)= “J” Then nj = nj + 1
Next i
Print ni, nj
End Sub
八、素?cái)?shù)
素?cái)?shù)定義:只能被1和本身整除的正整數(shù)稱(chēng)為素?cái)?shù)(或稱(chēng)質(zhì)數(shù))。例如11就是素?cái)?shù),它只能被1和11整除。算法思想:判別某數(shù)n是否是素?cái)?shù)的方法有很多,最簡(jiǎn)單的是從素?cái)?shù)的定義來(lái)求解。對(duì)于n,從i=2,3,…,n-1判別n能夠被i整除,只要有一個(gè)能整除,n就不是素?cái)?shù),否則n是素?cái)?shù)。此種算法比較簡(jiǎn)單,但速度慢,因此,可以將n被2到(或n/2)間的所有整數(shù)除,如果都除不盡,則n就是素?cái)?shù),否則n是非素?cái)?shù)。
注:執(zhí)行For循環(huán)時(shí),循環(huán)變量等于終值仍進(jìn)入循環(huán),遇到Next語(yǔ)句,循環(huán)變量會(huì)自動(dòng)加上步長(zhǎng),因此如果循環(huán)正常完成后,循環(huán)變量的值將大于終值。例如:
For i=1 To 4 If …… Then Exit For Next i Print i 如果循環(huán)正常結(jié)束,則輸出結(jié)果為5(大于4)。如果循環(huán)過(guò)程中滿足If條件,執(zhí)行Exit For語(yǔ)句退出循環(huán),則i的值一定小于5。
例題:判斷n是否是素?cái)?shù)。Private Sub Command2_Click()n = Val(Text1.Text)For j = 2 To n100 * a)/ 10)c = i-Int(i / 10)* 10 If i = a ^ 3 + b ^ 3 + c ^ 3 Then Print i End If Next i End Sub
Private Sub Command1_Click()For n = 100 To 999 s = 0 a = n Do While a <> 0 b = a Mod 10 s = s + b * b * b a = a\ 10 Loop If s = n Then Print n Next n End Sub
十一、斐波那切數(shù)列的輸出
該數(shù)列前兩項(xiàng)為1,1從第三項(xiàng)開(kāi)始,an=an-1+an-2
十二、進(jìn)制轉(zhuǎn)換 十三、三個(gè)數(shù)排序
十四、分段函數(shù)
十五、圖形輸出(雙重循環(huán))
十六、百雞百錢(qián)問(wèn)題
十七、迭代法P116頁(yè)
十八、輸入a,b,c,的值,求方程ax2+bx+c=0的解。
注意:對(duì)象只考文本框、標(biāo)簽、命令按鈕和窗體。
本學(xué)期計(jì)算機(jī)基礎(chǔ)及VB程序設(shè)計(jì)復(fù)習(xí)指導(dǎo)如下:
1、計(jì)算機(jī)基礎(chǔ)的50道復(fù)習(xí)題,試卷上占20分,選擇15題,填空5題。
2、VB習(xí)題集第一到五章控制結(jié)構(gòu)的課后習(xí)題及試題解析(其中,控件只考窗體、文本框、標(biāo)簽、命令按鈕)試卷上占40分。
3、經(jīng)典算法。占40分。
第二篇:VB程序設(shè)計(jì)的常用算法教案
VB程序設(shè)計(jì)的常用算法教案
算法(Algrith):計(jì)算機(jī)解題的基本思想方法和步驟。算法的描述:是對(duì)要解決一個(gè)問(wèn)題或要完成一項(xiàng)任務(wù)所采 取的方法和步驟的描述,包括需要什么數(shù)據(jù)(輸入什么數(shù)據(jù)、輸出什么結(jié)果)、采用什么結(jié)構(gòu)、使用什么語(yǔ)句以及如何 安排這些語(yǔ)句等。通常使用自然語(yǔ)言、結(jié)構(gòu)化流程圖、偽代碼等來(lái)描述算法。
一、計(jì)數(shù)、求和、求階乘等簡(jiǎn)單算法
此類(lèi)問(wèn)題都要使用循環(huán),要注意根據(jù)問(wèn)題確定循環(huán)變量的初值、終值或結(jié)束條,更要注意用來(lái)表示計(jì)數(shù)、和、階 乘的變量的初值。
例:用隨機(jī)函數(shù)產(chǎn)生100個(gè)[0,99]范圍內(nèi)的隨機(jī)整數(shù),統(tǒng)計(jì)個(gè)位上的數(shù)字分別為1,2,3,4,6,7,8,9,0的 數(shù)的個(gè)數(shù)并打印出來(lái)。
本題使用數(shù)組來(lái)處理,用數(shù)組a存放產(chǎn)生的確100個(gè)隨機(jī)整數(shù),數(shù)組x來(lái)存放個(gè)位上的數(shù)字分
別為1,2,3,4,6,7,8,9,0的數(shù)的個(gè)數(shù)。即個(gè)位是1的個(gè)數(shù)存放在x中,個(gè)位是2的個(gè)數(shù)存放在x中,…… 個(gè)位是0的個(gè)數(shù)存放在x。
將程序編寫(xiě)在一個(gè)GetTput過(guò)程中,代碼如下: PubliSubGetTput
DiaAsInteger
DixAsInteger
DiiAsInteger,pAsInteger
'產(chǎn)生100個(gè)[0,99]范圍內(nèi)的隨機(jī)整數(shù),每行印出來(lái)
Fri=1T100
a=Int
Ifa<10Then
Fr1PrintSpae;a;
10個(gè)打
Else
Fr1PrintSpae;a;
EndIf
Ifid10=0ThenFr1Print
Nexti
'統(tǒng)計(jì)個(gè)位上的數(shù)字分別為1,2,3,4,6,7,8,9,0的數(shù)的個(gè)數(shù),并將統(tǒng)計(jì)結(jié)果保存在數(shù)組x,x,x中,將統(tǒng)計(jì)結(jié)果打印出來(lái)
Fri=1T100
p=a
d
0
'求個(gè)位上的數(shù)字
Ifp=0Thenp=10
x=x+1
Nexti
Fr1Print&qut;統(tǒng)計(jì)結(jié)果&qut;
Fri=1T10
p=i
Ifi=10Thenp=0 Fr1Print&qut;個(gè)位數(shù)為&qut;+Str+&qut;&qut;+Str)+&qut;個(gè)&qut;
Nexti EndSub
二、求兩個(gè)整數(shù)的最大公約數(shù)、最小公倍數(shù) 分析:求最大公約數(shù)的算法思想:
對(duì)于已知兩數(shù),n,使得>n;
共
除以n得余數(shù)r;
若r=0,則n為求得的最大公約數(shù),算法結(jié)束;否則執(zhí)行;
←n,n←r,再重復(fù)執(zhí)行。
例如:求=14,n=6的最大公約數(shù)
n
r
0 =inputBx n=inputBx n=n* If r=dn Dhile =n n=r r=dn Lp Print&qut;最大公約數(shù)=&qut;,n [1] [2] [3] [4] [] [6] [7] 下一頁(yè) < VB08 1、打開(kāi)“考生文件夾781”中的文件“test4.vbp”,完善Command1_Click事件代碼并保存。 實(shí)現(xiàn)功能:回文字符串是指一個(gè)字符串從左往右讀與從右往左讀是一樣的,如“ABCBA”,“123321”等等。輸入一個(gè)字符串,若是回文字符串,則輸出“Yes”,否則輸出“No”。使用文本框Text1輸入字符串,使用文本框Text2輸出結(jié)果。 Private Sub Command1_Click()Dim s As String Dim ok As String Dim i As Integer s = Text1.Text ok = “Yes” For i = 1 To ① If Mid(s, i, 1)<> ② Then ok = “No” Next i ③ End Sub ①len(s)2 ②Mid(s, len(s)+1-i, 1)③text2.text=ok 2、打開(kāi)文件“考生文件夾606工程1.vbp”,完善Command1_Click事件代碼并保存。 實(shí)現(xiàn)功能:當(dāng)單擊“計(jì)算1+2+3+…+100”按鈕后,文本框Text1顯示1+2+3+…+100的值。 Private Sub Command1_Click()Dim s As Integer Dim i As Integer s = ① For i = 1 To ② s = ③ Next i Text1.Text = Str(④)End Sub ①0 ②100 ③s+i ④s 3、打開(kāi)“考生文件夾779test2.vbp”,完善Command1_Click事件代碼并保存。 實(shí)現(xiàn)功能:輸入一個(gè)正整數(shù),計(jì)算并輸出它的各位數(shù)字之和。如輸入123,則輸出6。使用文本框Text1輸入正整數(shù),使用文本框Text2輸出計(jì)算結(jié)果。 Private Sub Command1_Click()Dim x As Integer Dim s As Integer x = Val(Text1.Text)① Do s = s + ② x = x 10 Loop Until x = 0 ③ End Sub ①s=0 ②x mod 10 ③text2.text=str(s) 4、打開(kāi)文件“考生文件夾607工程1.vbp”,完善Command1_Click事件代碼并保存。 實(shí)現(xiàn)功能:當(dāng)單擊“顯示”按鈕后,隨機(jī)產(chǎn)生10個(gè)屬于區(qū)間[0,100)的自然數(shù),并保存于數(shù)組a中,然后在窗體上顯示這10個(gè)數(shù)及其平均值。(注:學(xué)生運(yùn)算結(jié)果有可能跟樣圖中數(shù)值不一致) Private Sub Command1_Click()Dim a(9)As Integer Dim s As Single Dim i As Integer Me.Cls s = 0 Randomize For i = 0 To ① a(i)= Int(Rnd * 100)Print a(i)Next i For i = 0 To 9 s = ② ③ Print “這10個(gè)自然數(shù)的平均值=”;s / 10 End Sub ①9 ②s+a(i)③next i 5、打開(kāi)文件“考生文件夾609工程1.vbp”,完善Form_Click事件代碼并保存。 實(shí)現(xiàn)功能:?jiǎn)螕舸绑w時(shí)在窗體上打印下面所示的圖案。 **** *** ** * Private Sub Form_Click()Dim i As Integer Dim j As Integer For i = ① To 1 Step-1 For j = 1 To i ② Next j Print ③ End Sub ①4 ②print “*”;③next i 6、打開(kāi)文件“考生文件夾610工程1.vbp”,完善Command1_Click事件代碼并保存。 實(shí)現(xiàn)功能:當(dāng)單擊“顯示”按鈕后,在窗體上顯示下面的圖形: @ @@ @@@ @@@@ @@@@@ @@@@@@ Private Sub Command1_Click()Dim i As Integer Dim j As Integer For i = 1 To 6 For j = 1 To ① Print ② Next ③ Print Next i End Sub ①i ②”@”;③j VB10 1、打開(kāi)文件“考生文件夾178工程1.vbp”,完善Command1_Click事件及fac函數(shù)并保存。 實(shí)現(xiàn)功能:用遞歸法求3!+5!+7!的值,將結(jié)果輸出到窗體上。 Public Function fac(a As Integer)As Integer If a = 1 Then fac = ① Else fac = a * ②(a1)+ fib(n1)End If End Function Private Sub Command1_Click()Dim sum As Integer sum = s(③)Print “sum=”;sum End Sub ①1 ②n ③100 6、打開(kāi)“考生文件夾776”中的文件“蝸牛爬竹.vbp”,完善Command1_Click事件代碼并保存。 實(shí)現(xiàn)功能:青竹高17米,蝸牛從青竹底端慢慢爬向頂端,晴天每天爬1.4米,雨天每天爬1.8米,若蝸牛爬到頂端用了11天,計(jì)算晴天、雨天各多少天?(晴天對(duì)應(yīng)文本框text1,雨天對(duì)應(yīng)文本框text2) Private Sub Command1_Click()Dim x As Single Dim y As Integer y =(171.4)① = 11-y Text1.Text = Str(②)+ “天” Text2.Text = Str(③)+ “天” End Sub ①x ②x ③y VB程序連乘算法的教學(xué)設(shè)計(jì) 摘 要:該文主要對(duì)程序設(shè)計(jì)課程中的連乘算法進(jìn)行教學(xué)設(shè)計(jì),結(jié)合實(shí)例介紹了連乘算法的關(guān)鍵點(diǎn),對(duì)算法中經(jīng)常會(huì)遇到的內(nèi)存溢出問(wèn)題進(jìn)行解析,針對(duì)連乘算法的通用表達(dá)式進(jìn)行了優(yōu)化,使程序更易理解,達(dá)到加深理解,優(yōu)化教學(xué)效果。 關(guān)鍵詞:程序設(shè)計(jì) 算法 連乘算法 溢出 中圖分類(lèi)號(hào):G64 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2015)12(a)-0220-02 在程序設(shè)計(jì)課程中,算法是課程的重點(diǎn),同時(shí)也是難點(diǎn),如何將算法原理向?qū)W生講解透徹并可以讓其輕松接受,是在教學(xué)過(guò)程中需要思考的一個(gè)問(wèn)題。 在計(jì)算機(jī)中,算法(Algorithm)是對(duì)特定問(wèn)題求解步驟的一種描述,它是指令序列的集合。程序設(shè)計(jì)就是設(shè)計(jì)算法、編寫(xiě)代碼、調(diào)試運(yùn)行的過(guò)程。顯而易見(jiàn),算法是程序設(shè)計(jì)的基礎(chǔ),程序設(shè)計(jì)是算法的具體實(shí)現(xiàn)。在程序設(shè)計(jì)課程的教學(xué)設(shè)計(jì)過(guò)程中,常用算法一般包括求最大/最小值、累加/連乘、窮舉法、遞推法等,該文將主要針對(duì)連乘算法進(jìn)行分析。連乘算法 在程序基礎(chǔ)教學(xué)中,為了提高教學(xué)效果,針對(duì)剛?cè)腴T(mén)的程序設(shè)計(jì)初學(xué)者,教師們一般采用任務(wù)驅(qū)動(dòng)法[1]進(jìn)行算法的分析,引導(dǎo)學(xué)生理解和掌握該算法的核心思想,進(jìn)而再用程序的方式來(lái)描述與驗(yàn)證該算法。例如: 以上是一個(gè)典型的連乘算法,該算法描述的關(guān)鍵點(diǎn)可歸納如下: (1)每一項(xiàng)和每次連乘之積是變化量。 (2)因此,需要兩個(gè)變量: ①用T表示每一項(xiàng)的值:T=T+1。 ②用S表示連乘之積:S=S*T。 (3)循環(huán)終止條件: 循環(huán)次數(shù)>n。 (4)初始化:S=1。內(nèi)存溢出問(wèn)題 在講解程序算法時(shí),大多數(shù)程序設(shè)計(jì)教程都很少提及賦值或計(jì)算中的“溢出”問(wèn)題,然而在學(xué)生的編程操作中,“溢出”卻是經(jīng)常會(huì)遇到的一個(gè)問(wèn)題[2],這些問(wèn)題常常會(huì)讓學(xué)生覺(jué)得困惑,查找原因時(shí)卻無(wú)從下手,導(dǎo)致學(xué)生出現(xiàn)畏難情緒。因此,教師有必要在授課過(guò)程中,對(duì)程序在內(nèi)存中的存儲(chǔ)方式進(jìn)行初步講解,讓學(xué)生可以了解程序的運(yùn)行機(jī)制,加深理解。 軟件在運(yùn)行過(guò)程中,如果程序調(diào)用的數(shù)據(jù)文件過(guò)大,或程序設(shè)計(jì)中存在著死循環(huán)等bug,軟件寫(xiě)入內(nèi)存中的數(shù)據(jù)量超過(guò)了系統(tǒng)分配給該軟件的內(nèi)存空間大小,則會(huì)發(fā)生內(nèi)存空間裝不下而溢出的現(xiàn)象,這種現(xiàn)象就叫內(nèi)存溢出。在求階乘的算法中,由于階乘的結(jié)果累積速度較快較大,容易發(fā)生數(shù)據(jù)溢出。 讓學(xué)生進(jìn)行程序的調(diào)試與運(yùn)行,當(dāng)n=10和=50時(shí)運(yùn)行結(jié)果如圖1所示,但當(dāng)n=100時(shí),卻彈出如圖2所示的警告信息。 分析導(dǎo)致“溢出”錯(cuò)誤的原因: 當(dāng)程序運(yùn)行發(fā)生“溢出”錯(cuò)誤時(shí),通過(guò)調(diào)試跟蹤,在T=(2* i)^ 2/((2*i-1)*(2*i+1))語(yǔ)句處,把光標(biāo)移至i變量上,可以發(fā)現(xiàn)溢出時(shí)i的值為91;當(dāng)i=91時(shí),表達(dá)式((2*i-1)*(2*i+1))=,該表達(dá)式的值為33123。程序?qū)⒔Y(jié)果值S設(shè)置為double類(lèi)型,當(dāng)i=91時(shí),結(jié)果為33123,這個(gè)值按道理應(yīng)在double類(lèi)型的數(shù)值范圍內(nèi),但程序仍然發(fā)生了溢出錯(cuò)誤,問(wèn)題在哪里呢? 實(shí)際上,產(chǎn)生這個(gè)溢出問(wèn)題的原因是由于VB本身的內(nèi)存分配機(jī)制造成的,VB在進(jìn)行計(jì)算過(guò)程中,它總是分配一個(gè)最省內(nèi)存的臨時(shí)內(nèi)存空間去存儲(chǔ)這些中間計(jì)算結(jié)果數(shù)值,這個(gè)最省的內(nèi)存空間容量根據(jù)表達(dá)式中數(shù)據(jù)類(lèi)型決定,如上述相乘的兩個(gè)表達(dá)式(2*i-1)和(2*i+1),他們當(dāng)中的變量i是整型,因此,VB也將使用一個(gè)類(lèi)型為整型的臨時(shí)變量來(lái)存儲(chǔ)兩個(gè)表達(dá)式的乘積。所以,當(dāng)i=91時(shí),得到乘積結(jié)果33 123,此時(shí)即使是乘積結(jié)果變量S設(shè)置為double類(lèi)型,但乘積結(jié)果(33 123)已超過(guò)了聲明為整型的臨時(shí)變量空間的極限(-32 768~+32 767),所以仍然會(huì)發(fā)生溢出錯(cuò)誤。 根據(jù)上面的原因分析,可以從以下幾方面進(jìn)行修正: (1)將變量 i 定義為長(zhǎng)整型或?qū)崝?shù)型或變體型。 (2)將錯(cuò)誤語(yǔ)句中的變量 i或常量(1或2)其一操作數(shù)利用轉(zhuǎn)換函數(shù)Clng(i)或Clng(1),以求足以容納計(jì)算結(jié)果。 (3)避免大數(shù)相乘,可將錯(cuò)誤語(yǔ)句改為T(mén)=(2*i)^ 2/(2*i-1)/(2*i+1)。 (4)連乘算法的改進(jìn)。 同一問(wèn)題可用不同算法解決,而一個(gè)算法的質(zhì)量?jī)?yōu)劣將影響到算法乃至程序的效率。雖然上述方法解決了“溢出”問(wèn)題,但是表達(dá)式T=(2*i)^2/(2*i-1)*(2*i+1)顯得很笨重,表達(dá)式明顯復(fù)雜。能否有辦法可以降低復(fù)雜度,簡(jiǎn)化表達(dá)式以求程序優(yōu)化呢? 可以把通項(xiàng)表達(dá)式T=(2*i)^2/(2*i-1)*(2*i+1)中的分子式分解開(kāi)來(lái),把問(wèn)題理解為簡(jiǎn)單表達(dá)式T=A/B(其中A=(2*i)^2和B=(2*i-1)*(2*i+1),如此一來(lái)問(wèn)題就變得較為簡(jiǎn)單且易于解決。因此,求∏的近似值的VB程序代碼優(yōu)化實(shí)現(xiàn)如下: 在此例中,關(guān)鍵點(diǎn)在于如何將復(fù)雜的通項(xiàng)表達(dá)式分解為簡(jiǎn)單表達(dá)式,進(jìn)而實(shí)現(xiàn)連乘算法的優(yōu)化。因此,如何構(gòu)造通項(xiàng)表達(dá)式尤為關(guān)鍵,必須注意2點(diǎn)。 (1)通項(xiàng)表達(dá)式T=B/A中的A或B均可為常量或變量表達(dá)式,A和B可以繼續(xù)分解;①若A=1,則T=B;②若B=1,則T=1/A; (2)必須精選變量A與B的數(shù)據(jù)類(lèi)型,避免出現(xiàn)“溢出”。結(jié)語(yǔ) 該文對(duì)程序設(shè)計(jì)課程中關(guān)于連乘算法的問(wèn)題進(jìn)行了初步探討,指出程序設(shè)計(jì)初學(xué)者中學(xué)習(xí)過(guò)程中經(jīng)常會(huì)遇到的“溢出”問(wèn)題,提出修正方法,并對(duì)連乘算法進(jìn)行改進(jìn)優(yōu)化,加深理解,強(qiáng)化教學(xué)效果。 參考文獻(xiàn) [1] 楊晨霞,涂風(fēng)濤.任務(wù)驅(qū)動(dòng)教學(xué)法在Visual Basic程序設(shè)計(jì)教學(xué)中的應(yīng)用[J].職教論壇,2012(18):79-81.[2] 賈穎.“VB 程序設(shè)計(jì)”課程教學(xué)中的變量類(lèi)型使用問(wèn)題研究[J].Computer Education,2008(20):138-139.第三篇:算法與程序設(shè)計(jì)VB試題與答案08
第四篇:算法與程序設(shè)計(jì)VB試題與答案10
第五篇:VB程序連乘算法的教學(xué)設(shè)計(jì)