VB程序设计的常用算法09

上传人:飞*** 文档编号:24846436 上传时间:2017-12-07 格式:DOC 页数:32 大小:1.27MB
返回 下载 相关 举报
VB程序设计的常用算法09_第1页
第1页 / 共32页
VB程序设计的常用算法09_第2页
第2页 / 共32页
VB程序设计的常用算法09_第3页
第3页 / 共32页
VB程序设计的常用算法09_第4页
第4页 / 共32页
VB程序设计的常用算法09_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《VB程序设计的常用算法09》由会员分享,可在线阅读,更多相关《VB程序设计的常用算法09(32页珍藏版)》请在金锄头文库上搜索。

1、Visual Basic 常用算法从逻辑结构上看,应用程序 = 算法 + 数据结构。(1)数据结构(D ata-Structure) ,计 算 机 将 数 据 元 素 依 据 某 种 逻 辑 联 系 进 行 存 储 和 组 织 的 方 式 。许 多 大 型 系 统 的 构 造 经 验 表 明 , 系 统 实 现 的 困 难 程 度 和 系 统 构 造 的 质 量 都 严 重 依 赖 于 是 否 选 择 了最 优 的 数 据 结 构 。 选 择 了 数 据 结 构 , 算 法 也 随 之 确 定 , 是 数 据 而 不 是 算 法 是 系 统 构 造 的 关 键 因 素 。这 种 洞 见 导 致

2、 了 许 多 种 软 件 设 计 方 法 和 程 序 设 计 语 言 的 出 现 , 面 向 对 象 的 程 序 设 计 语 言 就 是 其 中 之 一 。数 据 是 对 客 观 事 物 的 符 号 表 示 , 在 计 算 机 科 学 中 是 指 所 有 能 输 入 到 计 算 机 中 并 由 计 算 机 程 序 处 理的 符 号 的 总 称 。(2)算法( Algorithm) ,由 基 本 运 算 及 规 定 的 运 算 顺 序 所 构 成 的 完 整 解 题 步 骤 。一 个 算 法 应 该 具 有 以 下 五 个 重 要 的 特 征 : 有 穷 性 , 算 法 必 须 保 证 执 行

3、有 限 步 之 后 结 束 。 确 切 性 , 算 法 的 每 一 步 骤 必 须 有 确 切 的 定 义 。 输 入 , 算 法 有 0 个 或 多 个 输 入 , 以 描 述 运 算 量 的 初 始 值 。 0 个 输 入 是 指 算 法 本 身 包 含 了 初 始值 。 输 出 , 算 法 有 一 个 或 多 个 输 出 , 以 反 映 对 输 入 数 据 加 工 后 的 结 果 。 没 有 结 果 的 算 法 是 毫 无 意义 的 。 可 行 性 , 算 法 原 则 上 能 够 精 确 地 运 行 , 而 且 人 们 用 笔 和 纸 做 有 限 次 运 算 后 即 可 完 成 。计 算

4、 机 科 学 家 尼 克 劳 斯 -沃 思 曾 著 过 一 本 著 名 的 书 数 据 结 构 十 算 法 = 程 序 , 可 见 算 法 在 计 算机 科 学 界 与 计 算 机 应 用 界 的 地 位 。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果) 、采用什么结构、使用什么语句以及如何安排这些语句等。程序(P rogramme) 就是用计算机语言描述的算法。流程图( Flow Charts) 就是图形化的算法。解决同一问题可以有多种算法描述。实际问题的算法种类繁多,总体上可以分为两大类:数值算法和非数值法。对 VB

5、程序语言设计的初学者,可能会感到掌握控件的使用不难,难得的是理解和掌握算法。但是,算法是程序的核心、编程的基础,离开算法,一事无成。我们将介绍常用的 VB 算法。一、常见数学问题算法1、累加和连乘累加是在原有和的基础上在循环体中每次加上一个数,最后根据条件结束累加,最终得到累加和。连乘是在原有积得基础上在循环体中每次乘以一个数,最后根据条件结束连乘,最终得到连乘积。此类问题都要结合循环结构实现,根据问题确定循环变量的初值、终值或结束条件。【注意】 累加和变量、连乘积变量必须在循环外赋初值。一般累加和初值为 0、连乘积初值为 1。 对于多重循环,赋初值在外循环体外还是在内循环体外根据实际问题决定

6、。【计算 的近似值】用公式: 计算,直到最后一项的绝对值小于 10-6 为止。71534Private Sub Form_Click( )Dim s As Integer, n As Single, t As Single, pi As Singlet = 1 第一项pi = 0 累加和初始值为 0n = 1 每一项的分母值s = 1 第一项符号Do While (Abs(t) = 0.000001)pi = pi + t 将每一项求和,得到 /4 的近似值n = n + 2 产生每一项的分母值s = -s 产生每一项的符号值t = s / n 产生每一项Looppi = pi * 4Prin

