创新高三一轮复习选考总复习信息技术讲义必修3第二章算法的程序实现_第1页
创新高三一轮复习选考总复习信息技术讲义必修3第二章算法的程序实现_第2页
创新高三一轮复习选考总复习信息技术讲义必修3第二章算法的程序实现_第3页
创新高三一轮复习选考总复习信息技术讲义必修3第二章算法的程序实现_第4页
创新高三一轮复习选考总复习信息技术讲义必修3第二章算法的程序实现_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章算法的程序实现[考试标准]考试内容考试要求考试属性1.枚举算法及程序实现c加试2.解析算法及程序实现c3.排序算法及程序实现(1)冒泡排序(2)选择排序c4.查找算法及程序实现(1)顺序查找(2)对分查找c5.递归算法a6.VB访问Access数据库(1)通过ADO对象连接数据库(2)通过Recordset对象获取数据表中的数据a一、排序算法及程序实现1.排序的含义及方式(1)所谓排序就是将无序的数列变成有序的数列。(2)排列方式分为升序(也称递增,即从小到大排列)和降序(也称递减,即从大到小排列)。2.冒泡排序(1)冒泡排序基本思想将n个数据看作竖向排列的一组数据,每趟排序自下而上对每对相邻数据进行比较,若次序不符合要求就进行交换,每趟排序结束时都能使排序范围内关键字最小的记录像一个气泡一样升到上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最小、次小……的各个数据冒到表的第一个、第二个……位置上。用冒泡排序对n个数据进行排序时,共需进行n-1趟排序,比较的总次数为eq\f(n(n-1),2)。(2)冒泡排序程序实现说明:要排序的n个数据已存放d数组中,以升序为例的程序如下:Fori=1Ton-1′n个数排序共需进行n-1趟Forj=nToi+1Step-1′每一趟从后往前,相邻两数两两比较Ifd(j)<d(j-1)Then′若满足条件则进行互换temp=d(j)d(j)=d(j-1)d(j-1)=tempEndIfNextjNexti若要按降序排列,只需将程序中的语句“Ifd(j)<d(j-1)Then”改为“Ifd(j)>d(j-1)Then”即可。3.选择排序(1)选择排序的基本思想每趟排序是在所有的数据中找出最小(或最大)的数据,使它与第一个数据相互交换位置,然后再在剩下的数据中找出最小(或最大)的数据,与第二个数据相互交换位置,以此类推,直到所有元素成为一个有序序列。(2)选择排序的程序实现说明:要排序的n个数据已存放d数组中。以升序为例的程序如下:Fori=1Ton-1′n个排序共进行n-1趟排序k=i′第i趟排序时,首先用k记录iForj=i+1Ton′k位置上的数依次与j位置上的数进行比较Ifd(k)>d(j)Thenk=j′若找到比k位置上更小的数,则更新k的值NextjIfk<>iThen′若i位置上的数不是最小数,则和k位置上的数进行互换temp=d(i)d(i)=d(k)d(k)=tempEndIfNexti若要按降序排列,只要将语句Ifd(k)>d(j)Thenk=j改成Ifd(k)<d(j-1)Thenk=j即可。二、查找算法及程序实现1.查找算法所谓查找就是在指定的数据中寻找某一特定的数据。查找结果有两种,即找到(查找成功)和未找到(查找失败)。2.顺序查找(1)顺序查找的基本思想从第一个数据开始,从左往右(或从上到下)将数据按顺序逐个与给定的值进行比较,若某个数据和给定值相等,则查找成功,找到并输出所查数据的位置;反之,查找失败。若有n个数,则可能的最多查找次数为n。(2)顺序查找算法基本框架设要查找的数为key,待查找的数存放在数组d中。For语句框架:Fori=1ton若d(i)=key,则表示找到,做相应处理Nexti若i>n表示未找到DoWhile语句框架:i=1Dowhilei<=n若d(i)=key,则表示找到,做相应处理i=i+1Loop若i>n表示未找到(3)顺序查找的程序实现在n个数组元素中依次查找,找到第1个满足条件的值,查找即结束,输出找到元素所在的位置;若找不到,输出“未找到”。程序实现:设要查找的数据是key(在文本框Text1中输入),查找的数据存放在数组d中。pos为找到数的位置,pos=0表示未找到。P表示查找的次数。key=Val(Text1.Text)′Val要根据实际情况决定是否要添加p=0pos=0find=False′find表示查找结果i=1DoWhilei<=nAndNotfind′表示还没找完并且还未找到,则继续查找,Notfind也可表示为find=falsep=p+1Ifkey=d(i)Thenpos=ifind=TrueEndIfi=i+1LoopIffindThen′也可表示为Iffind=truethenText2.Text=”在d(”+Str(pos)+”)中”ElseText2.Text=“未找到”EndIf3.对分查找(1)对分查找的基本思想在有序的数据序列中(一般存放在数组中),首先把要查找的数据与数组中间位置的元素进行比较,如果相等,则查找成功并退出查找;否则,根据数组元素的有序性,确定数据应在数组的前半部分还是在后半部分查找;在确定了新的查找范围后,重复进行以上比较,直到找到或未找到为止。①对分查找的前提是被查找的数据序列必须是有序。②“未找到”是指当指定范围内的起点大于终点仍未找到该数据。(2)对分查找算法基本框架说明:要查找的数为key,待查找的数存放在数组d中。i为查找范围的起点,j为查找范围的终点,m为范围[i,j]的中间位置。i=1j=nDoWhilei<=j计算中点位置m比较key与d(m),并做相应处理Loop若i>j,则表示未找到(3)对分查找程序实现在n个数组元素中依次查找,找到第1个满足条件的值,查找就结束,输出找到元素所在的位置;若找不到,输出“未找到”。程序实现:设要查找的数据是key(在文本框Text1中输入),查找的数据存放在数组d中。在文本框Text2中输出查找结果,若找到输出“找到!位置为:X”,否则输出“未找到!”在文本框Text3中输出共查找的次数。p表示查找的次数。核心代码为(以升序为例):key=Val(Text1.Text)′表示要查找的数p=0′表示查找的次数find=False′查找的结果,若find=true表示找到,find=false表示未找到i=1′查找的起始范围j=n′查找的终点范围DoWhilei<=jAndNotfind′如果还未找完并且未找到p=p+1′查找次数计数m=(i+j)\2′计算中点位置mIfkey=d(m)Then′表示找到的情况find=TrueText2.Text=”找到!位置为:”+Str(m)EndIfIfKey>d(m)Then’表示查找的数比中间位置上的数大时i=m+1Else’表示查找的数比中间位置上的数小时j=m-1EndIfLoopIfNotfindThenText2.Text=”未找到!”Text3.Text=”共查找的次数为:”+Str(p)计算中点位置的语句还可以写成:m=Int((i+j)/2)或m=Fix((i+j)/2)。三、递归算法1.递归的概念函数或过程调用其本身,称为递归。2.递归算法的基本思想递归算法的基本思想是把规模较大的、较难解决的问题变成规模较小的、容易解决的同一问题,规模较小的问题又变成规模更小的问题,直到可以直接得出它的解,从而得到原来问题的解。3.采用递归算法须具备的条件(1)每一步骤解决问题的方法要一致。(2)要有结束的边界条件。四、Connection对象用Connection建立和数据库的连接时,首先创建一组ADO对象用于设置打开连接和产生结果集,需要设置连接字符串ConnectionString的参数。下列语句定义一个Connection对象的实例conn,conn是实例的名称,命名规则与VB变量定义相同,并设置conn的连接字符串:DimconnAsNewADODB.ConnectionDimabcAsNewADODB.Recordsetconn.ConnectionString=”Provider=;DataSource=”&App.Path&”\souse1.accdb”其中,“Provider”用于指定连接的提供者,“DataSource”用于指定数据库的文件名(含绝对路径)。App.Path返回当前应用程序所在的绝对路径。Connection对象具有Open、Execute、Close等方法,其中Open方法用于建立到数据源的连接,Execute用于执行指定的查询、SQL语句或特定提供者的文本等内容,而Close方法则用于关闭连接。五、Recordset对象用Recordset对象从数据库中查询记录时,要设置ActiveConnection属性的值。语句Setabc.ActiveConnection=conn,使Recordset对象的实例abc与Connection对象的实例conn建立关联。在abc与conn建立关联后,可用Recordset对象的Open方法打开、查询数据表的记录。Open方法的参数为SQL命令。如:abc.Open“SELECT*FROMinfo”运行后,记录集abc中的数据为SQL语句“SELECT*FROMinfo”查询到的记录。同样,Recordset对象的Close方法用于关闭对象。Abc.close表示关闭记录集。Recordset对象的Fields集合用于返回当前记录中的数据,如:abc.Fields(”book”)返回当前记录中”book”字段的值;abc.Fields(0)返回当前记录中第一个字段的值,如果第一个字段名为“book”,则abc.Fields(0)与abc.Fields(“book”)返回值相同。例如Recordset对象实例abc打开了下表的记录集:Recordset对象打开的记录集:bookauthorpricePublishing平凡的世界路遥78.2海南人民出版社红楼梦曹雪芹53.6上海教育出版社假设当前记录为第2条记录,则Fields集合返回当前记录某个字段的数据有以下两种方法:(1)abc.Fields(字段序号),其中字段序号从0开始编号。(2)abc.Fields(“字段名称”)故abc.Fields(0)和abc.Fields(“book”)都返回“红楼梦”,abc.Fields(1)和abc.Fields(“author”)都返回“曹雪芹”,abc.Fields(2)和abc.Fields(“price”)都返回“53.6”,abc.Fields(3)和abc.Fields(“Publishing”)都返回“上海教育出版社”。通过Recordset对象从数据库中返回的这些数据可以通过数组的形式存储,以方便我们后序进行统计、排序、查找等处理。Recordset对象的AddNew方法为可更新的Recordset对象创建一个新记录,它添加一条新的空记录,并且定位在该记录上;Delete方法可将当前记录从记录集中删除;Edit方法可以编辑修改数据库的记录,注意首先要将需要编辑的记录成为当前记录,然后使用Edit方法修改记录内容,使用Edit方法后,再移动记录或者使用Update方法把数据存入到数据库中;Move方法可以使不同的记录成为当前记录,主要有5种使用方法:MoveFirst:移动到记录集的第一条记录。MoveLast:移动到记录集的最后一条记录。MoveNext:移动到记录集的下一条记录。MovePrevious:移动到记录集的上一条记录。Move:可以使用Move方法向前或向后移动若干条记录。但应注意:若到数据表结尾处还继续向下移动,程序会出错,因此在使用MoveNext时要判断Recordset的BOF和EOF属性,判断记录指针是不是到达首记录之前或尾记录之后。EOF取值为“True”时表示已经到达记录集的结尾,否则EOF的值为“False”。若BOF和EOF的取值均为“True”则表示此记录集为空。六、SQL:Select语句SELECT语句是结构化查询语言SQL中常见的语句,主要用于从数据表中查询数据,如语句“SELECT*FROMinfo”表示查询数据表“info”的全部数据。语句总结如下:(1)定义Connection对象的实例conn和Recordset对象的实例abc。DimconnAsNewADODB.ConnectionDimabcAsNewADODB.Recordset(2)为实例conn设置ConnectionString属性值。conn.ConnectionString=”Provider=;DATASource=”&App.Path&”\souse1.accdb”(3)打开与数据库的连接。conn.Open(4)建立实例abc与conn之间的关联。Setabc.ActiveConnection=conn(5)执行SELECT命令,将查询结果返回给abc。abc.Open”SELECT*FROMinfo”(6)在应用程序中引用abc中当前记录的字段值。Label1.Caption=abc.Fields(”book”)Label2.Caption=abc.Fields(”price”)(7)关闭记录集。Abc.close(8)关闭与数据库的连接。conn.Close【例1】(2016·10月浙江选考)小吴为了探究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:在列表框List1中显示排序前数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。程序运行界面如图所示。实现上述功能的VB程序如下,但加框处代码有错,请改正。Dima(1To8)AsIntegerDimnAsIntegerPrivateSubForm?Load()′n=8,排序前的8个数据存储在数组a中,并在列表框List1中显示′代码略EndSubPrivateSubCommand1­Click()DimiAsInteger,jAsInteger,kAsIntegerDimposAsInteger′变量pos存储指定数据的位置(即下标值)DimsAsString′变量s存储pos变化情况s=Text1.Textpos=Val(Text1.text)Fori=1Ton-1Forj=nToi+1Step-1Ifa(j)<a(j-1)Theneq\x(k=a(j))’(1)a(j-1)=a(j)a(j)=k′如果pos位置的数据参与交换,则更新pos值,记录pos变化情况Ifpos=jThenpos=j-1s=s+”→”+Str(pos)eq\x(Else)′(2)pos=js=s+”→”+Str(pos)EndIfEndIfNextjNextiLabel1.Caption=”位置变化情况:”+sFori=1TonList2.AddltemStr(a(i))NextiEndSub解析仔细阅读题干说明和程序及程序注释,先从整体判断各程序段功能及各变量的作用,再具体分析出错位置的程序行进行改错。(1)此位置程序段为冒泡排序相邻两个数据进行比较后,逆序的两数交换数据,即交换两个变量的值,分析后面两程序行,判断(1)方框处应该是“k=a(j-1)”。(2)阅读程序注释,(2)框处所在分支语句功能为“如果pos位置的数据参与交换,则更新pos值,记录pos变化情况”,这个是在外层的判断语句的基础之上进行的,即两个相邻数a(j)<a(j-1)成立,两个数进行了交换,然后对pos位置进行更新。Pos位置有两种情况:一个可能是在a(j)位置,另一个可能是在a(j-1)位置,既然两个数进行了交换,不管两种情况中的哪一种情况,两个位置都要进行交换。程序中ifpos=jthenpos=j-1只是判断处理了一种情况,另一种情况pos在a(j-1)位置(pos=j-1)还要判断处理。所以(2)框处程序应该修改为“ElseIfpos=j-1Then”。答案(1)k=a(j-1)(2)ElseIfpos=j-1Then[变式1]对10个数据进行冒泡排序,需要比较的次数是()A.90B.110C.45D.55解析本题要求对规模为10个的数据进行冒泡排序的比较次数。根据冒泡排序算法比较次数的计算方法可知,当n=10时,比较次数=10×(10-1)/2=45,所以选择答案C。答案C[变式2]对数组元素a(1)到a(6)进行降序排序,采用选择排序算法的某VB程序段如下:Form=1To5p=mForn=m+1To8Ifa(n)>a(p)Thenp=nNextnIfp<>mThen________Nextm当第一遍排序之后得到的数据序列为12,2,6,8,9,11。画线处中的语句是()A.t=p:p=m:m=tB.a(p)=a(m):a(p)=a(m)C.p=m:m=pD.t=a(p):a(p)=a(m):a(m)=t解析选择排序算法中,内层循环的部分用于找出m到5的数列中,最大的数,当发现之后,存储的是该数据的下标。当内存循环结束之后,发现在第m个位置上存放的不是最大数时,需要将两个数进行交换,而不是将下标进行互换。且交换的程序编写需要有第三个暂存变量来辅助存储。答案D[变式3]篮球联赛中,有5个班级的比赛积分依次为14,11,13,8,9。若采用冒泡排序算法对其进行从小到大排序,则完成第二遍时的结果是()A.8,11,13,14,9 B.8,9,13,14,11C.8,9,14,11,13 D.14,13,11,9,8解析从小到大冒泡排序的基本思想是从最后的一个元素起,自后向前比较相邻的两个数据,将较小的数据换到前面,较大的换到后面。重复这一过程,直到处理完最后两个数据,称为一遍加工。因此第一遍加工时,9和8,9不动;8和13,13换到后面,8换到前面;8和11,11换到后面,8换到前面;8和14,14换到后面,8换到前面。这是第一遍加工,结果是:8,14,11,13,9。第二遍加工时,9和13,13换到后面,9换到前面;9和11,1l换到后面,9换到前面;9和14,14换到后面,9换到前面。这是第二遍加工,结果是:8,9,14,11,13。答案C【例2】(2015·9月浙江选考模拟)采用如下选择排序算法对数组a中5个数据“23,86,98,65,2”按从小到大的顺序进行排序。Fori=1To4k=iForj=i+1To5Ifa(j)<a(k)Thenk=jNextjIfk<>iThent=a(i):a(i)=a(k):a(k)=tEndIfNexti整个排序过程中,数组中的数据比较次数和交换次数分别是()A.10次和3次B.10次和4次C.15次和3次D.15次和10次解析本题考查对VB冒泡排序算法的实现过程。第一遍排序时,比较4次,交换1次,数据变为“2,86,98,65,23”;第二遍排序时,比较3次,交换1次,数据变为“2,23,98,65,86”;第三遍排序时,比较2次,交换1次,数据变为“2,23,65,98,86”;第四遍排序时,比较1次,交换1次,数据变为“2,23,65,86,98”;合计数据比较10次,交换4次,选项B正确。答案B【例3】有如下VisualBasic程序段:m=a(1)i=2DoWhilei<=10Ifm<a(i)Thenm=a(i)i=i+1Loop该程序段执行后,变量m中存储的是()A.a(1)至a(10)中的最大值B.a(1)至a(10)中的最小值C.a(2)至a(10)中的最大值D.a(2)至a(10)中的最小值解析本题主要考查选择排序的核心代码:寻找最小值或最大值。m=a(1)i=2DoWhilei<=10Ifm<a(i)Thenm=a(i)i=i+1Loop⇨m=a(1)Fori=2to10Ifa(i)>mthenm=a(i)nexti先假设数组的第一项是最大的,并赋值给变量m,然后把从第二项开始的所有数组元素跟变量m进行比较,如果比m大,则把该元素赋值给m。这样循环结束后,变量m中存储的就是该数据中的最大值。答案A【例4】(2015·9月浙江高考模拟)采用如下选择排序算法对数组a中5个数据“23,86,98,65,2”按从小到大的顺序进行排序。Fori=1To4k=iForj=i+1To5Ifa(j)<a(k)Thenk=jNextjIfk<>iThent=a(i):a(i)=a(k):a(k)=tEndIfNexti整个排序过程中,数组中的数据比较次数和交换次数分别是()A.10次和3次 B.10次和4次C.15次和3次 D.15次和10次解析n个数进行选择排序需进行n-1遍,每遍比较次数依次为:n-1,n-2,……,2,1;选择排序的比较次数与待排序的初始状态无关,而交换次数与待排序的初始状态有关,需具体问题具体分析。本题数据比较次数为4+3+2+1=10次,模拟选择排序的过程,数据交换次数为4次。原始数据23,86,98,65,2数据交换第1遍2,86,98,65,232和23交换第2遍2,23,98,65,8623和86交换第3遍2,23,65,98,8665和98交换第4遍2,23,65,86,9886和98交换答案B【例5】实现某排序算法的部分VB程序如下:Fori=1To6k=iForj=i+1To7Ifa(j)<a(k)Thenk=jNextjIfi<>kThent=a(i):a(i)=a(k):a(k)=tEndIfNexti在排序过程中,经过某一遍排序“加工”后,数组元素a(1)到a(7)的数据依次为“10,41,75,12,63,11,85”。下一遍排序“加工”后数组元素a(1)到a(7)的数据依次是()A.10,11,41,75,12,63,85B.10,11,75,12,63,41,85C.10,11,12,75,63,41,85D.10,11,12,41,63,75,85解析(1)根据算法的代码特征确定是选择排序。(2)由a(j)<a(k)确定排序的目标是升序。(3)观察某遍排序“加工”后的数列发现只有第一个元素已经处于有序状态,因此下一遍排序后的目标是将第二个小的数11选出来和第二个位置的数41进行交换,从而获得所求答案。答案B[变式4]下列VB程序段是选择排序程序的主要部分。其中虚线框内代码用于寻找数据元素d(i)到d(n)的最小值。……Fori=1Ton-1k=iForj=i+1TonIfd(j)<d(k)Thenk=jNextjIfi<>kThenkt=d(i):d(i)=d(k):d(k)=ktNexti……框内代码运行结束时,保存最小值的数组元素一定是()A.d(n)B.d(j)C.d(i)D.d(k)解析变量k记录当前找到的最小值的位置,即数组元素的下标,则d(k)就是当前找到的最小的数组元素。它的思想方法是先假设数组的第i项是最小的(第i遍排序),因此k记为i,然后把从第i+1项开始的所有数组元素跟d(k)进行比较,如果比d(k)小,则用k记录该元素的下标。这样循环结束后,变量k中存储的就是数组中从第i项至第n项的最小元素的下标,d(k)就是第i项至第n项中的最小元素。答案D[变式5]对数组元素a(1)到a(8)进行升序排序,其排序算法的VB部分程序段如下:Form=1To7p=mForn=m+1To8eq\x()NextnIfp<>mThent=a(p):a(p)=a(m):a(m)=tNextm方框中的语句是()A.Ifa(n)<a(p)Thenp=mB.Ifa(n)<a(p)Thenp=nC.Ifa(n)>a(p)Thenp=nD.Ifa(n)>a(p)Thenp=m解析(1)这样的题首先要观察已有的程序代码确定算法类型,比如“p=mForn=m+1To8”可以确定该排序算法为选择排序。(2)再确认排序的升降特性,确定判断的条件,最后看清楚变量的名称。由于是升序排序,则判断的条件是a(n)<a(p)的时候更新p指针,指向当前第m小的数,也就是n所在的位置。答案B【例6】(2016·9月绍兴模拟)下列关于各种算法的特点描述,正确的是()A.能用对分查找完成的查找任务,顺序查找也一定能完成B.能用顺序查找完成的查找任务,对分查找也一定能完成C.对同一批数据进行升序排序,冒泡排序时数据元素间比较的总次数比选择排序多D.对同一批数据进行降序排序,冒泡排序时数据元素交换位置的总次数比选择排序少解析对分查找要求数列要先有序,选择查找对数列没有要求,所以A正确、B错。对同一批n个数据,冒泡排序和选择排序都进行n-1次比较,冒泡排序相邻两数依次进行比较,逆序马上交换,交换数据在内层循环中;选择排序是每个数和较大(较小)的数比较,较大(较小)的数放到一个变量中,比较完一遍才进行交换,交换一般在外层循环中,选择排序交换的次数一般比冒泡排序少。所以C、D错。答案A【例7】(2016·4月浙江高考)有如下程序段:Fori=1To2Forj=5Toi+1Step-1Ifa(j)>a(i)Thent=a(j):a(j)=a(i):a(i)=tEndIfNextjNexti数组元素a(1)到a(5)的值依次为“33,24,45,16,77”,经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为()A.77,45,33,16,24 B.77,33,45,16,24C.77,24,45,16,33 D.77,45,33,24,16解析分析本题程序段,外层循环到2,说明只进行了两遍排序。第1遍排序a(5)到a(2)依次与a(1)比较,较大数与a(1)交换,结果为:77,24,45,16,33;第2遍排序a(5)到a(3)依次与a(2)比较,较大数与a(2)交换,结果为:77,45,33,16,24。根据程序的代码特征,没有中间变量存放较大数,数据的交换在内层循环中,形式上很像冒泡排序,但仔细分析,排序时关键的数据比较是“a(j)>a(i)”,不是相邻两个数依次比较,第i遍排序时后面的数都依次和a(i)比较,通过交换使a(i)最大。所以本程序段算法不是简单冒泡排序,也不是简单选择排序,类似选择排序的变形。答案A[变式6]使用对分查找在已排序的数组d(数组元素d(1)≤d(2)≤…≤d(n))中查找key的算法流程图如图所示。其中①②框中的内容分别是()A.①j=m+1②i=m+1B.①j=m-1②i=m-1C.①j=m-1②i=m+1D.①j=m+1②i=m-1解析因为数据是升序排列的,因此,当key<d(m)时,要查找的数据应在m的左边,即查找的范围的终点j修改为j=m-1,当key>d(m)时,要查找的数据应在m的右边,即查找的范围的起点j修改为i=m+1。答案C[变式7]有两组数据:①54,31,43,12,8,73,56,34,89,60,23,67②87,83,75,70,63,59,55,37,33,21,17,7下列有关查找方法的描述,不正确的是()A.①可以直接使用顺序查找B.②可以直接使用对分查找C.①可以直接使用对分查找D.②可以直接使用顺序查找解析观察数列①为无序,显然不符合对分查找的有序前提。②为降序,可以用对分查找,同时也适用于顺序查找。注意此题问的是不正确的选项。答案C【例8】(2016·8月温州模拟)采用如下对分查找算法对数组a中7个有序数据“15,38,51,66,77,81,99”进行查找,查找数据为“55”,i=1∶j=7∶x=55DoWhilei<=jm=(i+j)/2Ifa(m)=xThenExitDoIfa(m)>xThenj=m-1Elsei=m+1Loop经过上述代码查找后,下列表述正确的是()A.i=m+1 B.i=m-1C.j>m+1 D.j<m-1解析本题为对分查找算法程序,分析程序运行过程中的变量变化情况:变量i变量j变量m数据a(m)第1次查找17466第2次查找3238第3次查找3351退出循环4经过3次查找,i=4,j=3,i>j,退出循环,根据此时变量值判断A正确。答案A[变式8]某学校图书管理系统中有10万条图书资料记录(已经索引排序),假设从中取出一条记录并与待查找项进行比较所花时间为10毫秒,则用对分法在该系统中查找任意一本指定图书最多花费的时间约为()A.100万毫秒 B.50万毫秒C.10毫秒 D.170毫秒解析对分查找的查找效率较高,无论是否找到,最多进行logeq\o\al(n+1,2)次查找,表示小于等于logeq\o\al(n+1,2)的最大整数。n=100000,比较次数为17次,因此最多花费的时间是170毫秒。答案D[变式9]小王设计了一个算法来求xn(x的n次方)的值,他的算法思想是:把xn转换为x*xn-1,而xn-1又可以转换为x*xn-2,如此继续,直到x*x0,而x0=1,从而求出了xn的值。小王采用的算法是()A.解析算法 B.枚举算法C.递归算法 D.查找算法解析本题中求“xn”的值,采用“大事化小,小事化了”的方法,符合递归算法的基本思想。答案C【例9】下列VB程序模块可以计算正整数n阶乘的值。Functionf(nAsInteger)AsIntegerIfn<=1Thenf=1Elsef=n*f(n-1)EndIfEndFunction该模块采用的算法是()A.枚举B.查找C.排序D.递归解析在自定义函数f(n)中,从f=n*f(n-1)可以判断是递归算法。答案D[变式10]下列VB程序中,f是一个递归函数。PrivateSubCommand1_Click()DimyasLongText1.Text=””y=f(3)Label1.Caption=str(y)EndSubFunctionf(nAsInteger)asLongText1.Text=Text1.Text+Str(n)Ifn<=1Thenf=1Elsef=f(n-1)+2EndIfEndFunction程序运行时,单击命令按钮Command1后,文本框Text1中显示的内容是()A.3B.321C.123D.2解析这段程序由两部分组成:事件处理过程(PrivateSubCommand1_Click())和自定义函数(Functionf(nAsInteger)AsLong)。在自定义函数f中又出现了调用函数f本身的语句f=f(n-1)+2,因此f函数采用的是递归算法。在事件处理过程PrivateSubCommand1_Click()中,语句y=f(3)表示调用函数f,将参数3传递给f函数中的变量n,最终将函数的返回值赋给变量y。函数f执行时,n的值和Text1中的内容如下表所示:F(n)nText1.textF(3)33F(2)232F(1)1321因此,在文本框Text1上显示的内容为321。如问标签Label1中显示的内容为多少?那又该如何解题呢?这就要求大家掌握递归算法的实现过程了。递归函数f(n)的执行过程如图所示:即y=f(3)=5,因此在标签Label1上显示的内容为5。答案B[变式11]利用ADO访问数据库的步骤是:①定义和创建ADO实例变量②设置连接参数并打开连接③设置命令参数并执行命令④设置查询参数并打开记录集⑤操作记录集⑥关闭、回收有关对象这些步骤的执行顺序应该是()A.①④③②⑤⑥ B.①③④②⑤⑥C.①③④⑤②⑥ D.①②③④⑤⑥解析利用ADO访问数据库,想要读取数据库中的数据,先要定义和创建ADO对象实例变量,然后下一步就是要与数据库取得连接,接着利用连接参数进行数据库连接,连接后根据SQL命令执行返回记录集,并对记录集进行操作,当操作结束不需要使用连接对象时,要用close方法来关闭连接。所以答案为D。答案D[变式12]通过ADO的Recordset对象从数据库中获取数据,代码如下:DimaaAsNewADODB.Recordsetaa.Open“SELECT*FROMinfo”在调试时出现了如图所示的错误提示:产生该错误提示的原因可能是()A.没有定义ADO的Connection对象实例B.Recordset对象实例没有打开记录集C.没有设置Recordset对象实例的ActiveConnection连接属性D.指定的数据库文件不存在解析代码中第一行定义了Recordset对象实例aa,第二行代码的功能是打开记录集,查询数据库的SQL语句“SELECT*FROMinfo”表示获取数据库中表“info”的所有记录,没有错误。但代码中没有设置Recordset对象实例aa的ActiveConnection属性值,使之与Connection对象实例产生关联,所以提示该错误。答案C[变式13]通过ADO的Recordset对象实例aa打开了如下表所示的记录集:序号货名售价数量1B5笔记本6.51224B橡皮1.2503签字笔1.1454圆规5.325当前记录是第3条,要用Fields集合返回第3个字段的信息,正确的表示是()A.aa.Fields(0) B.aa.Fields(1)C.aa.Fields(”序号”) D.aa.Fields(”售价”)解析需要了解Fields集合的两种书写格式,指定字段名或者字段序号。题目要求返回第3个字段的信息,即“售价”字段的信息。而字段序号是从0开始编号,所以第3个字段应该是编号2,故A、B选项均错误。答案D[变式14]小叶编写了一个VisualBasic程序,用于查找数据库sq.mdt,文件中所有相同身高的同学编号。程序运行界面如图所示,在列表框List1中显示所有同学的编号和身高(按身高从低到高排列),在文本框Text1中输入需要查找的身高,单击“查找”按钮Command1,在列表框List2中显示所有此身高的同学编号。数组a和数组b分别存储同学的编号和对应的身高(身高已从低到高排列)。解决此问题的程序代码如下:DimconnAsNewADODB.ConnectionDimrsAsNewADODB.RecordsetDimnAsIntegerDima(500)AsStringDimb(500)asIntegerPrivateSubForm_Load()conn.ConnectionString=”Provider=;DATASource=”&App.Path&”/sq.accdb”conn.OpenSetrs.ActiveConnection=connrs.Open”SELECT*FROMshengao”n=0DoWhileNotrs.EOF′到记录集最后一条记录后退出循环n=n+1a(n)=rs.Fields(”bh”)b(n)=rs.fields(”sg”)rs.MoveNext′移动到下一条记录Looprs.closeconn.CloseSetrs=NothingSetconn=NothingEndSubPrivateSubCommand1_Click()′此过程用于在列表框List2中显示给定身高的所有学生的编号,代码略。EndSub′以下函数用于查找给定身高的学生的相关信息PrivateFunctionFindEx(kAsInteger)AsIntegerDimfAsBoolean,iAsInteger,jAsInteger,mAsIntegeri=1:j=nf=FalseDoWhile(i<=j)AndNot(f)m=Fix((i+h)/2)Ifk=b(m)Thenf=____①____ElseIfk<b(m)Thenj=m-1Else____②____EndIfEndIfLoopIffThenFindEx=mElseFindEx=0′找到返回m,否则返回0EndFunction(1)FindEx函数主要采用的算法是________。(填:顺序查找/对分查找)(2)在程序①和②画线处,填入适当的语句或表达式,把程序补充完整:程序中①划线处应填入________。程序中②划线处应填入________。解析先设置查找范围i和j(i=1,j=n),查找过程中,m=Fix((i+j)/2)程序在区别i和j中取中间数据,然后将需要查找的数据与b(m)比较,相等则返回m;若不相等,再比较k和b(m),如果是小于,就将查找的终点j设置为m-1,否则将查找的起点i设置为m+1。答案(1)对分查找(2)①True②i=m+1或i=1+m【易错易误】1.冒泡排序和选择排序冒泡排序和选择排序的程序实现很相似,都用到双重循环,以及数组元素之间的比较,因此需要准确区分两者之间的代码异同,能将程序补充完整。2.明确两种排序算法的比较次数和交换次数冒泡排序算法比较次数为总的比较次数:n(n-1)/2。在每一遍加工的过程中需要对逆序的数据两两进行交换,选择排序的比较次数为n(n-1)/2。两种排序的比较次数与待排序元素的初始状态无关,而交换次数与待排序元素的初始状态有关,即当待排序元素已经有序,交换0次,最坏情况下选择排序交换n-1次,冒泡排序最坏情况下交换(n-1)(n-2)/2次。3.理解两种排序算法的原理基础上能准确模拟数据交换后数列的变化一般情况下,冒泡排序的交换发生在相邻两数为逆序对时,相邻两数两两交换,其范围是待排序区域;选择排序的交换发生在待排序区域的最小(最大)数和待排序区域的第一个数进行交换,若最小数(最大数)是待排序区域的第一个数,则无需交换。这要求学生对知识进行内化理解,死记硬背的方式则会遇到困难,建议在复习之初可以用跟踪模拟的方式,观察数据的变化来加深理解。4.对分查找算法应用的前提条件待查数列有序,而顺序查找没有这样的要求,可以无序。5.对分查找工作原理的理解比较次数是学生容易忽略的地方。6.两种查找的程序实现包括中间点位置的确定、新的查找区间的变化以及模拟跟踪。7.VB和数据库的连接对学生来说,这部分知识比较陌生,牵涉一系列的基本概念和操作,刚开始容易出现各种错误,需要学会根据产生的错误提示,分析产生该错误的可能原因。8.Fields集合要求了解Fields集合通过指定字段序号或字段名返回数据的方法,要清楚字段名和字段序号之间的对应关系以及当前记录是哪一条。Fields集合返回的是当前记录的数据。9.VB应用程序通过ADO访问Access数据库,将数据库作为VB程序设计时的数据源,可用数组的形式存储获取的数据,进而可以通过枚举、解析等算法对从数据库中获取的数据进行简单的处理。1.如果一个4位数恰好等于它的各位数字的4次方和,则这个数被称为“玫瑰花”数。例如1634就是一个玫瑰花数:1634=14+64+34+44。如果要求出所有的玫瑰花数,下列算法合适的是()A.查找法 B.解析法C.穷举法 D.排序法解析本题要求是求出所有的玫瑰花数,即是将求解对象一一列举出来,因此选C。答案C2.某书店在5所学校流动售书量(单位:本)分别是88,110,48,64,35。采用冒泡排序法对其进行排序,若完成第一遍时的结果是:35,88,110,48,64,则完成第二遍时的结果是()A.35,88,110,48,64 B.35,48,88,64,110C.35,48,88,110,64 D.35,48,64,88,110解析从第一遍的结果可以看出排序的结果是数据从小到大排。从小到大冒泡排序的基本思想是从最后的一个元素起,自后向前比较相邻的两个数据,将较小的数据换到前面,较大的换到后面。第二遍加工时:64和48,64不动;48和110,110换到后面,48换到前面;48和88,88换到后面,48换到前面。这是第二遍加工,结果是:35,48,88,110,64。答案C3.寻找数组元素a(1)到a(10)中最小值min程序段如下:eq\x()Fori=2To10Ifa(i)<minThenmin=a(i)Nexti方框中最合适的语句是()A.a(1)=min B.a(1)=0C.min=a(1) D.min=0解析它的思想方法是先假设数组的第一项是最小的,并赋值给变量min。因此min=a(1),然后把从第二项开始的所有数组元素跟变量min进行比较,如果比min小,则把该元素赋值给min。这样循环结束后,变量min中存储的就是该数组中的最小值。答案C4.学校为每位同学办理一张校园卡,该卡可供同学们在食堂用饭、图书馆借书、超市消费等,因此称为一卡通,一卡通的卡号是唯一的,卡内会记录每位同学的姓名、班级、金额等信息。下列程序的功能是根据卡号查找对应的姓名,程序中数组a保存卡号,数组b保存姓名,第i位同学的卡号是a(i),姓名是b(i)。程序界面如下图所示,左边列表框列出所有同学的卡号和姓名,在右边文本框Text1中输入卡号,单击“查询”按钮(Command1),程序就按卡号进行查找,如果找到就在标签Label3中输出姓名,否则就输出“查无此人”。解决此问题的算法流程图如下图所示,相应的程序如下,在程序(1)和(2)画线处,填入适当的语句或表达式,把程序补充完整。PrivateSubCommand1_Click()DimxAsString,iAsInteger,sAsString,fAsBooleanx=Text1.texti=0:f=False′f标志是否已经找到,值为True时表示已经找到,值为False时表示没找到DoWhile(i<n)And(①________)′n是总人数i=i+1Ifx=a(i)Thenf=TrueEndIfLoopIff=TrueThen②________Elses=”查无此人!”EndIfLabel3.Caption=sEndSub(1)解决此问题所用的算法是________。(选填:顺序查找或对分查找)(2)程序中画线处①应填入________。(3)程序中画线处②应填入________。解析(1)顺序查找的基本思想是从第一个数据开始,按数据的顺序逐个将数据与给定的值进行比较。若某个数据和给定值相等,则查找成功;否则,查找不成功。(2)查找结束的条件是,变量f标志是否已经找到,值为True时表示已经找到,值为False时表示没找到,因此程序中画线处(1)应填:f=False或notf。(3)程序通过卡号查询,如果找到该卡号,则输出该卡号对应的同学的姓名,程序中数组a保存卡号,数组b保存姓名,当f=True时,表示找到了该卡号。此时退出循环,变量i的值就是该卡号所在的位置,因此b(i)就是该卡号对应的同学的姓名。因此程序中画线处(2)应填入s=b(i)。答案(1)顺序查找(2)f=False或notf(3)s=b(i)5.小树要买一本书,收集了各个网上书店中该书的售价,她设计了一个VB排序程序,帮助她将售价由低到高排序。程序运行界面如图所示,左边列表框List1中显示排序前数据,单击“排序”按钮Command1,在右边列表框List2中显示按售价从低到高排序后的结果,在标签Label3中显示比较次数(此图中比较的次数用图像处理软件遮挡)。程序中数组a和数组b分别存储网上书店名称和对应的售价。程序代码如下:ConstnAsInteger′n为比较次数Dima(1Ton)AsString′数组a用于存储网上书店名称Dimb(1Ton)AsInteger′数组b用于存储售价PrivateSubCommand1_Click()DimiAsInteger,jAsInteger,kAsInteger,tAsSingle,sAsStringDimnumAsIntegernum=0Fori=1To4k=iForj=____①____To5Ifb(k)>b(j)Thenk=j②____NextjIf____③____Thens=a(i):a(i)=a(k):a(k)=st=b(i):b(i)=b(k):b(k)=tEndIfNextiFori=1To5List2.AddItema(i)+””+Str(b(i))NextiLabel3.Caption=”比较次数为:”+Str(num)+”次”EndSubPrivateSubForm_Load()′此过程用于对数组a和数组b进行赋初值,并显示在List1中,代码略EndSub(1)在程序①、②和③划线处填入适当的语句或表达式,将程序补充完整:程序中①划线处应填入________________________________________________________________________________________________________________________。程序中②划线处应填入________________________________________________________________________________________________________________________。程序中③划线处应填入_______________________________________________________________________________________________________________________。(2)程序结果中被遮掉的比较次数是多少?_______________________________________________________________________________________________________。解析(1)由代码特点分析,确定该算法为选择排序。(2)根据选择排序的特点,为确定第i个位置的数,需要在第i到n个位置中找出最小的数放到第i个位置中,由于“k=i”这句语句,在进入循环前,先将第i个位置暂时设置为最小值的所在,因此循环中,应该是从第i+1个位置开始比较,如果有更小的值,则暂存最小值位置标记为新的值。(3)当记录最小值的位置不是第i个位置的时候,则需要交换两个位置中的数值。此处特别要注意的是,在该选择排序中,最小值记录的是所在的位置而不是具体的数值。(4)第一遍循环,比较的次数是4次,第二遍循环是3次,以此类推4+3+2+1=10次,可以通过模拟解决,要注意此处比较次数和交换次数是不同的。答案(1)①i+1②num=num+1③i<>k(2)106.某超市商品信息管理系统中有1万条商品资料记录(已经索引排序),假设从中取出一条记录并与待查项进行比较所花的时间为20毫秒,则用对分法在该系统中查找任意一个指定商品最多花费的时间约为()A.13毫秒 B.14毫秒C.280毫秒 D.14万毫秒解析根据对分查找算法的基本思想可得查找任一数据所查找的最多次数为n=[log210000]+1,求得n=14,即与待查项最多比较14次,而每一次比较所花的时间为20毫秒,因此最多花费时间为14*20=280毫秒。答案C7.7位幼儿园小朋友的体重(单位kg)从低到高依次为:13,15,16,18,20,21,23。用对分查找法找到23的过程中,依次被访问到的数据是()A.23 B.18,21,23C.18,23 D.18,20,21,23解析依据对分查找每次取区域中间点的方式,依次访问到的数据是18,21,23。答案B8.(2016·8月温州模拟)某VB程序使用了递归函数,代码如下:PrivateSubCommand1_Click()Text1.Text=f(3)EndSubFunctionf(xASInteger)AsStringIfx=1Thenf=1Elsef=f(x-1)+2EndFunction运行程序并点击按钮Command1后,文本框Text1中显示的内容是()A.1B.3C.5D.7解析分析递归函数,f(1)=1,f(2)=f(1)+2=3,f(3)=f(2)+2=5。答案C9.观察如下VB程序段:Functionfx(nAsInteger)AsLongIfn=1Thenfx=1Elsefx=2*fx(n-1)EndIfEndFunctionPrivateSubCommand1_Click()DimnAsInteger,xAsLongn=Val(Text1.Text)x=fx(n)Text2.Text=Str(x)EndSub若在文本框Text1中输入数字5,单击命令按钮Command1后,在文本框Text2显示的内容为()A.2B.8C.16D.32解析由代码特点分析,该程序段为递归算法,fx(1)=1,fx(2)=2,fx(3)=4,fx(4)=8,fx(5)=16。答案C10.如果两个质数的差为2,则这两个质数称为孪生质数对;编写VB程序,实现如下功能:单击“显示孪生质数对”按钮Command1,在列表框list1中显示100以内的所有孪生质数对(运行效果如图所示)。实现上述功能的VB代码如下,但加框处代码有错,请改正。Dima(1To50)AsIntegerPrivateSubCommand1_Click()DimiAsIntegerk=0:i=3DoWhilei<=100eq\x(Ifprime(i)Then)′(1)k=k+1a(k)=iEndIfi=i+2LoopFori=2Tokeq\x(Ifa(i)=a(i+1)+2Then)′(2)List1.AddItemStr(a(i-1))+”和”+Str(a(i))EndIfNextiEndSubFunctionprime(xAsInteger)AsBooleanprime=FalseFori=2ToInt(Sqr(x))IfxModi=0Thenprime=TrueExitForEndIfNextiEndFunction答案(1)prime(i)=false(2)a(i)=a(i-1)+2ora(i)+2=a(i-1)11.使用VB中的ADO访问文件名为“Course.accdb”的Access数据库,与数据库建立连接的程序段如下:DimconnAsNewADODB.Connectionconn.ConnectionString=”Provider=;DataSource=”+App.Path+”/monkey.accdb”conn.Open在调试时出现了如图所示的错误提示框。产生该错误提示的原因可能是()A.没有定义ADO的Connection对象实例B.没有打开Connection对象实例到数据库的连接C.指定的数据库文件不存在D.没有添加选择MicrosoftActiveXDataObjects6.1Library组件解析为了能够在程序中使用ADO对象编程,在连接数据库前,必须首先在VisualBasic6.0菜单“工程”—“引用”中选择MicrosoftActiveXDataObjects6.1Library组件,并保证已正确安装MicrosoftAccess2010数据库引擎。答案D12.学校需要统计学生的作业完成数,需要将学生的完成数按从高到低显示,下列程序模拟该信息处理过程,程序在数据库stud中找到的学生信息(编号和完成次数),并将所有学生按照完成数从高到低显示。先将所有学生的编号和完成次数从数据库stud的info表中ID和finshed两字段中取出分别保存在数组a和数组b中,第i个学生的编号保存在a(i)中,对应的作业完成次数保存在b(i)中。数据库文件“stud.accdb”信息如图1所示。图1程序界面如图2所示,左边列表框List1中显示所有学生信息(包括编号和完成次数),单击“排序”按钮(Command1),所有编号按照作业完成次数从高到低显示在列表框List2中。图2代码如下:DimconnAsNewADODB.ConnectionDimrsAsNewADODB.RecordsetDimnAsIntegerDima(500)AsStringDimb(500)AsIntegerPrivateSubForm_Load()DimiAsIntegerconn.ConnectionString=”Provider=;DATASource=”&App.Path&”/stud.accdb”conn.OpenSetrs.ActiveConnection=connrs.Open”SELECT*FROMinfo”n=0DoWhileNotrs.EOF’到记录集最后一条记录后退出循环n=n+1a(n)=rs.fields(”id”)b(n)=rs.fields(”finshed”)rs.MoveNext’移动到下一条记录LoopFori=1TonList1.AddItema(i)+“”+Str(b(i))Nextirs.Closeconn.CloseSetrs=NothingSetconn=NothingEndSubPrivateSubCommand1_Click()DimiAsInteger,jAsInteger,t1AsInteger,t2AsString,kAsIntegerFori=1Ton-1′n表示学生总数k=i′k保存第i大的数,一开始假定是a(i)Forj=i+1TonIfb(k)<b(j)Thenk=j′比较完成数____①____If____②____Thent1=b(i):b(i)=b(k):b(k)=t1′交换完成次数t2=a(i):a(i)=a(k):a(k)=t2′交换编号EndIfNextiFori=1Ton′在列表框List2中输出排序结果List2.AddItema(i)+””+Str(b(i))NextiEndSub(1)当“Form_Load()”事件处理过程运行结束时,变量n的值为:________。(2)加虚线框中的代码采用的排序算法为:_______________________________________________________________________________________________________。(3)为实现上述功能,程序中画线处的代码为:①________;②________。解析本题重点考查枚举算法的实现。该算法的基本思想是根据问题本身性质,一一列举问题所有可能的情况,并根据题目的条件逐个作出判断,从中挑选出符合条件的解。答案(1)500(2)枚举算法(3)①j=j+1②a(k)<a(j)1.统计1~1000间个位数是4,且能被9整除的数共有多少个,可以采用的算法是()A.查找算法 B.枚举算法C.解析算法 D.排序算法解析枚举对象是1~1000内的所有整数,枚举范围为1~1000,枚举条件是:个位数是4且能被9整除的整数,符合枚举算法的基本思想。答案B2.计算两个并联电阻总电阻值的算法如下:①输入两电阻R1,R2的值②计算总电阻R=eq\f(R1R2,R1+R2)③输出总电阻R上述算法属于()A.枚举算法B.解析算法C.排序算法D.查找算法解析由题可知,本题为解析算法。答案B3.有一个8位数,前4位是4623,后4位数字的特点如下:(1)后4位数字中的前2位数字相同;(2)后4位数字中的后2位数字也相同;(3)后4位数字正好是一个完全平方数。某同学编写了一个VB程序用于寻找这个8位数。程序运行时,单击“计算”按钮Command1,在标签Label2中显示这个8位数,程序运行界面如图所示。PrivateSubCommand1_Click()DimiAsLong,aAsInteger,bAsInteger,cAsInteger,dAsInteger,xAsIntegerFori=32To99n=i*ix=____①____y=____②____a=x/10b=xMod10c=y\10d=yMod10Ifa=bAndc=dThen____③____NextiEndSub为实现上述功能,请在程序画线处填入合适的语句。画线①处应填入的语句为:___________________________________________________________________________________________________________________;画线②处应填入的语句为:____________________________________________________________________________________________________________________;画线③处应填入的语句为:_____________________________________________________________________________________________________________________。解析后4位数是一个完全平方数,因此只要枚举32~99的平方即可;变量x和y分别表示这4位数的前两位数字和后两位数字,最后将结果显示在标签Label2上。答案①x=nMod100②y=n\100③Label2.Caption=Str(46230000+n)4.计算三角形面积的算法如下:①输入三角形三边长a,b,c②计算半周长p=(a+b+c)/2③计算三角形面积s=Sqr(p*(p-a)*(p-b)*(p-c))④输出面积s上述算法属于()A.排序算法 B.解析算法C.枚举算法 D.查找算法解析本题中算法的基本思想是通过数学表达式的计算来解决问题,符合解析算法的基本思想。答案B5.兔子吃萝卜。兔子拔了一堆萝卜,第一天吃了一半,还嫌不过瘾,又吃了一个,第二天又将剩下的萝卜吃掉一半,又多吃了一个,以后每天如此。到第10天想再吃时,见只剩下一个萝卜了。求第一天共拔了多少萝卜。小明编写了一个VB程序,用于计算兔子第一天拔的萝卜总数。程序运行界面如图所示。PrivateSubCommand1_Click()DimiAsInteger,sumAsIntegersum=1Fori=9To1____①____②____NextiText1.Text=Str(sum)EndSub回答下列问题:(1)该程序采用的算法是________(填:解析算法/枚举算法)(2)显示计算结果的控件属于________类,该控件的名称是________。(3)画线①处应填入的语句为________。画线②处应填入的语句为________。解析根据题意可知,前一天的萝卜数是后一天的萝卜数加1后的2倍,因此可得到公式sum=(sum+1)*2;由于For循环是递减的,因此步长为-1。答案(1)解析算法(2)文本框Text1(3)①Step-1②sum=(sum+1)*26.有如下程序段:s=“”Fori=1To3Forj=7Toi+1Step-1Ifa(j)<a(j-1)Thenk=a(j):a(j)=a(j-1):a(j-1)=kEndIfNextjs=s+Str(a(i))NextiText1.Text=s数组元素a(1)到a(7)的数据依次为“3,9,1,5,8,6,2”,经过该程序段“加工”后,文本框Text1中显示的内容是()A.123 B.986C.391 D.862解析冒泡排序的基本操作是比较相邻的两个数据,因此代码中会出现相邻的两个数组变量的比较,比如题中Ifa(j)<a(j-1),一旦确定是冒泡排序,接着就可以用冒泡排序的思想方法来对数据进行排序。分析外循环语句可知总共做了三遍排序加工,输出结果是a(1)、a(2)、a(3),分析if语句可知数据是从小到大排序,因此三遍排序后a(1)=1、a(2)=2、a(3)=3。答案A7.(2015·10月浙江选考)已知单调函数f(x)在[0,1]区间存在一个x0,使f(x0)=0。现用对分查找法搜索x0的值,开始搜索区间为[0,1],若经过10次对分查找后还需继续搜索,则第11次搜索区间的长度为()A.1/2B.1/10C.1/102D.1/210解析本题考查对分查找。第一次搜索区间是1,第二次搜索区间是1/2,第三次搜索区间是eq\f(1,22),第四次搜索区间是eq\f(1,23)……,第n次搜索区间是eq\f(1,2n-1),第11次搜索区间是eq\f(1,210),选项D正确。答案D8.在数组元素a(1)到a(5)中查找键值为key的数,其查找算法的VB程序段如下:Dima(1To5)AsIntegerDimKeyAsIntegerPrivateSubCommand1_Click()t=0Fori=1To5If____①____Thent=iExitFor′②EndIfNextiPrinttEndSubPrivateSubForm_Load()′此过程用于对数组a和查找键Key进行赋初值,代码略EndSub该程序段中所用的查找算法是_________________________________________________________________________________________________________。在程序①画线处,填入适当的语句或表达式,把程序补充完整:程序中①画线处应填入______________________________________________________________________________________________________________________________。当数组元素a(1)到a(5)中存储的数据为(2,5,1,9,5),查找键Key为5时:(3)该程序运行结束,t的值是___________________________________________________________________________________________________________________。(4)如果将②所标记的ExitFor语句删除,该程序运行结束时,t的值是________。解析(1)在明确是查找算法的前提下,观察代码“Fori

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论