完整word版计算机二级考试VB常用算法难点.docx
- 文档编号:11383971
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:26
- 大小:120.80KB
完整word版计算机二级考试VB常用算法难点.docx
《完整word版计算机二级考试VB常用算法难点.docx》由会员分享,可在线阅读,更多相关《完整word版计算机二级考试VB常用算法难点.docx(26页珍藏版)》请在冰豆网上搜索。
完整word版计算机二级考试VB常用算法难点
计算机二级考试VB常用算法:
约数因子
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=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‘将字母A转换为10,B转换为11,…. 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,bAsString,cAsString DimLAsInteger,mAsInteger,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,DemAsLong 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依次判别能否被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 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,sAsInteger n=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,返回
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 计算机 二级 考试 VB 常用 算法 难点