计算机等级考试二级VB常用算法_第1页
计算机等级考试二级VB常用算法_第2页
计算机等级考试二级VB常用算法_第3页
计算机等级考试二级VB常用算法_第4页
计算机等级考试二级VB常用算法_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./一、字符处理11、算法说明1>加密解密最简单的加密方法是:将每个字母加一序数,例如5,这时:"A"→"F","a"→"f","B"→"G","b"→"g"……"Y"→"D","y"→"d","Z"→"E","z"→"e"解密是加密的逆操作。界面如下:代码如下:Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:2>统计问题提出统计字符或者数字出现的次数。算法说明以字符统计为例,设基本问题如下:请统计一段文本中英文字母在文本中出现的次数。<不区分大小写>如:Iamastudent.得到:A:2d:1e:1I:1m:1n:1s:1t:2u: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函数转换为字符后,利用字符处理函数来解题。2、实战练习1>补充代码<2003秋二<8>>下面程序的功能是统计文件中英文字母<不区分大小写>出现的个数。Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:2>补充代码<2000秋二<6>>下面程序的功能是:统计当前盘当前文件夹中的顺序文件data.txt中共有多少个单词,约定连续出现的字母定义为一个单词。以下是引用片段:

Option

Explicit

Private

Sub

Form_Click<>

Dim

Char<>

As

String,

St

As

String,

Tem

As

String

Dim

Idx

As

Integer,

Js

As

Long,

Flen

As

Long

Dim

F

As

Boolean,

W

As

String

*

1

<1>

Flen

=

LOF<10>

St

=

Input<Flen,

#10>

Js

=

1

Do

While

Js

<=

Flen+1

W

=

Mid<St,

Js,

1>

If

<2>

Then

Tem

=

Tem

+

W

F

=

True

ElseIf

F

=

True

Then

Idx

=

Idx

+

1

ReDim

Preserve

Char<Idx>

Char<Idx>

=

Tem

Tem

=

<3>

F

=

False

End

If

<4>

Loop

Print

"共有";

Idx;

"个单词"

For

Js

=

1

To

Idx

Print

Char<Js>

Next

Js

End

Sub排序11、算法说明1>初等数学递推法又称为"迭代法",其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都在旧值的基础上递推出新值,并由新值代替旧值。问题:猴子吃桃子小猴子有若干桃子,第一天吃掉一半多一个;第二天吃掉剩下的一半多一个…..;如此,到第七天早上要吃时,只剩下一个桃子。问小猴子一开始共有多少桃子?分析:可以最后一天桃子数推出倒数第二天的桃子数;再从倒数第二天推出倒数第三天桃子数………..设第n天桃子数为xn,前一天桃子数是:xn-1,则有关系:xn=xn-1/2-1程序如下:Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:穷举法又称枚举法,即将所有可能情况一一测试,判断是否满足条件,一般用循环实现。问题:百元买鸡问题。假定小鸡每只5角;公鸡每只2元;母鸡每只3元。现在有100元,要求买100只鸡,编程列出所有可能的购鸡方案。分析:设母鸡、公鸡、小鸡分别x、y、z只,则有:x+y+z=1003x+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

Sub2>高等数学求积分近似计算积分: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数论综合题此类题目比较广泛,必须给以足够重视。历年题目有:平方数、零巧数、拟互满数、回文数、酉完数、完数、幸运数、逆序数以与无暇素数、超级素数、因子和等。排序21>补充代码<2002秋二<10>>找出由两个不同数字组成的平方数,并将结果按图中的格式显示在列表框List1中。Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:1>编程题<2004秋上机试卷08>一个正整数被称为奇妙平方数,如果此数的平方与它的逆序数的平方互为逆序数。例如,12^2=144,21^2=441,12与21互逆,144与441互逆,12就是奇妙平方数。找出1-300以内所有的奇妙平方数。1、算法说明1>顺序查找逐个元素找,如果有,则记录位置,然后跳出循环;否则,查找失败。代码如下:Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段: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

