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