计算机二级考试VB常用算法难点Word文档下载推荐.docx

上传人:b****6 文档编号:19594526 上传时间:2023-01-08 格式:DOCX 页数:21 大小:120.88KB
下载 相关 举报
计算机二级考试VB常用算法难点Word文档下载推荐.docx_第1页
第1页 / 共21页
计算机二级考试VB常用算法难点Word文档下载推荐.docx_第2页
第2页 / 共21页
计算机二级考试VB常用算法难点Word文档下载推荐.docx_第3页
第3页 / 共21页
计算机二级考试VB常用算法难点Word文档下载推荐.docx_第4页
第4页 / 共21页
计算机二级考试VB常用算法难点Word文档下载推荐.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

计算机二级考试VB常用算法难点Word文档下载推荐.docx

《计算机二级考试VB常用算法难点Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机二级考试VB常用算法难点Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。

计算机二级考试VB常用算法难点Word文档下载推荐.docx

DimtempAsLong

Ifm<

nThentemp=m:

m=n:

n=temp

DimrAsLong

Do

r=mModn

Ifr=0ThenExitDo

m=n

n=r

Loop

GCD=n

EndFunction

2) 

最小公倍数

最大公约数

3) 

互质数

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

解题技巧

该算法需要识记!

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

2、实战练习

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

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

OptionExplicit

PrivateFunctiongcd( 

(1) 

)AsInteger

DimrAsInteger

Ifr=0Then

gcd=n

Else

(2) 

EndIf

PrivateSubCommand1_Click()

DimnAsInteger,pAsInteger

n=Val(Text1)

Forp=n-1To2Step-1

If 

(3) 

ThenList1.AddItemp

Nextp

EndSub

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

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

用初值X1=26及公式Xi+1=(25×

Xi+357)Mod1024,产生一个数列:

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

其中X1~X8作为A的第一行元素;

X9~X16作为A的第二行元素;

A的第三行元素值取前两行同列元素的最大公约数。

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

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

进制转化

十进制正整数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,依次类推,然后放到转换后字符串的前面(实现反序排列)

StrDtoR=n&

StrDtoR

Tran=StrDtoR

EndFunction 

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("

)+10‘将字母A转换为10,B转换为11,….

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

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

Nexti

Tran=dec

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

1) 

补充代码(2002秋二(9))

本程序是把给定的二进制整数转换为八进制整数。

DimaAsString,bAsString,cAsString

DimLAsInteger,mAsInteger,nAsInteger

a=InputBox("

请输入一个二进制数"

"

输入框"

a=String(L,"

0"

)&

a

Form=1Ton/3

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

Nextm

Text1.Text=c

PrivateFunctionzh(sAsString)AsString

DimiAsInteger,nAsInteger,pAsInteger

p=1

Fori=2To0Step-1

(4) 

p=p+1

zh=Str(n)

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

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

PrivateSubForm_Click()

DimStAsInteger,DemAsLong

St=InputBox("

输入一个十六进制数"

Dem=Convert(St)

PrintSt;

"

="

;

Dem

PrivateFunctionConvert(SAsString)AsLong

DimNAsInteger,IAsInteger,SubstringAsString*1

DimPAslong,KAsLong,Asc1AsInteger

N= 

P=16^N

ForI=1ToN

P=P/16

Substring= 

SelectCaseSubstring

Case"

To"

9"

K=K+P*Val(Substring)

Case 

Asc1=Asc(Substring)-Asc("

)+10

EndSelect

NextI

(5) 

素数

素数(质数):

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

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

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

PrivateFunctionsushu(ByValnAsLong)AsBoolean

DimiAsLong

Fori=2Ton-1

If(nModi)=0ThenExitFor

NextI

IfI=nthensushu=True

EndFunction

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

Fori=2Ton–1

为:

Fori=2Toint(sqr(m))

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

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

应用举例

求100-200之内素数。

PrivateSubCommand1_Click()

DimjAsInteger

Forj=100To200

Ifsushu(j)=TrueThen

Printj

Nextj

EndSub

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

实例说明

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

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

思路:

首先找10000以内的所有素数,对于每个素数判断其是否可以表示为两个平方数之和(即对于任意小于该素数shu的数I,如果I和shu-I均为平方数,则说明其可以表示为两个平方数之和。

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

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

DimmAsLong,nAsLong

Forj=2To10000

Ifpf(j,m,n)=TrueThen

List1.AddItemj&

&

m&

+"

n

PrivateFunctionpf(ByValshuAsLong,mAsLong,nAsLong)AsBoolean

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

Next

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

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

最值问题

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

求最小值的方法类同。

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

应用举例

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

PrivateSubCommand1_Click()

DimnAsInteger,iAsInteger,minAsInteger,maxAsInteger,averAsSingle,sAsInteger

n=Val(InputBox("

输入个数:

"

))

s=Int(Rnd*100)+1

max=s

min=s

aver=s

Print"

第1个数是:

s

Fori=2Ton

第"

i&

个数是:

Ifs>

maxThenmax=s

Ifs<

minThenmin=s

aver=aver+s

Nexti

aver=aver/n

max="

max;

min="

min;

aver="

aver

EndSub

解题技巧

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

有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。

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

(1):

累加和连乘

   

累加形式:

V=V+e

连乘形式:

V=V*e

其中:

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

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

注意:

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

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

连乘时置初值为1.

举例

求N!

的结果。

Dimn%,i%,s&

输入n"

))

s=1

Fori=1Ton

s=s*i

Prints

错误的写法:

s=1 

‘赋初值语句位置不对!

Prints 

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

应用举例

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

  

要求:

误差小于0.00001

Dimi%,n&

,t!

,e!

e=2

i=1

t=1

DoWhilet>

0.00001

i=i+1

t=t/i

e=e+t

计算了"

i;

项目和是:

e

PrintExp

(1) 

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

解题技巧

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,返回值是

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

当前位置:首页 > 高等教育 > 法学

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

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