计算机等级考试二级VB常用算法(1):累加和连乘

1、算法说明

累加形式:V=V+e

连乘形式:V=V*e

其中:V是变量,e是递增表达式。累加和连乘一般通过循环结构来实现。

注意:需在执行循环体前对变量V赋初值。一般的,累加时置初值0;连乘时置初值为1.

举例

求N!的结果。

Private

Sub Command1_Click()

Dim n%,

i%, s&

n =

Val(InputBox("输入n"))

s =

1

For i =

1 To n

s = s *

i

Next

i

Print

s

End

Sub

错误的写法:

Private

Sub Command1_Click()

Dim n%,

i%, s&

n =

Val(InputBox("输入n"))

For i =

1 To n

s =

1 ‘赋初值语句位置不对!

s = s *

i

Next

i

Print

s ‘输出s的值为n,而不是n!

End

Sub

应用举例

根据下列公式,求自然对数e的的近似值。

要求:误差小于0.00001

Private

Sub Command1_Click()

Dim i%,

n&, t!, e!

e =

2

i =

1

t =

1

Do

While t > 0.00001

i = i +

1

t = t /

i

e = e +

t

Loop

Print

"计算了"; i; "项目和是:"; e

Print

Exp(1) ‘与上句输出值进行对比以证明算法的正确性

End

Sub

解题技巧

1) 由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。设定循环变量和通项变量,注意各变量的初值;

2) 分解通项表达式中各因子,并分别将各因子用循环变量表示;

3) 如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function过程;

4) 根据步骤1、2、3,写出通项表达式;

5) 根据精度要求(往往是通项小于10负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。通常是用:if 通项表达式>10^(-N) then exit do ,注意这句话一般需放在累加或者连乘式之前。

计算机等级考试二级VB常用算法(2):最值问题

1、算法说明

在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。

求最小值的方法类同。

求若干数平均值,实质上就是先求和,再除以这些数的个数。

应用举例

随机产生n个1-100(包括1和100)的数,求它们的最大值、最小值和平均值。

Private Sub Command1_Click()

Dim n As

Integer, i As Integer, min As Integer, max As Integer, aver As

Single, s As Integer

n =

Val(InputBox("输入个数:"))

s = Int(Rnd

* 100) + 1

max = s

min = s

aver = s

Print

"第1个数是:" & s

For i = 2 To

n

s = Int(Rnd * 100) + 1

Print "第" & i & "个数是:" & s

If s > max Then max = s

If s < min Then min = s

aver = aver + s

Next i

aver = aver

/ n

Print

"max="; max; "min="; min; "aver="; aver

End Sub

解题技巧

最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。

计算机等级考试二级VB常用算法(3):素数

1、算法说明

素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。

判别某数m是否是素数的经典算法是:

对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m是素数。

Private Function sushu(ByVal n As Long) As Boolean

Dim i As

Long

For i = 2

To n - 1

If (n Mod

i) = 0 Then Exit For

Next I

If I=n then sushu=True

End Function

很显然,实际上,我们可以改进上面

For i = 2 To n – 1

为:

For i = 2 To int(sqr(m))

这样可以很好的提高效率。

以上判断是否为素数的代码务必识记!

应用举例

求100-200之内素数。

Private Sub Command1_Click()

Dim j As

Integer

For j =

100 To 200

If sushu(j) = True Then

Print j

End If

Next

j

End Sub

解题技巧

识记判断素数的算法过程,根据题意,灵活调用!

计算机等级考试二级VB常用算法(4):进制转化

1、算法说明

1) 十进制正整数m转换为R(2-16)进制的字符串。

思路: 将m不断除r取余数,直到商为0,将余数反序即得到结果。

算法实现:

Private Function Tran(ByVal m As Integer, ByVal r As Integer) As

String

Dim

StrDtoR As String, n As Integer

Do While

m <> o

n = m Mod r

m = m \ r

If n > 9 Then

StrDtoR = Chr(65 + n - 10) & StrDtoR

