江苏省计算机等级考试常考算法过程集Word文档格式.docx
- 文档编号:18470544
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:15
- 大小:25.23KB
江苏省计算机等级考试常考算法过程集Word文档格式.docx
《江苏省计算机等级考试常考算法过程集Word文档格式.docx》由会员分享,可在线阅读,更多相关《江苏省计算机等级考试常考算法过程集Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
n是要判断的数,当n为素数时函数返回值为True,当n为不是素数时函数返回值为False。
4.求解n以内的所有素数并放入数组A中
PrivateSubprime(nAsInteger,a()AsInteger)
DimiAsInteger,jAsInteger,idxAsInteger
Fori=2Ton
Forj=2ToSqr(i)
IfiModj=0ThenExitFor
Nextj
Ifj>
Sqr(i)Then
idx=idx+1
ReDimPreservea(idx)
a(idx)=i
n以内所有的素数均放入数组A中。
5.求最大公约数
递归方法求最大公约数
PrivateFunctionGcd(ByValmAsLong,ByValnAsLong)asLong
DimRAsLong
R=mModn
IfR=0Then
Gcd=n
Else
m=n
n=R
Gcd=Gcd(m,n)
辗转相除法(欧几里德算法)求两个自然数的最大公约数(普通方法)
PrivateFunctionGcd(ByValaAsLong,ByValbAsLong)AsLong
R=aModb
DoWhileR<
>
0
a=b
b=R
Gcd=b
A和B是要求解最大公约数的两个自然数,函数的返回值是A和B的最大公约数。
6.求最小公倍数
第一种方法是用a的n倍去除b,当能够整除时,则n*a为所求最小公倍数。
PrivateFunctionLCM(ByValaAsInteger,ByValbAsInteger)asLong
DimMAsLong,FlgAsBoolean
Flg=False
DoUntilFlg
M=M+a
IfMModb=0Then
Flg=True
LCM=M
或可写成如下形式:
DimIAsLong
ForI=aToa*bstepa
IfImodb=0Then
LCM=I
ExitFunction
NextI
第二种方法是先求出a,b的最大公约数c,然后用a*b/c,求得a,b的最小公倍数。
PrivateFunctionLCM(ByValaAsInteger,ByValbAsInteger)AsLong
DimrAsLong,mAsLong
m=a*b
r=aModb
DoWhiler<
b=r
LCM=m/b
7.求除乘
第一种方法采用递归过程加以实现
PrivateFunctionfact(nAsInteger)AsLong
Ifn<
=1Then
fact=1
fact=n*fact(n-1)
第二种方法采用累乘积的方法加以实现
Fori=1Ton
fact=fact*i
8.求最简分数
最简分数:
分子、分母只有公因数1的分数叫做最简分数或者说分子和分母是互质数
的分数叫做最简分数。
如:
2/3,8/9,3/8,3/5……等等。
最简分数又叫既约分数,既约分数可理解成已经约分过的分数,也就是分子和分母是互质数
的分数。
假分数虽然是大于1或等于1的分数,但也可以是最简分数。
真分数:
分子小于分母的分数;
四分之三,一百二十三分之六。
真分数一般是最简分数。
PrivateSubdivisor(fzAsLong,fmAsLong)
DimminAsLong,kAsLong
Iffm<
fzThenmin=fzElsemin=fm
Fork=2Tomin
DoWhilefzModk=0AndfmModk=0
fz=fz/k
fm=fm/k
Nextk
9.判断一对整数是否是互质数
PrivateFunctionmutual_prime(n1AsLong,n2AsLong)AsBoolean
Ifn1<
n2Thenmin=n1Elsemin=n2
Fork=2Tomin/2
Ifn1Modk=0Andn2Modk=0ThenExitFunction
mutual_prime=True
10.判断一个数是否为降序数
降序数就是从高位到低位逐渐减小,即高位数一定大于低位数。
PrivateFunctionorder(sAsInteger)AsBoolean
Dimb()AsInteger,nAsInteger,iAsInteger
n=Len(CStr(s))
ReDimPreserveb(i)
b(i)=sMod10
s=s\10
Fori=1Ton-1
Ifb(i)>
b(i+1)ThenExitFunction
order=True
注:
当把程序中的“>
”改成“<
”时,可判断一个数是否为升序数。
11.分解数字
PrivateSubdvnum(ByValmAsLong,a()AsInteger)
DimiAsInteger,lengthAsInteger
length=Len(CStr(m))
ReDima(length)
Fori=1Tolength
a(i)=mMod10
m=m\10
12.验证回文数
PrivateFunctionfw(ByValnAsLong)AsBoolean
Dimlen1AsInteger,flgAsBoolean,iAsInteger,str1AsString
str1=CStr(n)
len1=Len(str1)
Fori=1Tolen1/2
IfMid(str1,i,1)<
Mid(str1,len1-i+1,1)Then
flg=False
fw=True
EndFunction
类似问题:
判断一个字符串是否为回文串
PrivateFunctionHW(strAsString)AsBoolean
DimiAsInteger,LAsInteger
L=Len(str)
HW=False
Fori=1ToL\2
IfMid(str,i,1)<
Mid(str,L-i+1,1)ThenExitFunction
HW=True
str是需要判断的字符串,当str为回文串时函数返回值为True,当str不是回文串时函数返回值为False。
13.求反序数
PrivateFunctionreverse_num(ByValnAsLong)AsLong
Do
reverse_num=reverse_num*10+(nMod10)
n=n\10
LoopWhilen>
14.十进制正整数向r进制转换
PrivateFunctionTran(ByValmAsInteger,ByValrAsInteger)AsString
DimStrDtoRAsString,nAsInteger
DoWhilem<
n=mModr
m=m\r
Ifn>
9Then
StrDtoR=Chr(65+n-10)&
StrDtoR
StrDtoR=n&
Tran=StrDtoR
m是要转换的十进制数,函数返回值是转换成的r进制数。
15.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
n=Val(Mid(s,i,1))
dec=dec+n*r^(Len(s)-i)
Tran=dec
16.排序算法
直接选择法排序
PrivateSubchoose(a()AsInteger)'
本过程排序结果为从小到大
DimiAsInteger,jAsInteger
DimtempAsInteger
Fori=1ToUBound(a)-1
Forj=i+1ToUBound(a)
Ifa(i)>
a(j)Then
temp=a(i)
a(i)=a(j)
a(j)=temp
改进的选择法排序
PrivateSubnsort(sort()AsInteger)'
本过程排序结果为从大到小
DimtempAsInteger
DimpointerAsInteger'
记录每一轮的最小值下标,可理解为指针,用于指向最小值
Fori=1ToUBound(sort)-1
pointer=i
Forj=i+1ToUBound(sort)
Ifsort(pointer)<
sort(j)Then
pointer=j
Nextj
Ifi<
pointerThen
temp=sort(m)'
一轮结束,m指向本轮次最小值,
sort(m)=sort(i)'
把m指向元素与本轮次第一个元素进行交换
sort(i)=temp
Sub子过程choose及nsort的功能一样,都是对形参数组进行排序,当子过程运行结束时,对应的实参数组即完成排序工作。
改进后的选择排序算法减少了数据交换的次数,提高了运行效率。
冒泡法排序
PrivateSubBubble_Sort(Sort()AsInteger)
DimIAsInteger,JAsInteger,TemAsInteger
DimUbAsInteger
Ub=UBound(Sort)
ForI=1ToUb-1
ForJ=1ToUb-I
IfSort(J)>
Sort(J+1)Then'
为升序,<
为降序
Tem=Sort(J)
Sort(J)=Sort(J+1)
Sort(J+1)=Tem
NextJ
NextI
改进的冒泡法排序
DimIAsInteger,TemAsInteger
DimUbAsInteger,SwitchAsBoolean
Switch=True
DoWhileSwitch
Switch=False
Ub=Ub-1'
最大下标依次减1
ForI=1ToUb
IfSort(I)>
Sort(I+1)Then
Tem=Sort(I)
Sort(I)=Sort(I+1)
Sort(I+1)=Tem
直接插入排序(升序)
PrivateSubInsertion(Sort()AsInteger)
DimKAsInteger,IAsInteger,TempAsInteger
ForI=2ToUb
Temp=Sort(I)
K=I-1
DoWhileTemp<
Sort(K)
Sort(K+1)=Sort(K)
K=K-1
IfK<
=0ThenExitDo
Sort(K+1)=Temp
函数的功能是使用直接插入排序算法对形参数组A进行排序(升序)。
17.顺序法查找
PrivateFunctionSequentialSearch(a()AsInteger,FindAsInteger,posAsInteger)AsBoolean
DimIAsInteger
ForI=1ToUBound(a)
Ifa(I)=FindThenExitFor
IfI<
=UBound(a)Then
SequentialSearch=True
pos=I
SequentialSearch=False
pos=-1
函数的功能是在数组a中查找有无指定的数Find存在,如果存在则函数返回值为True,否则返回值为False。
另外,如果找到指定数,其在数列中的位置序号经形参pos返回。
18.二分法查找
PrivateFunctionBinarySearch(a()AsInteger,FindAsInteger,posAsInteger)AsBoolean
DimleftAsInteger,rightAsInteger,midAsInteger
BinarySearch=False
left=LBound(a):
right=UBound(a)
DoWhileleft<
=right
mid=(left+right)/2
Ifa(mid)=FindThen
BinarySearch=True
pos=mid
ElseIfFind>
a(mid)Then
left=mid+1
right=right-1
说明:
函数功能是在数组a中查找指定数Find,找到时函数的返回值为True,否则返回False。
二分查找法每次查找后都将查找区间缩小一半,查找效率较高。
但必须将数组a事先排序。
19.删除一个数列中的重复数
PrivateSubDelDuplication(a()AsInteger)
DimUbAsInteger,nAsInteger,iAsInteger,jAsInteger
Ub=UBound(a)
n=1
DoWhilen<
Ub'
外循环从第一个元素开始逐一查重
i=n+1
=Ub'
内循环从第n个元素的下一个元素开始逐一与第i个元素比较
Ifa(n)=a(i)Then'
如果存在重复元素
Forj=iToUb-1'
重复元素后面的元素整体前移,覆盖掉重复元素
a(j)=a(j+1)
元素个数-1
ReDimPreservea(Ub)'
重定义数组,减少元素空间
i=i+1'
如果不存在重复元素,则继续向后查找
n=n+1'
继续对第n+1个元素进行查重处理
函数的功能是删除数组A中的重复数。
当函数运行结束时,形参数组中已经无重复数。
20.求解一组数中的最大值、最小值
PrivateSubMaxMin(a()AsSingle,maxAsSingle,minAsSingle)
max=a
(1):
min=a
(1)
Fori=2ToUBound(a)
maxThen
max=a(i)
ElseIfa(i)<
minThen
min=a(i)
数组A用于存放一组数,参数max返回该组数中的最大值,参数min返回该组数中的最小值。
21.利用牛顿迭代法求解一元超越方程
假设需要求解的方程为:
xex-1=0
牛顿迭代公式为:
xn+1=xn-f(xn)/f’(xn),n=0,1,2,3…
PrivateFunctionDieDai(ByValxAsSingle,ByValepsAsSingle)AsSingle
Dimx1AsSingle
x1=x
x=x1-(x1*Exp(x1)-1)/(Exp(x1)*(x1+1))
LoopUntilAbs(x-x1)<
=eps
DieDai=x
x是方程的初始根,Eps是允许的误差值,函数的返回值是方程在误差范围内的近似根。
22.利用级数法编程求解arcsinx的函数值
PrivateFunctionafun(ByValxAsSingle,ByValnAsInteger)AsSingle
DimiAsInteger,pAsSingle
p=1
p=p*(2*i-1)/(2*i)
afun=p*x^(2*n+1)/(2*n+1)
PrivateFunctionarcsinx(ByValxAsSingle,ByValepsAsSingle)AsSingle
DimsAsSingle,nAsInteger,aAsSingle
s=x:
a=afun(x,n)
Ifa<
=epsThenExitDo
s=s+a
arcsinx=s
函数afun
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 江苏省 计算机等级考试 算法 过程