完整word版计算机二级考试VB常用算法难点docx.docx

上传人:b****3 文档编号:4851657 上传时间:2022-12-10 格式:DOCX 页数:33 大小:26.57KB
下载 相关 举报
完整word版计算机二级考试VB常用算法难点docx.docx_第1页
第1页 / 共33页
完整word版计算机二级考试VB常用算法难点docx.docx_第2页
第2页 / 共33页
完整word版计算机二级考试VB常用算法难点docx.docx_第3页
第3页 / 共33页
完整word版计算机二级考试VB常用算法难点docx.docx_第4页
第4页 / 共33页
完整word版计算机二级考试VB常用算法难点docx.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

完整word版计算机二级考试VB常用算法难点docx.docx

《完整word版计算机二级考试VB常用算法难点docx.docx》由会员分享,可在线阅读,更多相关《完整word版计算机二级考试VB常用算法难点docx.docx(33页珍藏版)》请在冰豆网上搜索。

完整word版计算机二级考试VB常用算法难点docx.docx

完整word版计算机二级考试VB常用算法难点docx

 

计算机二级考试VB常用算法:

约数因子

 

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=5

r=mmodn=0

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

24与9

分析步骤:

m=24n=9

r=mmodn=6

r≠0m=9n=6

r=mmodn=3

r≠0m=6n=3

r=mmodn=0

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

 

算法实现

PrivateFunctionGCD(ByValmAsLong,ByValnAsLong)AsLong

DimtempAsLong

Ifm

m=n:

n=temp

DimrAsLong

Do

r=mModn

Ifr=0ThenExitDo

m=n

n=r

Loop

GCD=n

EndFunction

2)

最小公倍数

m×n÷最大公约数

3)

互质数

最大公约数为

1的两个正整数

 

解题技巧

该算法需要识记!

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

2、实战练习

 

1)补充代码(2003春二(9))

给定一个十进制正整数,找出小于它并与其互质的所有正整数(所谓互质数是指最大公约数为1的两个正整数,下图是程序执行画面)。

 

OptionExplicit

PrivateFunctiongcd

(1)

)AsInteger

DimrAsInteger

r=mModn

Ifr=0Then

gcd=n

Else

m=n:

n=r

 

(2)

EndIf

EndFunction

 

PrivateSubCommand1_Click()

DimnAsInteger,pAsInteger

n=Val(Text1)

Forp=n-1To2Step-1

If

(3)ThenList1.AddItemp

 

Nextp

EndSub

 

2)编程题(2002秋上机试卷01)

生成一个三行八列的二维数组A(3,8),其中前两行元素产生的方法是:

用初值X1=26及公式Xi+1=(25×Xi+357)Mod1024,产生一个数列:

X1、X2、......、X16。

其中X1~X8作为A的第一行元素;X9~X16作为A的第二行元素;A的第三行元素值取前两行同列元素的最大公约数。

最后按图示格式显示在图片框中。

 

计算机二级考试VB常用算法:

进制转化

 

1、算法说明

 

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

思路:

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

算法实现:

PrivateFunctionTran(ByValmAsInteger,ByValrAsInteger)AsString

DimStrDtoRAsString,nAsInteger

DoWhilem<>o

n=mModr

m=m\r

Ifn>9Then

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

‘将余数

n转换为字符(

10转为

A,11

为B,依次类推,然后放到转换后字符串的前面(实现反序排列)

Else

StrDtoR=n&StrDtoR

EndIf

Loop

Tran=StrDtoR

 

EndFunction

2)R(2-16)制字符串十制正整数。

思路:

R制数每位数字乘以之和即十制数。

算法:

PrivateFunctionTran(ByValsAsString,ByValrAsInteger)Asinteger

DimnAsInteger,decAsInteger

s=UCase(Trim(s))

Fori%=1ToLen(s)

IfMid(s,i,1)>="A"Then

n=Asc(Mid(s,i,1))-Asc("A")+10将字‘母A10,B11,⋯.

Else

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

EndIf

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

Nexti

Tran=dec

EndFunction

 

解技巧

制化的原理要清楚,同写代候要留意16制中的A-F字符的理。

 

2、

 

1)充代(2002秋二(9))

本程序是把定的二制整数八制整数。

PrivateSubCommand1_Click()

DimaAsString,bAs

String,cAsString

DimLAsInteger,mAs

Integer,nAsInteger

a=InputBox("入一个

二制数","入框")

(1)

a=String(L,"0")&a

(2)

Form=1Ton/3

b=Mid(a,3*m-2,

3)

(3)

 

Nextm

Text1.Text=c

EndSub

 

PrivateFunctionzh(sAsString)AsString

DimiAsInteger,nAsInteger,pAsInteger

p=1

Fori=2To0Step-1

(4)

p=p+1

Nexti

zh=Str(n)

EndFunction

2)补充代码(2001春二(7))

下面程序是把给定的16进制正整数转换为10进制数。

OptionExplicit

 

PrivateSubForm_Click()