Else

StrDtoR = n & StrDtoR

End If

Loop

Tran =

StrDtoR

End Function

2) R(2-16)进制字符串转换为十进制正整数。

思路:R进制数每位数字乘以权值之和即为十进制数。

算法实现:

Private Function Tran(ByVal s As String, ByVal r As Integer) As

integer

Dim n As

Integer, dec As Integer

s =

UCase(Trim(s))

For i% =

1 To Len(s)

If Mid(s, i, 1) >= "A" Then

n = Asc(Mid(s, i, 1)) - Asc("A") + 10

Else

n = Val(Mid(s, i, 1))

End If

dec = dec + n * r ^ (Len(s) - i)

Next

i

Tran =

dec

End Function

解题技巧

进制转化的原理要清楚,同时编写代码时候要留意16进制中的A-F字符的处理。

计算机等级考试二级VB常用算法(5):约数因子

1、算法说明

1) 最大公约数:

用辗转相除法求两自然数m、n的最大公约数。

(1) 首先,对于已知两数m、n,比较并使得m>n;

(2) m除以n得余数r;

(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4)

(4) mßn nßr 再重复执行(2)

譬如: 10与5

分析步骤: m=10 n=5

r=m mod n=0

所以n(n=5)为最大公约数

24与9

分析步骤: m=24 n=9

r=m mod n=6

r≠0 m=9 n=6

r=m mod n=3

r≠0 m=6 n=3

r=m mod n=0

所以n(n=3)为最大公约数

算法实现

循环实现

Private Function GCD(ByVal m As Long, ByVal n As Long) As

Long

Dim temp

As Long

If m <

n Then temp = m: m = n: n = temp

Dim r As

Long

Do

r = m Mod n

If r = 0 Then Exit Do

m = n

n = r

Loop

GCD =

n

End Function

递归实现

Private Function GCD(ByVal m As Long, ByVal n As Long) As Long

Dim temp

As Long

If m <

n Then temp = m: m = n: n = temp

Dim r As

Long

r = m Mod

n

If r = 0

Then

GCD = n

Else

m = n

n = r

GCD = GCD(m, n)

End

If

End Function

2) 最小公倍数

m×n÷最大公约数

3) 互质数

最大公约数为1的两个正整数

解题技巧

该算法需要识记!

这种类型题目的扩展是约数和因子题型。

计算机等级考试二级VB常用算法(6):排序

1、算法说明

1) 选择法排序

(1) 从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;

(2) 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;

(3) 以此类推,最后构成递增序列。

譬如:

8 6 9 3 2 7

第一轮交换后 2 6 9 3 8 7

第二轮交换后 2 3 9 6 8 7

第三轮交换后 2 3 6 9 8 7

第四轮交换后 2 3 6 7 8 9

第五轮无交换 2 3 6 7 8 9

程序代码如下:

Private Sub xzPaiXu(a() As Double, sheng As Boolean)

'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。

Dim i As

Integer, j As Integer

Dim temp

As Double

Dim m As

Integer

For i =

LBound(a) To UBound(a) -

1 '进行数组大小-1轮比较

m =

i '在第i轮比较时,假定第

'i个元素为最值元素

For j = i + 1 To

UBound(a) '在剩下的元素中找出最

'值元素的下标并记录在m中

If sheng

Then '若为升序,则m记录最小元素

'下标,否则记录最大元素下标

If a(j) < a(m) Then m = j

Else

If a(j) > a(m) Then m = j

End If

Next

j '将最值元素与第i个元素交换

temp = a(i)

a(i) = a(m)

a(m) = temp

Next

i

End Sub

调用该过程示例:

Option Base 1

Private Sub Command1_Click()

Dim b(6)

As Double

b(1) =

8

b(2) =

6

b(3) =

9

b(4) =

3

b(5) =

2

b(6) =

7

Call

xzPaiXu(b, True)

For i% =

1 To 6

Print b(i)

Next