7、t =; piEnd Sub【斐不拉齐数列】输出斐不拉齐数列(Fibonacci)的前 40 个项:1、1、2、3、5、8、13、数列中的第 1、2 项为 1,其后每项都等于其前两项之和,其递推公式:32112nFnPrivate Sub Form_Click( )Dim f1 As Long, f2 As Long, i As Integerf1 = 1 数列第一项f2 = 1 数列第二项Print f1, f2, 打印数列前两项For i = 3 To 40 循环输出第 3 至 40 项f3 = f1 + f2 计算下一个数列项Print f3, 打印输出下一个数列项f1 = f2 为下一

8、个数列项计算做准备f2 = f3 为下一个数列项计算做准备If i Mod 5 = 0 Then Print 当每行输出 5 个以后换行Next iEnd Sub【计算 e 的近似值】求自然对数 e 的近似值,要求其误差小于 0.00001,近似公式为: niine 00!1!1!31!2Private Sub Form_Click( )Dim i%, n&, t!, e!e = 0 存放累加和i = 0 循环控制变量n = 1 存放连乘积t = 1 级数第 i 项初始值Do While t 0.00001e = e + t 将每一项加入累加和i = i + 1 产生阶乘下一个乘数n = n

9、* i 乘以乘数 i 得到每一项的阶乘t = 1 / n 产生每一项LoopPrint 计算了; i; 项的和是; eEnd Sub【计数统计】用随机函数产生 100 个0,99范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0 的数的个数并打印出来。使用数组来处理,用数组 a(1 to 100)存放产生的确 100 个随机整数,数组 x(1 to 10)来存放个位上的数字分别为 1,2,3,4,5,6,7,8,9,0 的数的个数。即个位是 1 的个数存放在 x(1)中,个位是 2 的个数存放在x(2)中,个位是 0 的个数存放在 x(10)。Private Sub

10、 Form_Click( )Dim a(1 To 100) , x(1 To 10) As IntegerDim i, p As Integer For i = 1 To 100 产生 100 个0,99范围内的随机整数,每行 10 个打印出来a(i) = Int(Rnd * 100)If a(i) N) , R 表示余数。 输入两个正整数 M 和 N,且 MN; 计算 M 除以 N 得余数 R; 如果 R 不为 0 时,使 M=N和 N=R 后转移到第 2 步再次计算; 如果 R=0 时,N 就是所求的最大公约数。最小公倍数就是两个数的乘积再除以最大公约数的结果。Private Sub Co

11、mmand1_Click( )Dim x, y, m, n, r As Integerx = Val(Text1.Text) : y = Val(Text2.Text) 从文本框中输入连个正整数If x y Then 使得 MN,即将两个正整数排序m = x : n = yElsem = y : n = xEnd IfDo 求最大公约数r = m Mod nm = n : n = rLoop While r 0求最小公倍数并分行打印出两个结果Label3.Caption = 最大公约数为: & m & vbCrLf & 最小公倍数为: & x * y / mEnd Sub【说明】 x 和 y

12、保存了两个正整数的原值,以便最后计算最小公倍数; If 语句保证了 mn,但省略 If 语句也不会出错,因为 r = m Mod n :m = n : n = r 会自动将较大的数交换到 m 中。#3、穷举法解方程将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现,也称为“枚举法”。这是一种“在没有其它办法的情况的方法” ,是一种最“笨”的方法,然而对一些无法用解析法求解的问题往往能奏效,通常采用循环来处理穷举问题。【百钱买百鸡】我国古代数学家张丘建在算经中曾提出一个有趣的“百钱买百鸡”问题。题意为:已知用 5 文钱可以买一只公鸡,3 文钱可以买 1 只母鸡,用 1 文钱可以买

13、 3 只小鸡,如果要用 100 文钱买 100 只鸡。请问公鸡、母鸡和小鸡应各买多少只?(1)分析:设变量 x 表示公鸡,y 表示母鸡,z 表示小鸡。则有方程组: 105zyx上述方程组中,有 3 个求和数,但只有两个方程,帮方程组有多个解。为解决这类问题一般需要使用穷举法。即先对各求知数的所有可能进行穷举,然后再依次判断哪些值能满足要求。Private Sub Form_Click( )Dim x As Integer, y As Integer, z As Integer, num As LongFor x = 0 To 100For y = 0 To 100For z = 0 To 10

14、0num = num + 1 If (x + y + z = 100 And 5 * x + 3 * y + z / 3 = 100) ThenPrint 公鸡=; x, 母鸡 =; y, 小鸡=; zEnd IfNext zNext yNext xPrint 方法一的 If 语句测试了; num; 次 End Sub (3)通过分析可知,公鸡、母鸡和小鸡的可能值为:020、033 、100-x-y。Private Sub Form_Click()Dim x As Integer, y As Integer, z As Integer, num As IntegerFor x=0 To 20For y=0 To 33z=100-x-ynum=num+1If 5*x+3*y+z/3=100 ThenPrint “公鸡=”; x; “母鸡=”; y; “小鸡=”; zEnd ifNext y, xPrint 方法二 If 语句测试 ; num; 次End Sub 【说明】 通过 num 变量可以测试循环的次数,还可以使用系统变量 Now 测试循环使用的时间。 在方法二中两层循环的 Next 相邻时,可以合而为一:Next y, x。【注意】在多重循环中,为了提高运行的速度,要考虑对程序优化问题: 利用已知条件,尽量减少循环的次数。 合理地选择内、外层的循

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号