DimStAsInteger,DemAs

Long

St=InputBox("输入一个十

六进制数")

Dem=Convert(St)

PrintSt;">=";Dem

EndSub

 

PrivateFunctionConvert(SAsString)AsLong

DimNAsInteger,IAsInteger,SubstringAsString*1

DimPAslong,KAsLong,Asc1AsInteger

N=

(1)

P=16^N

ForI=1ToN

P=P/16

Substring=

(2)

SelectCaseSubstring

Case"0"To"9"

K=K+P*Val(Substring)

Case(3)

Asc1=Asc(Substring)-Asc("A")+10

(4)

EndSelect

NextI

(5)

计算机二级考试VB常用算法:

素数

 

1、算法明

 

素数(数):

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

 

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

 

于m,从I=2,3,4,⋯⋯,m-1依次判能否被

不是素数,否m是素数。

 

PrivateFunctionsushu(ByValnAsLong)AsBoolean

 

DimiAsLong

 

Fori=2Ton-1

 

If(nModi)=0ThenExitFor

 

NextI

 

IfI=nthensushu=True

 

EndFunction

 

I整除,只要有一个能整除,

 

m就

很然,上,我可以改上面

 

Fori=2Ton–1

 

 

Fori=2Toint(sqr(m))

 

可以很好的提高效率。

 

以上判断是否素数的代必!

 

用例

 

求100-200之内素数。

 

PrivateSubCommand1_Click()

 

DimjAsInteger

 

Forj=100To200

 

Ifsushu(j)=TrueThen

 

Printj

 

EndIf

 

Nextj

 

EndSub

 

解题技巧

 

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

 

实例说明

 

编程题(2002年春上机试卷04)

 

找出10000以内所有可以表示为两个平方数和的素数。

 

思路:

 

首先找10000以内的所有素数,对于每个素数判断其是否可以表示为两个平方数之和(即

对于任意小于该素数shu的数I,如果I和shu-I均为平方数,则说明其可以表示为两个平方数之和。

 

判断数I是否为平方数(即是某个数的平方)的方法:

sqr(i)=int(sqr(i))

 

PrivateSubCommand1_Click()

 

DimjAsInteger

 

DimmAsLong,nAsLong

 

Forj=2To10000

 

Ifsushu(j)=TrueThen

 

Ifpf(j,m,n)=TrueThen

 

List1.AddItemj&"="&m&"+"&n

 

EndIf

 

EndIf

 

Nextj

 

EndSub

 

PrivateFunctionpf(ByValshuAsLong,mAsLong,nAsLong)AsBoolean

 

DimiAsLong

 

Fori=1Toshu-1

 

If(Sqr(i)=Int(Sqr(i)))And(Sqr(shu-i)=Int(Sqr(shu-i)))Then

 

pf=True

 

m=i

 

n=shu-i

 

ExitFunction

 

EndIf

 

Next

 

EndFunction

 

编程题(2004春上机试卷03)

随机生成15个两位正整数,从中找出所有的素数,并记下它是第几个数,再找出其中最大的素数,并给出它的位置。

计算机二级考试VB常用算法:

最值问题

 

1、算法说明

 

在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),

然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,

直到循环结束。

求最小值的方法类同。

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

应用举例

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

PrivateSubCommand1_Click()

DimnAsInteger,iAsInteger,minAsInteger,maxAsInteger,averAsSingle,sAsIntegern=Val(InputBox("输入个数:

"))

s=Int(Rnd*100)+1

max=s

min=s

aver=s

Print"第1个数是:

"&s

 

Fori=2Ton

s=Int(Rnd*100)+1

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

"&s

Ifs>maxThenmax=s

Ifs

aver=aver+s

Nexti

aver=aver/n

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

EndSub

解题技巧

最大值、最小值、平均值类型题目往往和数组放在一起考!

有的不仅求这些值,还要对

具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值

时,同时记录该值所在的行号和列号。

计算机二级考试VB常用算法

(1):

累加和连乘

 

1、算法说明

累加形式:

V=V+e

连乘形式:

V=V*e

其中:

V是变量,e是递增表达式。

累加和连乘一般通过循环结构来实现。

注意:

需在执行循环体前对变量V赋初值。

一般的,累加时置初值0;连乘时置初

值为1.

举例

求N!

的结果。

PrivateSubCommand1_Click()

Dimn%,i%,s&

n=Val(InputBox("输入n"))

s=1

Fori=1Ton

s=s*i

Nexti

Prints

EndSub

错误的写法:

PrivateSubCommand1_Click()

Dimn%,i%,s&

n=Val(InputBox("输入n"))

Fori=1Ton

s=1

‘赋初值语句位置不对!

s=s*i

Nexti

Prints

‘输出

s的值为

n,而不是

n!

 

EndSub

用例

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

 

要求:

差小于0.00001

PrivateSubCommand1_Click()

Dimi%,n&,t!

,e!

e=2

i=1

t=1

DoWhilet>0.00001

i=i+1

t=t/i

e=e+t

Loop

Print"算了";i;"目和是:

";e

PrintExp

(1)‘与上句出行比以明算法的正确性

EndSub

解技巧

1)由于目往往是根据精度要求来求,因此我不能知具体循次数,

以目一般用Do循,很少用For循。

定循量和通量,注意各量的初

 

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

3)如果步2中有的因子比复,以直接用量表示,此可以考使用

Function程;

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

5)根据精度要求(往往是通小于10多少次方一个关系表达式),写出一