Sub2、实战练习补充代码<2002春二<9>>C盘根目录下stu.txt文件中以下的格式保存着学生XX与班号信息。本程序的功能是:读取该文件中的数据,再利用InputvBox输入要查找的学生XX,通过顺序查找,给出找到或找不到的信息。附图是某同学被找到时显示的信息窗口。X文,机械01李明,机械01王文卉,机械01…何宇宙,电子02Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:1、算法说明数组中元素的插入和删除一般是在已固定序列的数组中插入或删除一个元素,使得插入或删除操作后的数组还是有序的。基本思路:首先要找到插入位置或要删除的元素。1>插入代码如下:Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:2>14710131619222528K删除代码如下:以下是引用片段:

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>2、实战练习C盘根目录下文件Data4.txt的内容是:2,4,6,8,10,1,3,5,7,9。下面程序的功能是将文件后半部分的奇数分别按序插入到前半部分的适当位置,得到的新数列是:12345678910。<实现方法:第一次调整后的数列是:12468103579第二次调整后的数列是:12346810579>。Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:补充代码下面程序得功能是将无序数组中相同得数只保留一个,其余得删除,并输出经过删除后的数组元素,删除相同数是通过将该数组元素后面的元素在数组内依次前移替换前一个元素的值实现的。数组各元素的值从文件data.txt中读取。以下是引用片段:

Option

Explict

Option

Base

1

Private

Sub

Form_Click<>

Dim

I

As

Integer,J

As

Integer,K

As

Integer

Dim

A<>As

Integer,T

As

Integer,M

As

Integer

Open

"c:\my

documents\2000test\data.txt"

For

Input

As

#1

Do

While

<1>

I=I+1

Redim

Preserve

A<I>

Input

#1,A<I>

Loop

M=1:T=

<2>

Do

While

M

I=M+1

Do

While

I<=T

If

A<I>=A<M>Then

For

J=1

To

<3>

A<J>=A<J+1>

Next

J

T=T-1

Else

I=

<4>

End

If

Loop

M=M+1

Loop

Redim

Preserve

A<T>

For

I=1

To

T

Print

A<I>;

Next

I

Print

End

Sub2、实战练习1>补充代码下面是一个采用拉锯式排序法对数组元素按升序进行排序的程序,所谓"拉锯式排序法"是这一遍把最小的元素从下到上送到最上的位置,下一遍则是从上到下把最大的元素送到最下的位置。Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:

Option

Base

1

Private

Sub

Command1_Click<>

Dim

a<10>

As

Integer,i

As

Integer

For

i

=

1

To

102>编程题把文本框输入的字符串按降序添加到列表框中。约数因子1、算法说明1>最大公约数:用辗转相除法求两自然数m、n的最大公约数。<1>首先,对于已知两数m、n,比较并使得m>n;<2>m除以n得余数r;<3>若r=0,则n为求得的最大公约数,算法结束;否则执行步骤<4><4>mßnnßr再重复执行<2>譬如:10与5分析步骤:m=10n=5r=mmodn=0所以n<n=5>为最大公约数24与9分析步骤:Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:所以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

Function2>最小公倍数m×n÷最大公约数3>互质数最大公约数为1的两个正整数解题技巧该算法需要识记!这种类型题目的扩展是约数和因子题型。2、实战练习1>补充代码给定一个十进制正整数,找出小于它并与其互质的所有正整数<所谓互质数是指最大公约数为1的两个正整数,下图是程序执行画面>。Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段:2>编程题生成一个三行八列的二维数组A<3,8>,其中前两行元素产生的方法是:用初值X1=26与公式Xi+1=<25×Xi+357>Mod1024,产生一个数列:X1、X2、、X16。其中X1~X8作为A的第一行元素;X9~X16作为A的第二行元素;A的第三行元素值取前两行同列元素的最大公约数。最后按图示格式显示在图片框中。进制转化11、算法说明1>十进制正整数m转换为R<2-16>进制的字符串。思路:将m不断除r取余数,直到商为0,将余数反序即得到结果。算法实现:Word-WRAP:break-word"bgColor=#f3f3f3>以下是引用片段: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>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论