内容正文:
专题八 VB选考部分
一、解析算法
1.定义
解析算法是指用解析的方法找出表示问题的前提条件与结果之间关系的数学表达式,并通过表达式的计算来实现问题的求解。
2.解析算法的程序实现
解析算法程序实现的关键之一是简历正确的数学模型(得出正确的数学计算式),关键之二是保证计算过程描述的正确性(用正确合理地VB变量、表达式来表示已经得出的数学计算式)。
解析算法的代码特征不明显,一般代码中会出现公式计算,但是有公式计算不一定及时解析算法。出现了循环语句或条件语句等复杂的程序结构也不一定不是解析算法。分段函数解决问题一般可归为解析算法。比较复杂的比如辗转相除法求公约数、公倍数,除n取余法实现进制转换,也算解析算法。
3.常见案例
BMI指数计算、出租车计价、鸡兔同笼、阶乘等各类数学问题
二、枚举算法
1.定义
现实中有一类问题可以采用搜索的方法,在搜索结果的过程中,把各种可能的情况都考虑到,并对全部可能结果注意进行判断,过滤掉那些不符合要求的,保留符合要求的结果,这种方法叫做枚举算法。
2.实现要点:
①列举与检验过程既不重复也不遗漏;
②尽可能地使可能解的罗列范围最小,以提高解决问题的效率;
③用循环语句(For语句)在一定范围内列举所有可能的解;
④用选择语句(If语句)判断和选择真正的解。
3.For循环方式格式
4.常见案例
水仙花数、四叶玫瑰数等自幂数的计算、回文数、数据复原、各类整数组合求解等。
三、排序算法
排序算法的基本思想:通常被排序的数据是一批同类型数据,存储在具有适当规模的数组变量中。通过排序可以调整数据在数组变量中的存储位置,使数组内的数据呈现某种次序。
(一)冒泡排序
1.定义
冒泡排序是在一列数据中把较小 (大) 的数据逐次向上推移的一种排序技术。元素会经由交换慢慢“浮”到数列的顶端。从最下面一个元素起,依次比较相邻的两个元素中的数据,将较小的数据调换到上面,小元素像气泡一样上浮。
2.格式
3.变式
(二)选择排序
1.定义:
选择排序算法是对冒泡排序算法的改进 。这种方法是对参加排序数组的所有元素中找出最小(或最大)数据的元素,使它与第一个元素中数据相互交换位置。然后在余下的元素中找出最小(或最大)的数据的元素,与第二个元素中的数据交换位置。以此类推,直到所有元素成为一个有序的序列。
选择排序的程序同样采用双重For循环嵌套来实现,外循环来控制是第几遍加工,内循环用来控制数组内进行排序元素的下标变化范围。在每一遍加工结束,都需要用一个变量来存储这一遍加工中所找出的最小(或最大)的数据在数组内的下标。
2.格式
(三)桶排序
如图所示,比如有10个桶,编号从1~10。每出现一个数,就将对应编号的桶中放一面小旗子,最后只要数每个桶中有几面小旗子就OK了。例如2号桶中有1面小旗子,表示2出现了一次;3号桶中有1面小旗子,表示3出现了一次;5号桶中有2面小旗子,表示5出现了两次;8号桶中有1个小旗子,表示8出现了一次。最后只要按桶的编号顺序逐次输出非空的桶的编号即可实现排序功能。
图a 图b
小明利用桶排序的算法思想实现在5个[1,10]随机整数的排序过程。实现上述功能的VB程序如图b所示,请在划线处填入合适的代码。
Dim a(5) As Integer
Dim b(10) As Integer ’数组b相当于桶
Private Sub Form_Load() ’生成5个[1,10]随机整数
List1.Clear
Randomize
For i = 1 To 5
a(i) = Int(Rnd * 10) + 1
List1.AddItem Str(a(i))
Next i
End Sub
Private Sub Command1_Click() ’桶排序(升序)算法实现
List2.Clear
For i = 1 To 5
b(a(i)) = b(a(i)) + 1
Next i
For i = 1 To 10
For j = 1 To b(i)
List2.AddItem Str(i)
Next j
Next i
End Sub
(四)插入排序
Private Sub form_click()
Randomize
Dim tmp As Integer
Dim a(1 To 10) As Integer
For i = 1 To 10 '开始随机生成10个数
a(i) = Int(Rnd * 99)
Next i
For