VB对分查找专题Word格式文档下载.doc
- 文档编号:13197275
- 上传时间:2022-10-08
- 格式:DOC
- 页数:4
- 大小:525.40KB
VB对分查找专题Word格式文档下载.doc
《VB对分查找专题Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《VB对分查找专题Word格式文档下载.doc(4页珍藏版)》请在冰豆网上搜索。
Key=val(text1.text)
Fori=1tonstep1
Ifa(i)=keythen
label1.caption=”在数组第”+str(i)+”位置上找到数据”+str(key)
Exitfor’标准代码,退出循环
Endif
Nexti
Ifi=n+1thenlabel1.caption=”没有找到!
”‘所有位置找一遍,没找到;
“i=n+1”可改为“i>
n”
4、顺序查找算法经典程序:
(输入输出视具体情况而定)
Key=val(text1.text):
i=1:
f=false‘boolean类型的变量f记录是否找打
Dowhilei<
=nandf=false‘f=false可以写成notf
f=true
label1.caption=”在数组第”+str(i)+”位置上找到数据”+str(key)
i=i+1
”‘所有位置找一遍,没找到;
n”或“notf”
5、对分查找算法:
又名二分查找,高效,但前提是背查找的数据必须是有序的。
在有序的一组数据中,先将处于中间位置的数据与查找数据比较,若相等则提示成功;
否则根据数组的有序性(升序或降序)判断要查找的数据在前半部分还是后半部分,然后缩小范围按以上方法继续查找,直到找到或找一遍发现数据不存在。
6、关于对分查找需理解:
※到N个数据中用经典对分查找某数,最少查找次数1,最多查找次数int(log2n)+1,平均查找次数为:
※被查找的一组数据必须是有序的,查找过程中注意其升序还是降序。
※查找次数不定,一般用dowhile语句实现循环,请部分同学尝试将语句改为用for语句实现。
7、对分查找经典算法:
(被查找数据以升序为例)
Key=val(text1.text):
i=1:
j=n:
f=false
=jandf=false
m=(i+j)\2‘可改为m=int((i+j)/2),m有非常多的变式,请注意题中书写
Ifa(m)=keythen
f=true:
Elseifkey<
a(m)then‘需要查找的值到前半段找,前半段的尾位置是中值-1
j=m-1
Else‘可改为elseifkey>
a(m)then
i=m+1‘需要查找的值到后半段找,后半段的首位置是中值+1
Endif
Loop‘三个循环变量已经在各自的分支结构中处理
Ifi>
jthenlabel1.caption=”没有找到!
”‘i>
j可改为f=false
巩固练习
1、在数组22、54、7、61、33、9、15中查找数字9,采用从后往前顺序查找,需要查找()
A.2次B.6次C.1次D.7次
2、数组a(1to6)中保存的字符串依次为oil,car,boe,all,web,log,在数组中查找”boy”,执行知识点回顾4中顺序查找经典算法结果是()
A.没有找到B.在数组第1位置上找到数据boy
C.在数组第3位置上找到数据boyD.在数组第6位置上找到数据boy
3、小海同学用VB设计了一个模拟高考查分系统的软件。
主要算法思路是:
考生录入身份证和登陆密码,若身份证号码存在且密码输入正确,就显示高考成绩。
其中,所有同学身份证号码保存在idc(1ton)数组中,数组pas(1ton)和scr(1ton)分别存储对应考生的登入密码和考试成绩——即第i个学生的身份证号为idc(i),相应的登入密码和考试成绩分别为pas(i),scr(i)。
部分代码如下,请改错和填空。
Privatesubcommand1_click()
Dimtasinteger
Dimkey,log,asstring
Key=text1.text
Log=text2.text
t=1:
f=true
Dowhilefandt<
=n-1
Ifthen
Label1.caption=“你的考分是:
”+
f=false
Endif
t=t+1
Loop
iff=thenlabel1.caption=“输入账号密码有误,请确认再输”
4、在数组序号0到序号11中查找某个数,采用经典对分查找法,第一次应查找的数组序号是()A.0B.5C.6D.11
用对分法查找数组A(1to100),如果输入要查找的数不在A这个数组中,则要查找()
A.6次B.7次C.8次D.9次
5、有一个数组,元素为all,car,joe,log,oil,web,若要查找log需要比对次,查找中依次比对的元素顺序是
6、有如下VisualBasic程序段:
Dimiasinteger,jasinteger,masinteger
i=0:
j=8:
k=val(text1.text)
Dowhile(i<
=j)
m=fix((i+j)/2)
Ifk=b(m)then
Exitdo
Else
Ifk<
b(m)thenj=mElsei=m+1
数组元素b(0)到b(8)存储着参加比赛同学的编号,依次为:
“5,8,11,21,32,39,56,65,72”,经过该程序段“加工”查找编号为8号同学的过程中,依次被访问到的编号是()
A.32118B.218C.328D.39218
7、已知一无序数组a(下标1到n),通过引入数组b(下标1到n),使得a(b
(1))≤a(b
(2))≤a(b(3))……≤a(b(n))(示例如图所示),对这些有序数据可进行对分查找。
则第一次查找时,中点位置m与中点值分别是()
A.m的值是int((1+n)/2),中点值是a(m)
B.m的值是Fix((b
(1))+b(n))/2),中点值是a(b(m))
C.m的值是int((b
(1))+b(n))/2),中点值是a(m)
D.m的值是Fix((1+n)/2),中点值是a(b(m))
8、在一次学校的运动会上,高一女子100米决赛的成绩已出,前8名的成绩记录单由于不小心丢掉一张,剩下的7张已按成绩排序,分别是(单位:
秒)14.5,15.1,16.5,16.8,17.1,17.5,17.9。
后来找到了成绩单,请将找到的成绩插入相应位置,是数据序列仍然保持有序,并求出该成绩的名次。
部分代码如下,请将画线处填充完整。
Dima(1to8)assingle‘已将7个成绩按给定顺序存入数组a(1to7)、
Dimxassingle
Dimi,j,m,kasinteger
x=val(text1.text):
j=8
Dowhile
M=(i+j)\2
Iftheni=m+1Else
Fork=i+1to8
’提示:
结束时i的位置即为该成绩名次,将该位置及之后成绩后移一位
Nextk
‘提示:
将查找的成绩保存至空出的位置中
’输出部分的代码省略
Endsub
9、编写VB程序,实现如下功能:
在文本框Text1中输入一个整数,单击“查找删除”按钮Command1,采用对分查找法在数组A(从小到大排列,并显示在标签Label1中)中查找该数。
若找到,则从数组A中删除该数(该数后面的数组元素都前移一位),并在标签Label2中显示删除后的结果(运行效果如图所示);
否则,在标签Label2中显示“该数没有找到”。
实现上述功能的VB代码如下,改正下划线处的错误并填空。
DimA(1To10)AsInteger’用于保存10个按从小到大顺序排列的整数
’Form_Load事件过程产生10个整数,按升序保存在数组A中,并在标签Label1中显示
PrivateSubForm_Load()
’代码略
EndSub
PrivateSubCommand1_Click()
DimIAsInteger
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 查找 专题