End Sub

2) 冒泡法排序

选择排序法在每一轮排序时找最值元素的下标,出了内循环(一轮排序结束),再交换最小数的位置;而冒泡法在每一轮排序时将相邻的数比较,当次序不对就交换位置,出了内循环,最值数已经冒出。

譬如:

8 6 9 3 2 7

8 6 9 3 2 7

8 6 9 2 3 7

8 6 2 9 3 7

8 2 6 9 3 7

2 8 6 9 3 7

….

2 3 8 6 9 7

….

2 3 6 8 7 9

….

2 3 6 7 8 9

….

2 3 6 7 8 9

程序代码如下:

Private Sub mpPaiXu(a() As Double, sheng As Boolean)

'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。

Dim i As

Integer, j As Integer

Dim temp

As Double

Dim m As

Integer

For i =

LBound(a) To UBound(a) -

1 '进行n-1轮比较

For j = UBound(a) To i + 1 Step -1 '从n到i个元素两两进行比较

If sheng

Then '若次序不对,马上进行交换

If a(j) < a(j - 1) Then

temp = a(j)

a(j) = a(j - 1)

a(j - 1) = temp

End If

Else

If a(j) > a(j - 1) Then

temp = a(j)

a(j) = a(j - 1)

a(j - 1) = temp

End If

End If

Next

j '出了内循环,一轮排序结束

'最值元素冒到最上边

Next

i

End Sub

调用该过程代码基本同上。

计算机等级考试二级VB常用算法(7):排序

1、算法说明数组中元素的插入和删除一般是在已固定序列的数组中插入或删除一个元素,使得插入或删除操作后的数组还是有序的。

基本思路:首先要找到插入位置或要删除的元素。

1) 插入

代码如下:

Private Sub Command1_Click()

Dim a(10)

As Integer

Dim i As

Integer, k As Integer

For i = 0

To

9 '生成数组

a(i) = i * 3 + 1

Print

a(i);

Next

i

Print

Print

"插入14"

For k = 0

To

9 '查找插入14在数组中的位置

If 14 < a(k) Then Exit For

Next

k

For i = 9

To k Step -1 '从最后元素开始逐个后移,腾出位置

a(i + 1) = a(i)

Next

i

a(k) =

14 '插入数14

For i = 0

To 10

Print a(i);

Next

i

Print

End Sub

2) 1 4 7 10 13 16 19 22 25 28

K

删除  代码如下:

Dim a() as integer

….

ReDim a(1 to n)

For i=k+1 to n

a(i-1)=a(i)

Next I

Redim preserve a(1 to n-1)

计算机等级考试二级VB常用算法(8):排序

1、算法说明

1) 顺序查找

逐个元素找,如果有,则记录位置,然后跳出循环;否则,查找失败。

代码如下:

Private Sub Search(a(), ByVal Key, Index As Integer)

Dim i%

For i = LBound(a) To UBound(a)

If a(i) = Key Then '找到,将元素下标保存在index中并结束查找

Index = i

Exit Sub

End If

Next i

Index =

-1 '若没找到,则index值为-1

End Sub

2) 二分法查找

顺序查找效率低下,当数组有序排列时,可以使用二分法查找提高效率。

算法思想:

代码如下:

Private Sub birSearch(a(), ByVal low%, ByVal high%, ByVal Key,

index%)

Dim mid As Integer

If low > high

Then '没有查找到

index = -1

Exit Sub

End If

mid = (low + high) \ 2 '取查找区间的中点

If Key = a(mid) Then '查找到,返回下标

index = mid

Exit Sub

ElseIf Key < a(mid) Then '查找区间在上半部分

high = mid - 1

Else

low = mid + 1 '查找区间在下半部分

End If

Call birSearch(a, low, high, Key, index) '递归调用查找函数

End Sub

调用方法:

Private Sub Command1_Click()

Dim a(11)

a(1) = 5: a(2) = 13: a(3) = 19: a(4) = 21: a(5) = 37

