Download presentation
Presentation is loading. Please wait.
1
For x = 0 To 9 For y = 0 To 9 z = 25006 + 100*x + 10*y …… Next y
循环的嵌套: 一个循环体内又包含另一个完整的循环结构 For x = 0 To 9 For y = 0 To 9 z = *x + 10*y …… Next y Next x 外 层 循 环 内 层 循 环 外层循环变量x取0时,内层循环就要执行10次(y依次取0,1,2,…,9) 外层循环变量x取1时,内层循环再次执行10次(y依次取0,1,2,…,9) …… 共执行10*10次,共执行100次
2
3 3 2 7 4 9 声明一个变量并赋值 A 声明一个数组并赋值 A Dim A As Integer A = 3
Dim A(1 to 5) As Integer A(1)=3 : A(2)=2 : A(3)=7 : A(4)=4 : A(5)=9 A(1) A(2) A(3) A(4) A(5) A 3 2 7 4 9
3
Dim 数组名(下界 To 上界) As 数据类型
数组是若干具有相同类型的数据的集合。 每一个数据称为数据元素,通过数组名和该数据在数组中的序号来标识。 Dim 数组名(下界 To 上界) As 数据类型 例如:Dim k( 5 To 9 ) As Double 声明了一个具有5个双精度实数型数据组成的数组 它的数组元素分别为k(5)、 k(6)、 k(7)、 k(8)、 k(9) 例如:Dim Ary(10) As String 即Dim Ary(0 To 10) As String 当下界为零时,可以省略“0 To”不写
4
自定义函数 注意:函数必须有返回值,且通过对函数名的赋值来完成。 赋值方法:函数名=表达式
Private Sub Command1_Click() Dim yyyy As Integer yyyy = Val(Text1.Text) Label2.Caption = L (yyyy) End Sub Function L (y As Integer) As String If y Mod 4 = 0 And y Mod 100 <> 0 Or y Mod 400 = 0 Then L = "闰年,366天" Else L = "平年,365天" End If End Function 注意:函数必须有返回值,且通过对函数名的赋值来完成。 赋值方法:函数名=表达式
5
解析算法 练习:已知三角形的三条边长a、b、c分别为5,7,8,求该三角形面积。 Private Sub Command1_Click()
Dim a,b,c,p,s As Single a=Val(Text1.Text) b=Val(Text2.Text) c=Val(Text3.Text) If a+b>c and b+c>a and a+c>b Then p=(a+b+c)/2 s=Sqr(p*(p-a)*(p-b)*(p-c)) Text4.Text=Str(s) Else Text4.Text=“三角形不成立!” End if End Sub 解析算法 用解析的方法找出表示问题的前提条件与所求结果之间关系的数学表达式,并通过表达式的计算来实现问题求解
6
一张单据上有一个5位数的编码(25??6),其百位数和十位数处已经变得模糊不清,但是知道这个数是67的倍数,请找出所有符合条件的5位数。
For x = To step 10 If _____________ Then List1.AddItem Str(x) End If Next x 25??6 x Mod 67 = 0 For x = 0 to 99 z = _____________ If_____________Then List1.AddItem Str(z) End If Next i 枚举算法 x * 10 把问题所有的可能解一一地罗列出来,并对每一个可能解进行判断,以确定这个可能解是否是问题的真正解 z Mod 67 = 0
7
冒泡排序 a(1) a(2) a(3) a(4) a(5) a(6) 17 For i = 1 To 5 For j = 6 To i + 1 Step -1 If a(j) < a(j - 1) Then k = a(j) a(j) = a(j - 1) a(j - 1) = k End If Next j Next i i j 1 6~2 2 6~3 3 6~4 4 6~5 5 6 68 43 6 30 55
8
冒泡排序的变化 最小的数往上浮 最大的数往下沉 最大的数往上浮 最小的数往下沉 For i = 1 To 5
For j = 6 To i + 1 Step -1 If a(j) < a(j - 1) Then k = a(j) a(j) = a(j - 1) a(j - 1) = k End If Next j Next i For i = 1 To 5 For j = 1 To 6 - i If a(j) > a(j + 1) Then k = a(j) a(j) = a(j + 1) a(j + 1) = k End If Next j Next i 最小的数往上浮 最大的数往下沉 For i = 1 To 5 For j = 6 To i + 1 Step -1 If a(j) > a(j - 1) Then k = a(j) a(j) = a(j - 1) a(j - 1) = k End If Next j Next i For i = 1 To 5 For j = 1 To 6 - i If a(j) < a(j + 1) Then k = a(j) a(j) = a(j + 1) a(j + 1) = k End If Next j Next i 最大的数往上浮 最小的数往下沉
9
选择排序 a(1) a(2) a(3) a(4) a(5) a(6) 17 For i = 1 To 5 k = i For j = i + 1 To 6 If a(j) < a(k) Then k = j Next j If i <> k Then t = a(i) : a(i) = a(k) : a(k) = t End If Next i i j 1 2~6 2 3~6 3 4~6 4 5~6 5 6 68 43 6 30 55
10
选择排序的变化 最小的数往上交换 最小的数往下交换 最大的数往上交换 最大的数往下交换 For i = 1 To 5 k = i
For j = i + 1 To 6 If a(j) < a(k) Then k = j Next j If i <> k Then t = a(i) : a(i) = a(k) : a(k) = t End If Next i For i = 6 To 2 k = i For j = i -1 To 1 If a(j) < a(k) Then k = j Next j If i <> k Then t = a(i) : a(i) = a(k) : a(k) = t End If Next i 最小的数往上交换 最小的数往下交换 For i = 1 To 5 k = i For j = i + 1 To 6 If a(j) > a(k) Then k = j Next j If i <> k Then t = a(i) : a(i) = a(k) : a(k) = t End If Next i For i = 6 To 2 k = i For j = i - 1To 1 If a(j) > a(k) Then k = j Next j If i <> k Then t = a(i) : a(i) = a(k) : a(k) = t End If Next i 最大的数往上交换 最大的数往下交换
11
顺序查找 17 68 43 6 30 55 Key = Val(Text1.Text) For i = 1 To 6
If Key = a(i) Then search = i Exit For End If Next i If search > 0 Then Label1.Caption = "在a(“+search+")中找到该数据" Else Label1.Caption = "找不到该数据" a(1) a(2) a(3) a(4) a(5) a(6) 17 68 43 6 30 55
12
a(1) 10 15 17 18 22 27 35 45 48 52 65 67 72 85 97 98 i 对分查找 a(2) Key = Val(Text1.Text) i = 1: j = 16: search = 0 Do While i <= j m = Fix((i + j) / 2) If Key < a(m) Then j = m - 1 ElseIf Key > a(m) Then i = m + 1 Else search = m Exit Do End If Loop If search > 0 Then Label1.Caption= “在a(“+search+")中找到该数据" Label1.Caption= "找不到该数据" a(3) m a(4) i a(5) m a(6) a(7) i,j,m j a(8) m a(9) a(10) a(11) a(12) a(13) a(14) a(15) a(16) j
13
例题:计算正整数n的阶乘n! 递归:如何按照相同的规则,把规模较大的问题逐步化解为规模较小的问题的算法。
n! = n×(n-1)×(n-2) ……×3 ×2 ×1 如果我们用函数f(n)求n!,则f(n) = n×f(n-1) 如求f(5),f(5)=5×f (4) f(4)=4×f(3) f(3)=3×f(2) f(2)=2×f(1) f(1)=1 那么已知f(1)=1,则 f(2)=2×f(1)=2×1=2 f(3)=3×f(2)=3×2=6 f(4)=4×f(3)=4×6=24 f(5)=5×f(4)=5×24=120 递归:如何按照相同的规则,把规模较大的问题逐步化解为规模较小的问题的算法。 递归的展开 递归:如何按照相同的规则,把规模较大的问题逐步化解为规模较小的问题的算法。 递归的返回
14
递归:如何按照相同的规则,把规模较大的问题逐步化解为规模较小的问题的算法。
正整数n的阶乘的递归表达式 Function f(n As Integer) As Long If n = 1 Then f = 1 If n > 1 Then f = n * f(n - 1) End Function 递归函数过程中调用函数本身
15
VB连接Access
Similar presentations