- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• Private Sub Command1_Click() • Dim s(20, 20) As Integer • Dim i%, j%, k%, n% • n = Val(Text1.Text) • Picture1.Cls • For i = 1 To n • s(i, 1) = 1: s(i, i) = 1 • Next i • For i = 3 To n • For j = 2 To i - 1 • s(i, j) = s(i - 1, j - 1) + s(i - 1, j) • Next j • Next i • For i = 1 To n • For j = 1 To i • Picture1.Print Spc(4 - Len(Str(s(i, j)))); s(i, j); • Next j • Picture1.Print • Next i
课前复习
• 数组用于存放一批性质相同的数据集合。 • Dim 数组名(下标 下标2…]) [As 类型] 数组名 下标1[,下标 下标 下标 类型
• 声明 数组名、维数、大小、类型(在内存分配一个连续的区域)
• 数组元素的赋初值 用Array函数 数组元素的赋初值:用 函数 • 数组的常用算法:求数组和,最值,位置和交换 数组的常用算法:求数组和,最值, 数组元素
• Private Sub Command1_Click() • Picture1.Cls • For i = 0 To 3 • For j = 0 To i • Picture1.Print a(i, j); " "; • Next j Picture1.Print • Next i • End Sub
运行界面: 运行界面:
3.数组排序(选择法) 3.数组排序(选择法) 数组排序
对已知存放在数组中的n个数 用选择法按递增顺序排序 个数, 按递增顺序排序。 例5.8 对已知存放在数组中的 个数,用选择法按递增顺序排序。 (1) 从n个数的序列中选出最小的数(递增 ,与第1个数交换位置; 个数的序列中选出最小的数 递增),与第 个数交换位置; 个数的序列中选出最小的数 递增 个数交换位置 (2) 除第 个数外,其余 -1个数再按 的方法选出次小的数,与第 个数 除第1个数外 其余n- 个数再按 的方法选出次小的数 与第2个数 个数外, 个数再按(1)的方法选出次小的数, 交换位置; 交换位置; 重复(1)n-1遍,最后构成递增序列。 (P121) (3) 重复 - 遍 最后构成递增序列。 For i = 1 To n - 1 iMin= i For j = i+1 To n If iA(j) < iA(iMin) Then iMin = j Next j t= iA(i): iA(i) = iA(iMin) : iA(iMin) = t Next i
For i = 1 To n-1 ‘ 有n+1个数,进行n趟比较 For j = 0 To n-1-i ‘ 从0 ~n-1- i个元素进行两两比较,大数沉底 If a(j) > a(j + 1) Then ' 若次序不对,则马上进行交换位置 t = a(j): a(j) = a(j + 1): a(j + 1) = t End If Next j ‘ 出了内循环,一轮排序结束,最大数已沉底 Next i
Private Sub Command2_Click() Dim a(), n%, i%, j%, t% a = Array(8, 6, 9, 3, 2, 7) n = UBound(a)
For i = 0 To n - 1 For j = 0 To n - 1 - i If a(j) > a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t End If Next j Next i
上机习题
• Dim a(1 To 10) As Integer, i%, maxa%, mina%, avera! • For i = 1 To 10 • a(i) = Int(Rnd * 71 + 30) • Next i • mina = a(1) • maxa = a(1) • avera = a(1) • For i = 2 To 10 • If a(i) > maxa Then maxa = a(i) • If a(i) < mina Then mina = a(i) • avera = avera + a(i) • Next i • For i = 1 To 10 • Print a(i); • Next i • Print • Print "max="; maxa, "min="; mina, "aver="; avera / 10
• Private Sub Command1_Click() • For i = 5 To 9 • s(i) = 0 • Next i • For i = 0 To 19 • j = stud(i) \ 10 • Select Case j • Case 0 To 5 • s(5) = s(5) + 1 • Case 9 To 10 • s(9) = s(9) + 1 • Case 6 To 8 • s(j) = s(j) + 1 • End Select • Next i Text1 = Val(s(5)): Text2 = Val(s(6)): Text4 = Val(s(8)): Text5 = Val(s(9)) • End Sub
原始数据 a(0) a(0) a(0) a(0) a(0) a(1) a(1) a(1) a(1) a(1) 图 1.3.25 a(2) a(2) a(2) a(2) a(3) a(3) a(3) a(4) a(4) a(5) 第 1 趟交换后 第 2 趟交换后 第 3 趟交换后 第 4 趟交换后 第 5 趟无交换 排序过程示意图 6 6 3 2 2 8 8 3 2 3 3 6 3 2 6 6 6 9 2 7 7 7 7 3 7 8 8 8 8 2 9 9 9 9 9 7
常用算法( 常用算法(二)
分类统计:按照条件统计一批数据中每一类包含的个数. 1. 分类统计:按照条件统计一批数据中每一类包含的个数.
输入一串字符,统计各字母出现的次数,不区分字母大小写。 例5.6 输入一串字符,统计各字母出现的次数,不区分字母大小写。 分析: 分析: • 统计26个字母出现的个数,先声明一个具有26个元素的数组,每个 统计 个字母出现的个数,先声明一个具有 个元素的数组, 个字母出现的个数 个元素的数组 元素的下标表示对应的字母,元素的值表示对应字母出现的次数。 元素的下标表示对应的字母,元素的值表示对应字母出现的次数。
Text3 = Val(s(7)):
上机习题
• • • • • • • • • Dim a%(3, 3), b%(3, 3) Private Sub Form_Load() For i = 0 To 3 For j = 0 To 3 a(i, j) = Int(Rnd * 36 + 35) b(i, j) = Int(Rnd * 41 + 100) Next j Next i End Sub
上机习题
• Private Sub Form_Click() • Dim a, i%, p% • a = Array(56, 78, 98, 88, 76, 78) • For i = LBound(a) To UBound(a) • p = a(i) \ 5 • Print String(p, "◆"), a(i) ◆ • Next i • End Sub
排序(冒泡法) 排序(冒泡法)
冒泡法排序在每一轮排序时找最小 递增次序)数的下标 在每一轮排序时找最小(递增次序 数的下标, 例5.9 冒泡法排序在每一轮排序时找最小 递增次序 数的下标,出了内 循环(一轮排序结束 再交换最小数的位置; 一轮排序结束), 循环 一轮排序结束 ,再交换最小数的位置;而冒泡法排序在每一轮 排序时只要将第一个与其他几个比较 只要次序不对就交换 将第一个与其他几个比较, 次序不对就交换, 排序时只要将第一个与其他几个比较,只要次序不对就交换,出了内 循环,最小数已冒出。排序进行的过程见下表。 过程见下表 循环,最小数已冒出。排序进行的过程见下表。 (P121)
• Private Sub Command2_Click() • Picture2.Cls • For i = 0 To 3 • For j = i To 3 • Picture2.Print Tab(j * 6); b(i, j); • Next j
Picture2.Pr a(1) a(2) a(2) a(3) a(3) a(3) a(4) a(4) a(4) a(4) a(5) a(5) a(5) a(5) a(5) a(6) a(6) a(6) a(6) a(6) 第 1 趟交换后 第 2 趟交换后 第 3 趟交换后 第 4 趟交换后 第 5 趟无交换 2 2 2 2 2 8 6 3 3 3 3 6 9 9 6 6 6 9 3 6 9 7 7 3 8 8 8 8 8 2 7 7 7 9 9 7
图 1.3.25
排序过程示意图
Private Sub Command1_Click() Dim a(), iMin%, n%, i%, j%, t% a = Array(8, 6, 9, 3, 2, 7) n = UBound(a) For i = 0 To n - 1 iMin = i For j = i + 1 To n If a(j) < a(iMin) Then iMin = j Next j t = a(i): a(i) = a(iMin): a(iMin) = t Next i For i = LBound(a) To UBound(a) Print a(i); Next i End Sub