a(6) = 56: a(7) = 64: a(8) = 75: a(9) = 80: a(10) = 88: a(11) =

92

Dim ind As Integer

Call birSearch(a, LBound(a), UBound(a), 21, ind)

Print ind

End Sub

计算机等级考试二级VB常用算法(9):排序

1、算法说明

1) 初等数学

递推法

又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都在旧值的基础上递推出新值,并由新值代替旧值。

问题:猴子吃桃子

小猴子有若干桃子,第一天吃掉一半多一个;第二天吃掉剩下的一半多一个…..;如此,到第七天早上要吃时,只剩下一个桃子。问小猴子一开始共有多少桃子?

分析:可以最后一天桃子数推出倒数第二天的桃子数;再从倒数第二天推出倒数第三天桃子数………..

设第n天桃子数为xn,前一天桃子数是:xn-1,则有关系:

xn=xn-1/2-1

程序如下:

Private Sub Command1_Click()

Dim n%, i%

x =

1 '第七天桃子数

Print "第七天桃子数: 1只"

For i = 6 To 1 Step -1

x = (x + 1) * 2

Print "第" & i & "天桃子数:" & x & "只"

Next i

End Sub

穷举法

又称枚举法,即将所有可能情况一一测试,判断是否满足条件,一般用循环实现。

问题:百元买鸡问题。

假定小鸡每只5角;公鸡每只2元;母鸡每只3元。现在有100元,要求买100只鸡,编程列出所有可能的购鸡方案。

分析:

设母鸡、公鸡、小鸡分别x、y、z只,则有:

x+y+z=100

3x+2y+0.5z=100

程序一:

Private Sub Command1_Click()

Dim x%, y%, z%

For x = 0 To 100

For y = 0 To 100

For z = 0 To 100

If x + y + z = 100 And 3 * x + 2 * y + 0.5 * z = 100 Then

Print x, y, z

End If

Next z

Next y

Next x

End Sub

程序二(优化)

Private Sub Command1_Click()

Dim x%, y%

For x = 0 To 33

For y = 0 To 50

If 3 * x + 2 * y + 0.5 * (100 - x - y) = 100 Then

Print x, y, 100 - x - y

End If

Next y

Next x

End Sub

2) 高等数学

求积分

近似计算积分:s=∫13(x3+2x+5)dx

代码如下:

Public Function f(ByVal x!) '被积函数

f = x * (x * x + 2) + 5

End Function

Public Function trapez(ByVal a!, ByVal b!, ByVal n%) As Single

'b、a分别为积分上下限,n为等分数

Dim sum!, h!, x!

h = (b - a) / n

sum = (f(a) + f(b)) / 2

For i = 1 To n - 1

x = a + i * h

sum = sum + f(x)

Next i

trapez = sum * h

End Function

调用:

Private Sub Command1_Click()

Print trapez(1, 3, 30)

End Sub

数论综合题

此类题目比较广泛,必须给以足够重视。

历年题目有:平方数、零巧数、拟互满数、回文数、酉完数、完数、幸运数、逆序数以及无暇素数、超级素数、因子和等。

计算机等级考试二级VB常用算法(10):字符处理

1、算法说明

1) 加密解密

最简单的加密方法是:将每个字母加一序数,例如5,这时:

“A”→”F”,”a” →”f”,”B” →”G”,”b” →”g”……”Y” →”D”, ”y” →”d”,”Z” →”E”,

”z” →”e”

解密是加密的逆操作。

界面如下:

代码如下:

Option Explicit

Private Sub Command1_Click()

Dim strInput$, Code$, Record$, c As String * 1

Dim i%, length%, iAsc%

strInput = Text1.Text

length = Len(Trim(strInput))

Code = ""

For i = 1 To length

c = mid(strInput, i, 1)

Select Case c

Case "A" To "Z"

iAsc = Asc(c) + 5

If iAsc > Asc("Z") Then iAsc = iAsc - 26

