内容正文:
考点一 解析算法及程序实现
考向基础
1.解析算法的基本思想
用解析的方法找出表示问题的前提条件与所求结果之间关系的数学表达
式,并通过数学表达式的计算来实现问题的求解。
如:已知圆的半径为r,求圆的面积s,则可通过公式s=3.14*r*r计算得到。
2.解析算法的程序实现
(1)分析问题,建立正确的数学模型,找到数学计算式或数学算法。要注意
的是,有些问题能找到一个明确的公式,但是有些问题可能是一个运算过
程,比如除二倒取余法求二进制,辗转相除法求最大公约数等问题。
考点清单
(2)将数学计算或数学算法转化为VB运算过程。
考向突破
解析算法一般难度不大,重点题型是各种进制之间的相互转换。
例1 将十进制数转化为二进制数的VB 程序段如下:
Dim y As Integer, s As String, r As Integer
y=Val(Text1.Text) ’输入十进制数
s=""
Do While y <> 0
Loop
Text2.Text=s ’显示二进制数
方框中的代码由以下三部分组成:
①s=Str(r)+s
②y=y\2
③r=y Mod 2
代码顺序正确的选项是 ( )
A.②③① B.②①③
C.①③② D.③②①
解析 本题采用“除2取余法”将十进制转换成二进制,先求余数(Mod运
算)并保存,再求商(整除 \),商用来下一次求余数。重复执行该过程直到商
为0。
答案 D
例2 辗转相除法是数学史中著名的算法,用于计算两个正整数a和b的最
大公约数。步骤如下:
现编写程序,在文本框Text1和Text2中输入a和b,在文本框Text3中输出
两数的最大公约数。代码如下:
Private Sub Command1_Click()
Dim a As Integer, b As Integer, r As Integer
变量 a b 余数
初始值 24 15 9
第一次辗转 15 9 6
第二次辗转 9 6 3
第三次辗转 6 3 0
余数为0时终止,最大公约数为3
a=Val(Text1.Text)
b=Val(Text2.Text)
r=a Mod b
Do While ①
a=b
b=r
r=a Mod b
Loop
Text3.Text= ②
End Sub
解析 ①循环结束条件是r=0,因此循环条件是r>0 或 r<>0。②退出循环
后,结果存在变量b中。
答案 ①r>0 ②str(b)
考点二 枚举算法及程序实现
考向基础
1.枚举算法的基本思想
将问题的可能解一一列举,逐个判断,找到所有符合条件的解。即使中途找
到符合的解也要继续找下去,要将所有可能解找完才结束。设计枚举算法
时要尽量减小罗列范围(提高算法的效率),不能遗漏,也不能重复。
2.枚举算法的程序实现
根据枚举算法的主要思想:一一列举,逐个判断。因此一般情况下枚举算法
的代码具有以下特点:
(1)用循环语句在一定范围内列举所有可能的解。
(2)用选择语句判断和选择真正的解。
枚举算法的一般格式:
For(列举所有可能的解)
If 可能解是正确解 Then 输出该解或计数
Next
注意:循环语句不一定用For语句,也可用Do语句。
3.多变量列举
某些枚举算法的问题比较复杂,可能有多个变量需要列举,此时就需要多重
循环,也即循环嵌套。格式如下:
For(列举变量1所有可能的解)
For(列举变量2所有可能的解)
……
If 该组解是正确解 Then 输出该组解或计数
……
Next
Next
如鸡兔同笼问题、百鸡百钱问题等。在设定多个变量的列举范围时,可以
利用验证条件,尽可能缩小列举范围,减少列举变量,从而减少循环的嵌
套。如百鸡百钱问题:100元钱买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1
元3只。则代码如下:
For x=1 To 100
For y=1 To 100
For z=1 To 100
If x+y+z=100 And 5*x+3*y+z/3=100 Then 输出该组解或计数
Next z
Next y
Next x
利用验证条件,代码可优化为:
For x=1 To 20 ’公鸡最多不超过20只
For y=1 To 33 ’母鸡最多不超过33只
z=100-x-y
If 5*x+3*y+z/3=100 Then 输出该组解或计数
Next y
Next x
例 寻找3位的水仙花数。什么是水仙花数?水仙花数是指一个 n 位数(n
≥3),它的每一位上的数字的 n 次幂之和等于它本身。例如153是水仙花
数,因为13+53+33=153。
解决此问题的Visual Basic程序