南师大博雅VB记案例————————————————————————————————作者:————————————————————————————————日期:循环结构一、For循环语句:1、计算1+2+3+4……+100Private Sub Form_Click()Dim a As Integer, s As Integer For i = 1 To 100a = a + 1s = s + aNext iPrint sEnd Sub2、计算1+3-5+7-9+……-99Private Sub Form_Click()Dim a As Integer, s As Longa = -1For i = 1 To 99 Step 2a = a + 2s = s + (-1) ^ n * an = n + 1Next iPrint sEnd Sub3、找一个数的约数Private Sub Command1_Click() Dim n As IntegerList1.Clearn = InputBox("输入")For x = 1 To nIf n Mod x = o ThenList1.AddItem Str(x)End IfNext xEnd Sub4、循环嵌套:找勾股数(1)Private Sub Command1_Click()Dim n As IntegerList1.ClearFor a = 1 To 300For b = a To 300For c = b To 300If a ^ 2 + b ^ 2 = c ^ 2 ThenList1.AddItem Str(a) & Str(b) & Str(c)End IfNext cNext bNext aEnd Sub(2)简化Private Sub Command1_Click()List1.ClearFor a = 1 To 500For b = a To 500If Sqr(a ^ 2 + b ^ 2) = Int(Sqr(a ^ 2 + b ^ 2)) ThenList1.AddItem Str(a) & Str(b) & Str(Sqr(a ^ 2 + b ^ 2)) End IfNext bNext aEnd Sub二、Select结构语句(善于实现多分支结构)Select case eCase e1A语句Case e2B语句...Case elseN 语句End Select1、随机出扑克牌:Private Sub Command1_Click()Dim n As Integern = Int(Rnd * (13 - 1 + 1) + 1)Select Case nCase 1Text1.Text = "ACE"Case 2 To 10Text1.Text = CStr(n)Case 11Text1.Text = "JACK"Case 12Text1.Text = "QUEEN"Case ElseText1.Text = "KING"End SelectEnd Sub三、DO—LOOP循环结构(1)Do While e (2)Do……[Exit do] [Exit do]……LOOP LOOP While e(3)Do until e (4)Do……[Exit do] [Exit do] ……Loop Loop until e1、找最大公约数Private Sub Command1_Click()Dim n As Integer, m As Integer, r As Integern = Val(Text1.Text)m = Val(Text2.Text)Dor = n Mod mn = mm = rLoop While r <> 0Text3.Text = nEnd Sub2、统计分数:输出总分,最高分,最低分,平均分Private Sub Command1_Click()Dim s As Integer, max As Integer, min As Integermax = 0min = 100Don = InputBox("成绩")If n <> -1 Thenk = k + 1s = s + nAvg = s / kIf n > max Then max = nIf n < min Then min = nElseExit DoEnd IfLoopPrint "总分"; sPrint "平均分"; AvgPrint "最高分"; maxPrint "最低分"; minEnd Sub数组1、产生一个而为数组1 2 34 5 67 8 9Private Sub Command1_Click()Dim a(3, 3) As Integerk = 1For i = 1 To 3For j = 1 To 3a(i, j) = kk = k + 1Print a(i, j);Next jPrintNext iEnd Sub2、产生10个各不相同的随机数Private Sub Command1_Click()Dim a(10) As Integer, n As IntegerRandomizeForm1.ClsFor i = 1 To 10k = k + 1n = Int(Rnd * 90 + 10)For j = 1 To i - 1If n = a(j) Then Exit ForNext jIf j = i Thena(i) = nPrint a(i);Elsei = i - 1End IfNext iPrint kEnd Sub3、用数组做计数器:求“两个骰子和”的概率Private Sub Command1_Click()Form1.ClsDim a(2 To 12) As Integer, n As IntegerFor i = 1 To 100n = Int(Rnd * 6 + 1) + Int(Rnd * 6 + 1)a(n) = a(n) + 1Next iFor i = 2 To 12Print CStr(i); ":"; a(i)Next iEnd Sub4、产生一个五行五列的随机数组Private Sub Command1_Click()Dim a(5, 5) As IntegerRandomizeFor i = 1 To 5For j = 1 To 5a(i, j) = Int(Rnd * 90 + 10)Print a(i, j);Next jPrintNext iEnd Sub5、随机控制任意行列数组Private Sub Command1_Click()Dim a() As Integer, m As Integer, n As Integer Form1.ClsRandomizem = InputBox("行")n = InputBox("列")ReDim a(m, n)For i = 1 To mFor j = 1 To na(i, j) = Int(Rnd * 90 + 10)Print a(i, j);Next jPrintNext iEnd Sub6、找质数7、制作计算器Private Sub Command1_Click(Index As Integer)text1 = text1.Text& CStr&(index)End Sub过程调用1、SUB过程调用:算圆面积Private Sub Command1_Click()Dim r As Single, m As Singler = Val(Text1.Text)m = 0Call s(r, m) r,m 为实参Text2.Text = mEnd SubPrivate Sub s(r As Single, area As Single) r,area 为形参area = 3.14 * r ^ 2End Sub参数的集合就是实参和形参的结合,实参通过位置把数值传给形参2、Function过程调用:算圆面积Private Sub Command1_Click()Dim r As Integerr = Text1Text2 = area(r)End SubPrivate Function area(w As Integer) As Singlearea = 3.14 * w * wEnd Function3、计算阶乘n!m!*(n-m)!(1)用一般的循环方式计算:Private Sub Command1_Click()n = Val(Text1.Text)m = Val(Text2.Text)k = nt = 1For i = 1 To kt = t * iNext is = tk = mt = 1For i = 1 To kt = t * iNext is = s / tk = n - mt = 1For i = 1 To kt = t * iNext is = s / tText3.Text = Str(s)End Sub(2)用FUNCTION过程调用计算阶乘Private Sub Command1_Click()Dim m As Integer, n As IntegerDim i As Integer, k As IntegerDim t As Long, s As Longn = Val(Text1.Text)m = Val(Text2.Text)s = fact(n) / (fact(m) * fact(n - m))Text3.Text = Str(s)End SubPrivate Function fact(k As Integer) As LongDim i As Integerfact = 1For i = 1 To kfact = fact * iNext iEnd FunctionByval 传值方式Byref 传址方式(数组作为形参采用传址方式)默认传址方式(3)用FUNCTION过程调用计算阶乘(DO LOOP循环)Private Sub Command1_Click()Dim m As Integer, n As IntegerDim i As Integer, k As IntegerDim t As Long, s As Longn = Val(Text1.Text)m = Val(Text2.Text)s = fact(n) / (fact(m) * fact(n - m))Text3.Text = Str(s)End SubPrivate Function fact(k As Integer) As LongDim i As Integerfact = 1For i = 1 To kfact = fact * I ?Next iEnd Function4、数组作为形参的过程调用Private Sub Command1_Click()Dim a(8) As IntegerCall gen(a)Call out(a)Call sort(a)Call out(a)End SubPrivate Sub out(a() As Integer)For i = 1 To UBound(a)Print a(i);Next iPrintEnd SubPrivate Sub gen(a() As Integer)For i = 1 To UBound(a)a(i) = Int(Rnd * 90 + 10)Next iEnd SubPrivate Sub sort(a() As Integer)Dim t As IntegerFor i = 1 To UBound(a) - 1For j = i + 1 To UBound(a)If a(i) > a(j) Thent = a(i)a(i) = a(j)a(j) = tEnd IfNext jNext iEnd SubEnd Sub递归过程1、用递归过程算阶乘Private Sub Command1_Click()Dim n As Integern = InputBox("输入一个正整数")Print n; "!="; fact(n)End SubPrivate Function fact(ByVal n As Integer) As LongIf n = 1 Thenfact = 1Elsefact = n * fact(n - 1)End IfEnd Function2、算非布拉切函数fib:0,1,1,2,3,5,8……Private Sub Command1_Click()Dim n As Integern = InputBox("输入一个正整数")Print fib(n)End SubPrivate Function fib(n As Integer) As LongIf n = 1 Or n = 0 Thenfib = nElsefib = fib(n - 1) + fib(n - 2)End IfEnd Function打字游戏前提:label visible falseTimer enabled falseInterval 80Form keypreview truePrivate Sub gen()Label1.Top = 0Label1.Visible = TrueLabel1.Caption = Chr(Int(Rnd * 26 + 65))'Label.ForeColor = RGB(Int(Rnd * 256), Int(Rnd * 256), Int(Rnd * 256)) ?Private Sub Command1_Click()Timer1.Enabled = TrueCall genEnd SubPrivate Sub Form_KeyPress(KeyAscii As Integer) If Chr(KeyAscii) = Label1.Caption Then Call genEnd SubPrivate Sub Timer1_Timer()If Label1.Top < 3000 ThenLabel1.Top = Label1.Top + 50Else: Call genEnd IfEnd SubPrivate Sub gen()Label1.Top = 1440Label1.Visible = TrueLabel1.Caption = Chr(Int(Rnd * 26 + 65))End SubPrivate Sub Command1_Click()Timer2.Enabled = TrueTimer1.Enabled = TrueCall genEnd SubPrivate Sub Form_KeyPress(KeyAscii As Integer) If Chr(KeyAscii) = Label1.Caption ThenCall genText3.Text = Val(Text3.Text) + 1End IfEnd SubPrivate Sub Timer1_Timer()Dim n As Integern = Text3.TextSelect Case nCase 0 To 30Text2.Text = 1Timer1.Interval = 100Case 30 To 60Text2.Text = 2Timer1.Interval = 60Case ElseText2.Text = 3Timer1.Interval = 30End SelectIf Label1.Top < 6840 ThenLabel1.Top = Label1.Top + 50Else: Call genEnd IfEnd SubPrivate Sub Timer2_Timer()Text1.Text = Val(Text1.Text) + 1 End Sub。