Code = Code & Chr(iAsc)

Case "a" To "z"

iAsc = Asc(c) + 5

If iAsc > Asc("z") Then iAsc = iAsc - 26

Code = Code & Chr(iAsc)

Case Else

Code = Code & c

End Select

Next i

Text2.Text = Code

End Sub

Private Sub Command3_Click()

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

Text1.SetFocus

End Sub

2) 统计

问题提出

统计字符或者数字出现的次数。

算法说明

以字符统计为例,设基本问题如下:

请统计一段文本中英文字母在文本中出现的次数。(不区分大小写)

如:I am a student.

得到:

A:2 d:1 e:1 I:1 m:1 n:1 s:1 t:2 u:1

分析:

由于不区分大小写,因此可定义一个大小为26(下标:0-25)的数组,每个元素依次记录A、B、C…Z字母出现的次数。

A(0)存放字母a出现的次数

A(1)存放字母b出现的次数

A(2)存放字母c出现的次数

A(3)存放字母d出现的次数

譬如:aabdc

代码如下:

Option

Explicit

Private

Sub Command1_Click()

Dim i As Integer, j As Integer

Dim zimu(25) As Integer

Dim allStr As String

Dim aStr As String

allStr = UCase(Text1.Text)

For i = 1 To Len(Text1.Text)

aStr = Mid(allStr, i, 1)

If aStr >= "A" And aStr <= "Z" Then

zimu(Asc(aStr) - Asc("A")) = zimu(Asc(aStr) - Asc("A")) + 1

End If

Next i

For i = 0 To 25

If zimu(i) <> 0 Then

j = j + 1

Text2.Text = Text2.Text & Chr(i + Asc("A")) & ":" &

str(zimu(i)) & " "

If j Mod 5 = 0 Then Text2.Text = Text2.Text & Chr(13) &

Chr(10)

End If

Next i

End

Sub

解题技巧

熟练运用字符处理函数,对于一些数论题,譬如逆序数等也可将数字通过CStr函数转换为字符后,利用字符处理函数来解题

vb计算机二级第二天比第一天难,计算机二级VB常用算法相关推荐

  1. 初识计算机程序教学设计,粤教版 (B版)第二册下册第一节 初识计算机程序教学设计及反思...

    这是一份粤教版 (B版)第二册下册第一节 初识计算机程序教学设计及反思,共6页. 二 初识VB编程环境教学目标1.认识VB窗口与工具箱:2.了解什么是VB的对象.对象的属性等概念:3.基本掌握如何在窗 ...

  2. 南京工程学院计算机组成原理第二版答案,南大__计算机组成原理第二次作业

    南大__计算机组成原理第二次作业 学员答案:B本题得分:3.51题号:29题型:判断题本题分数:1.75内容:一旦有中断请求出现,CPU立即停止当前指令的执行,转而去受理中断请求.1.错2.对学员答案 ...

  3. 工程图学及计算机绘图第二版答案,工程图学及计算机绘图习题集 第3版

    图书简介 本习题集与宋卫卫等主编的<工程图学及计算机绘图>(第3版)教材配套使用.本套教材是根据教育部高等学校工程图学教学指导委员会制定的"普通高等院校工程图学课程教学基本要求& ...

  4. 计算机组成原理 王道考研2021 第一章:计算机组成原理概述 -- 计算机的工作过程(从源程序到可执行文件)、计算机的层次结构、计算机软件的分类、三种级别的语言

    1. 计算机的工作过程 计算机的工作过程分为以下三个步骤: 把程序和数据装入主存储器. 将源程序转换成可执行文件. 从可执行文件的首地址开始逐条执行指令. 1.1 从源程序到可执行文件 预处理阶段:预 ...

  5. 计算机组成原理第二版第6章ppt,计算机组成原理第6章简.ppt

    文档介绍: * 第6章 控制器 6.1 控制器的功能与组成概述 6.2 硬连线控制器 6.3 微程序的控制器部件 清绩寺浮热埂杉症咽拆秽篓河种蜀苔栅跋攀俗瘩瑰趟甩寝媚构诀悍携垒借计算机组成原理第6章简 ...

  6. 计算机组成原理第二版第5章答案,计算机组成原理第5章习题参考答案.pdf

    <计算机组成原理第5章习题参考答案.pdf>由会员分享,提供在线免费全文阅读可下载,此文档格式为pdf,更多相关<计算机组成原理第5章习题参考答案.pdf>文档请在天天文库搜索 ...

  7. 家用计算机哪一年,中国第一台电子管计算机诞生于哪一年?

    01 1958年 1958年,计算机103型机(即DJS-1型计算机)研制成功;字长31位,内存容量为1024字节,运算速度每秒450次.8月1日,该机成功运行了四条指令的短程序,标志着中国第一台计算 ...

  8. 中石油计算机图形学第二次在线,石油华东《计算机图形学》2020年秋季学期在线作业(二)...

    试卷总分:100    得分:100 第1题,下列算法用于裁剪二维线段的有(    ). A.字符裁剪 B.中点分割裁剪法 C.逐边裁剪 D.双边裁剪法 正确答案: 第2题,多边形填充时,下述论述错误 ...

  9. 工程图学及计算机绘图第二版答案,工程图学及计算机绘图: 非机类

    摘要: 本教材适用于化学工程,材料工程.电器工程及其他悲观机械类,非土建类专业.计划学时40至80学时,凡是带有星号的内容,可由教师根据不同专业和不同计划学时数,选择使用.为了适应"甩图板& ...

