- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序设计_vb
程序设计思维方法
前面已经详细介绍了语言的各种程序控制结构,于是,我们就有了编制简单程序所必需的工具。进行程序设计需要很强的逻辑思维能力,是一种极富创造性的智力劳动。对初学者来说而言,往往最使他们望而生畏的,也正是这一点。其实,电脑作为人脑的模拟,在许多方面与人的思维习惯是一致的。如果能迅速地把人们的思维习惯与程序设计的思维方法吻合起来,无疑以较快地提高程序设计能力。下面介绍程序设计的三条基本思维原则:枚举原则,归纳原则和抽象原则。
枚举原则
枚举法,也称穷举法,是人们常用的一种思维方法。有一些问题,我们无法用一个计算公式来求得它们的解,它们的解可能离散地分布在某个有限或无限的集合里。枚举法,就是逐一列举这个集合里的各个元素,并加以判断,直至求得所需要的解。
枚举法,思维简单,得处理起来比较繁杂,因为要列举的集合元素很多,列举、判断的过程极耗费精力,这就限制了它的实用价值。但是,计算机的运算速度极快,可以不知疲倦地进行单调而浩繁的工作,因此,枚举法在程序设计中得到了广泛的应用。尤其是在排列、组合、数据分类、信息检索、多解方程的求解以及人工智能程序设计中,大量使用了枚举法。
使用枚举法,主要掌握两条原则:
确定搜索范围
当然,这个范围必须是有限的而不是无限的。例如,求素数,就是一个无限范围内的问题,用计算机也只能找到某一个最大素数,因为它受到计算机容量和计算时间的限制。在确定搜索范围时,有的问题比较明显,有的问题就不那么明显,就要进行分析后再确定。
选择搜索策略
如何枚举,按照一条什么样的路线来逐一枚举,就是搜索策略问题。
上述两条原则使用得好坏,对程序的工作量有巨大的影响。
例:用100元钱买100只鸡,每只公鸡5元,每只母鸡3元,每1元3只小鸡,要求每种鸡至少买一只,且必须是整只的,问各种鸡各买多少只?显然,这是一个组合问题,也可以看成是一个三元一次方程问题。只能用枚举法。令i,j,k分别表示公鸡、母鸡和小鸡的只数。为了确定i,j,k的取值范围,可以有不同的方法。我们可以看到,不同的方法,其计算量可能相差甚远。
方法一:令i,j,k的搜索范围分别为:
i:1~20 (公鸡最多能买20只)
j:1~33 (母鸡最多能买33只)
k:1~100 (小鸡最多能买100只)
于是可以用三重循环来逐个搜索:程序如下
Private Sub Form_Click()
For i = 1 To 20
For j = 1 To 33
For k = 1 To 100
If (i * 5 + j * 3 + (k / 3)) = 100 And (i + j + k) = 100 Then
Print i=; i, j=; j, k=; k
End If
Next k
Next j
Next i
End Sub
在这个程序中,循环体被执行了20×33×100=66×1000次。
方法二:令i,j,k的搜索范围分别为(保证每种鸡至少买一只)
i:1~18 (公鸡最多能买18只)
j:1~31 (母鸡最多能买31只)
k:100-i-j (当公鸡和母鸡数量确定后,小鸡的数量即随之而定)
用二重循环来实现,程序如下:
Private Sub Form_Click()
For i = 1 To 18
For j = 1 To 31
k = 100 - i - j
If (i * 5 + j * 3 + (k / 3)) = 100 Then
Print i=; i, j=; j, k=; k
End If
Next j
Next i
End Sub
在这个程序中,循环体被执行了18×31=558次,其计算量不足方法一的1%。
方法三:由题意可得到下列方程组:
i+j+k=100
5i+3j+k/3=100
由此可得:14i+8j=200 (将k=100-i-j代入方程)
由于i和j至少为1,实际上i最大为13,j最大为23(设i和j分别为1时求得),这样可以得到如下程序:
Private Sub Form_Click()
For i = 1 To 13
For j = 1 To 23
k = 100 - i - j
If (i * 5 + j * 3 + (k / 3)) = 100 Then
Print i=; i, j=; j, k=; k
End If
Next j
Next i
End Sub
在这个程序中,循环体被执行了13×23=229次,略大于方法二的一半。
方法四:由方法三中的方程 7i+4j=100 可得:j=(100-7i)/4
因此,可以用单层循环编制程序如下:
文档评论(0)