条足精度要求后跳出循的句。

通常是用:

if通表达式>10^(-N)thenexitdo,

注意句一般需放在累加或者乘式之前。

例明

以2002年春上机卷06程例根据X算:

 

n=1,2,⋯⋯

要求:

n小于等于10-6止。

1、由于循次数不确定,因此确定用Do循构并定循量用n表示(初

1);用入的用x表示;通用dblCos表示;累加用sum表示,初0;

2、分解通式的成

 

可以分解为三部分:

 

可以表示为:

(-1)^(n+1)

 

可以表示为:

x^(2*(n-1))

 

比较复杂,难以直接表示

 

3、由于步骤

 

2中

 

复杂,此时考虑使用过程。

 

于是定义过程,输入值是于是有:

 

n,返回值是

privateFunctioncomp(naslong)aslong

dimIaslong

dimresultaslong

result=1‘此处注意,由于是连乘,初值为

forI=1to2*(n-1)

result=result*I

nextI

comp=result

EndFunction

 

1

注意:

由于是参数按地址传递,因此对于本题,实参的值不能在过程中被改变!

是改错题常考的地方!

4、根据步骤1、2、3,写出通项dblCos的表达式:

dblCos=(-1)^(n+1)*x^(2*(n-1))/comp(n)

(也

5、根据精度要求知:

Ifabs(dblCos)<=10^(-6)

 

thenexitdo

最后程序为:

PrivateSubCommand1_Click()

DimnAsLong,dblCosAsDouble,

 

xAsDouble

x=Val(Text1.Text)

n=1

Do

dblCos=(-1)^(n+1)*x^(2*(n-1))

IfAbs(dblCos)<=10^(-6)ThenExitDo

Sum=Sum+dblCos

n=n+1

Loop

PrintSum

EndSub

PrivateFunctioncomp(nAsLong)AsLong

DimIAsLong

DimresultAsLong

result=1'此处注意,由于是连乘,初值为1

/comp(n)

 

ForI=1To2*(n-1)

result=result*I

NextI

comp=result

EndFunction

注意:

如果运行死循,可以按Ctrl+Break中断死循,不需要重新启机器。

(或者Ctrl+ScrollLock)

2、

1)充代(2003秋二(7))

本程序的功能是求下面数列前

n之和。

S(x,n)=x/2+2!

*x^3/2*4+3

*x^5/2*4*6+

⋯⋯+n!

*x^2n-1/2*4*6

⋯⋯2n

OptionExplicit

PrivateSubCommand1_Click()

DimxAsSingle,sAsSingle

DimnAsInteger,iAsInteger

x=InputBox("入X:

","求数列和",1)

n=InputBox("入N:

","求数列和",1)

Fori=1Ton

s=s+fun(x,i)

Nexti

Label1.Caption=_

(1)_

Text1=s

EndSub

PrivateFunctionfun(xAsSingle,nAsInteger)AsSingle__

(2)__

p=1

Fori=1Ton

__(3)___

Nexti

fun=x^(2*n-1)*p

EndFunction

2)程(2003春上机卷03)

按下列公式写求分余弦函数的程序。

当通小于10-5停止算。

 

计算机二级考试VB常用算法:

排序

(1)

 

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

 

程序代码如下:

PrivateSubxzPaiXu(a()AsDouble,shengAsBoolean)

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

DimiAsInteger,jAsInteger

DimtempAsDouble

DimmAsInteger

Fori=LBound(a)ToUBound(a)-1'进行数组大小-1轮比较

m=i'在第i轮比较时,假定第i个元素为最值元素,m记录小值元素的数组下标

Forj=i+1ToUBound(a)'在剩下的元素中找出最值元素的下标并记录在m中

IfshengThen'若为升序,则m记录最小元素下标,否则记录最大元素下标

Ifa(j)

Else

Ifa(j)>a(m)Thenm=j

EndIf

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

temp=a(i)

a(i)=a(m)

a(m)=temp

Nexti

EndSub

 

调用该过程示例:

OptionBase1

PrivateSubCommand1_Click()

Dimb(6)AsDouble

b

(1)=8

b

(2)=6

b(3)=9

b(4)=3

b(5)=2

b(6)=7

 

CallxzPaiXu(b,True)

Fori%=1To6

Printb(i)

Next

EndSub

 

计算机二级考试VB常用算法:

排序

(2)

 

2)冒泡法排序

排序法在每一排序找最元素的下,出了内循(一排序束)

,再交最小

数的位置;而冒泡

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1