最新文章

  1. 【技巧——windows】直接登陆到桌面,免去输入密码
  2. angularjs之browserTrigger
  3. jQuery deferred应用dom加载完毕详细源码分析(三)
  4. caffe 人脸关键点检测_人脸检测关键点新增至81个,比Dlib更精准、更贴边
  5. 3分钟快速presentation
  6. java自动化测试成长日记-之CVS客户端和服务端安装和部署1:CVS服务端的配置和基本使用...
  7. [Python] 读取存储.mat数据 scipy.io.loadmat(FileName)和scipy.io.savemat('XXX.mat', {'x': x,'y': y,'z': z})
  8. 中国结算-金融机构服务平台(FISP平台)
  9. php城市 省份,怎么获取省份和城市?
  10. 巴菲特佛罗里达州立大学演讲
  11. 计算机毕业设计Android手机校园外卖订餐APP(源码+系统+mysql数据库+Lw文档)
  12. 公众号如何裂变涨粉?
  13. 小甲鱼Python3笔记
  14. 发送端口25,465,587端口
  15. 百度AI——人脸识别的简单应用
  16. XZ_Swift 之输入框的各种限制,看这一篇就够了:输入框只能输入字母、数字和中文,控制输入特殊字符和表情
  17. 视频文件格式分析(1):avi格式
  18. 博主教您如何免费获得斐讯K2—1200M千兆家用双频智能无线路由器wifi穿墙(亲测有效)...
  19. 【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍 第一个DirectX 11 Demo的创建
  20. Cent0S7系统镜像文件(百度网盘资源)

热门文章

  1. 判断魔方阵c语言程序设计_C语言编程,输出魔方阵
  2. 红米note114g和5g区别 红米note114g和5g外观有区别吗
  3. android模拟器快照,启用快照后,Android模拟器失败
  4. nodejs+vue毕业生求职招聘平台系统
  5. php foreach详解,php foreach的用法详解,foreach怎么使用
  6. java计算机毕业设计消防安全应急培训管理平台源码+lw文档+系统+数据库
  7. 2022支付宝C2C现金红包PHP源码DEMO/兼容苹果/安卓浏览器和扫码形式
  8. MuleSoft知识总结-8.Mule事件
  9. 【转】Mac用户必备!100多款免费实用的苹果Mac软件大搜集
  10. Excel 表格把所有行变成一行数据