内容正文:
第四章算法应用举例同步练习2023—2024学年高中信息技术人教版选修1
一、选择题
1.一位顾客购买了土豆X 千克、西红柿 Y 千克、辣椒 Z 千克,其中土豆 3.5元/千克、西红柿4.3元/千克、辣椒6.6元/千克。计算该顾客消费总价的算法如下:
�输入三种蔬菜的重量X,Y,Z
�用公式计算总价 S=3.5*X+4.3*y+6.6*z
�输出总价S
�结束
以上算法属于( )。
A.枚举算法 B.解析算法 C.排序算法 D.查找算法
2.【加试题】某VB 程序代码如下:
Function arr(x As Integer) As Boolean
Dim s As Integer, i As Integer
s = 1
For i = 2 To x \ 2
If x Mod i = 0 Then s = s * i
Next i
If s = x Then
arr = True
Else
arr = False
End If
End Function
Private Sub Command1_Click()
Dim i As Integer
For i = 2 To 10
If arr(i) Then List1.AddItem str(i)
Next i
End Sub
单击Command1 按钮后, List1 中显示的结果是( )
A.2、3、4、5、6 B.2、4、6 C.4、6、8 D.6、8、10
3.采用盲目的搜索方法,在搜索结果的过程中,把各种可能的情况都考虑到,并对所得的结果逐一进行判断,过滤掉那些不合要求的,保留那些合乎要求的结果,这种方法叫作( )。
A.递推法 B.穷举法 C.选择法 D.解析法
4.在信息加工中,经常要对被处理的数据进行排序,在排序时经常要进行数据的交换。下面有四个程序段:
其中能正确地将x和y两个变量中的数据进行交换的程序段有( )
A.1个 B.2个 C.3个 D.4个
5.有如下VB程序段:
m= Int(Rnd*3+1)*2
For i=l To 6-m
For j=6 To i+ 1 Step-1
If a(j)<a(j- 1)Then t= a(j): a(j)= a(j- l);a(j- 1)=t
Next j
Next i
数组元素a(1)到a(6)的值依次为“98,67,3, 81,38,21”, 执行该程序段后,a(1)~a(6)各元素值不可能是( )
A.3,98,67,21,81,38 B.3,21,98,67,38,81
C.3,21,38,67,98,81 D.98,67,3,81,38,21
6.关于对分查找和顺序查找算法的叙述,正确的是( )。
A.顺序查找需要排序,效率低;对分查找不需要排序,效率高。
B.顺序查找不需要排序,效率低;对分查找需要排序,效率高。
C.顺序查找不需要排序,效率高;对分查找需要排序,效率低。
D.顺序查找需要排序,效率高;对分查找不需要排序,效率低。
7.X = 9
For i =" 3" To 9 Step 3
If (X / 3) >=" i" Then X =" X" + 3
Next i
For i =" 22" To 2 Step 2
If (X / 2) >=" i" Then X =" X" + 2
Next i
MsgBox (X + i)
该程序的运行结果是( )
A.39 B.15 C.34 D.12
8.有如下程序段:
Const n = 6
Dim a(1 To n) As Integer
Dim i As Integer, j As Integer, t As Integer
Do While True
For i=1 to n-1 If a(i)>a(i+1) then Exit For
Next i If i < n Then
For i = 1 To n
j = Int(Rnd * 6) + 1
t = a(j): a(j) = a(i): a(i) = t
Next i
Else
Exit Do
End If
Loop
数组中a(1)到a(6)的值依次为“56,34,48,87,65,96”,经上述程序段执行后a(1)到a(6)的值依次为( )
A.96 87 65 56 48 34
B.34 48 56 65 87 96
C.选项A和B都有可能
D.选项A和B都不可能
9.下列问题适合使用枚举算法解决的是()
A.计算已知半径的圆面积 B.计程车计费
C.校园歌曲大赛的成绩排名 D.找出1000以内的所有素数
10.某对分查找算法的 VB 程序段如下:
i =1 : j=10 : s="" : n=0
key = 10+int(Rnd*20)
Do While i<=j
n=n+1
m=(i+j)\2
s =s+ str(m)
If key = a(m) Then Exit Do 'ExitDo 表示退出循环
If key < a(m) Then j=m-1 Else i=m 十 1
Loop
a(1)~a(10)中的值依次是5,8,16,23,29 ,30,42,51,57,69执行程序后,以下说法正确的是( )
A.s 的值可能是"5 8 6 7" B.i 的值一定小于6
C.j 的值一定大于2 D.n 的值一定小于4
11.7位学生的身高(单位:cm)从高到低依次为:178,177,175,172,170,165,162。用对分查找法找到178 的过程中,依次被访问到的数据是( )
A.178 B.172,175,178 C.172,177,178 D.172,175,177,178
12.下列说法正确的是( )
A.未优化过的选择排序和冒泡排序,比较次数肯定是相同的,所以交换次数也肯定相同
B.对包含7个数据的有序数组a进行对分查找,平均查找次数为17/7次
C.VB调用数据库时,rs. fields(1)指的是调用某数据表中某条记录第1个字段的值
D.使用选择排序时,若某--遍排序时,并没有数据进行交换,说明数据已经有序
13.利用海伦公式求三角形面积的算法属于( )
A.排序法 B.解析法 C.枚举法 D.查找法
14.已知字符串数组a(1)到a(6)的原始数据为118,36,98,15,88,2,为了对该数组进行排序操作,小吴编写了以下VB程序:
For i=1 to 3
For j=6 to i+1 step -1
If a(j)<a(j-1) then t=a(j): a(j)=a(j-1): a(j-1)=t
Next j
Next i
则程序运行之后,数组a(1)到a(6)的值依次为( )
A.118,15,2,36,88,98 B.118,15,36,88,98,2
C.2,15,36,118,88,98 D.2,15,36,88,98,118
15.有一个由4000个整数构成的顺序表,假定表中的元素已经按升序排列,采用二分查找定位一个元素。则最多需要( )次比较就能确定是否存在所查找的元素。
A.11次 B.12次 C.13次 D.14次
16.有如下VB程序段:
For i = 1 To 3
For j = 5 To i + 1 Step -1
If a(j) < a(i) Then
t = a(j): a(j) = a(i): a(i) = t
End If
Next j
Next i
假定数组元素a(1)~a(6)的值依次hippo,Change, sky, sk2, bellow, Half,执行程序后,a(3)~a(6)的值依次是( )
A.bellow,sk2,hippo,sky B.hippo,sk2,sky,Half
C.bellow,hippo,sk2,sky D.hippo,sky,sk2,Half
17.有7袋盐,标准质量是500克,其中一包不合格(质量不足500克),用天平至少称( )次才能保证找出这袋盐。
A.4次 B.3次 C.2次 D.1次
18.在二分查找算法中,要求数据必须是( )
A.无序的 B.有序的(升序或降序) C.只能升序排列 D.只能降序排列
19.下列关于冒泡排序和选择排序的叙述中,正确的是( )
A.冒泡排序中,值相同的两个数据在排序前后的相对位置可能变动
B.选择排序中,值相同的两个数据在排序前后的相对位置可能变动
C.冒泡排序中,数据的交换次数与比较次数一定相同
D.选择排序中,数据的交换次数与比较次数一定相同
20.某对分查找算法的VB程序段如下:
Dim a(1 To 10) As Integer
Key= Int(Rnd*32) *3+3
s=0:i=1:j=10
DoWhilei<=j
m=(i+j)\2
If Key = a(m) Then Exit Do .
If Key > a(m) Then
i=m+1:s=3*s+2
Else
j=m-1:s=3*s
End If
Loop
数组a(1)到a(10)的值依次为“4,7,9,15,24,32,37,54,75,90”,执行该程序段后,s的值不可能为( )
A.20 B.80 C.62 D.18
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.B
【详解】
2.D
【详解】本题考查的是VB自定义函数。自定义函数中For i = 2 To x \ 2及If x Mod i = 0 Then s = s * i可知当x为4时,s=s*i=1*2=2,不等于4,返回值为False,不加入列表框。故选项ABC错误。
3.B
【详解】本题考查常用算法。采用盲目的搜索方法,在搜索结果的过程中,把各种可能的情况都考虑到,并对所得的结果逐一进行判断,过滤掉那些不合要求的,保留那些合乎要求的结果,这种方法叫作穷举法,选项B正确。
4.C
【详解】
5.A
【详解】
由随机数Rnd产生范围[0,1)可知m的取值可能是2,4,6,故6-m的取值可能是0,2,4。选项D就是排序排了0次的结果,正确。选项B就是排序排了2次的结果,正确。选项C就是排序排了4次的结果,正确。选项A是排序排了1次的结果,故错误。
6.B
【详解】
7.C
【详解】
8.B
【详解】本题考查的知识点是排序算法的应用。程序分析如下:
Const n = 6 ’定义一个整型常量n并赋值为6
Dim a(1 To n) As Integer ’定义一个整型数组,该数组共6个元素
Dim i As Integer, j As Integer, t As Integer ’定义整型变量i,j,t
Do While True ’进行用真循环,循环永远执行,不会停止
For i=1 to n-1 ’使用i控制循环,i的值从1到n If a(i)>a(i+1) then Exit For ’任何一个数组元素只要比其后面的元素大,就退出For循环,但是必须在i<n时,否则循环结束了
Next i ’下一次循环 If i < n Then ’在i小于n 时,进行以下处理,即上述For循环没有完整执行的情况下
For i = 1 To n ’使用i进行循环,共执行6次
j = Int(Rnd * 6) + 1 ’产生一个范围在[1,6]的随机整数
t = a(j): a(j) = a(i): a(i) = t ’使用中间变量t交换a(i)和 a(j)的值
Next i ’下一次循环
Else ’在i值大于等于n时,进行以下处理
Exit Do ’退出Do While循环
End If ’结束条件判断
LoopDo While ’循环结束标志
由以上可知在数组元素的值没有按由小到大排列时,一直随机交换数组元素直到其由小到大排列为止。只有B选项素组元素是由小到大排列。故正确答案为B选项。
9.D
【详解】本题考查的是算法。在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法。选项中适合枚举算法的是找出1000以内的所有素数。选项D正确。
10.B
【详解】本题主要考查对分查找算法。i=1,j=10,key = 10+int(Rnd*20),key是随机生成[10,29]之间的整数,结合a(1)~a(10)的值,m的值应小于6(a(6)=30),s 的值不可能是"5 8 6 7",同理i 的值一定小于6,j的值可能等于2,n的值可能等于4,故本题选B选项。
11.C
【详解】本题考查的是对分查找。对分查找首先将查找键与有序数组内处于中间位置的元素进行比较,如果中间位置上的元素内的数值与查找键不同,根据数组元素的有序性,就可确定应该在数组的前半部分还是后半部分继续进行查找;在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。在数组中的数据是有序的,如果是增序的,是指下标越小的数组元素中存储的数据也越小,减序则相反。本题依次访问的数据为172,177,178,选项C正确。
12.B
【详解】本题考查的是算法的基础知识。选项A选择排序和冒泡排序的比较次数是一样的,但是交换次数,不一定是相同的,选项B数组共7个数,对分查找的平均查找次数为(1+2*2+4*3)/7=17/7,选项C rs.fields(1)是某记录的第2个字段的值,选项D指的是冒泡排序,不是选择排序,所以只有选项B是正确的。
13.B
【详解】本题主要考查解析算法。海伦公式,公式中a,b,c分别为三角形三边长,p为半周长,S为三角形的面积。故利用海伦公式求三角形面积的算法属于解析法,故本题选B选项。
14.A
【详解】本题主要考查冒泡排序。程序中外层循环变量i从1到3,内层循环体当a(j)<a(j-1)时,a(j)与a(j-1)互换位置,即冒泡排序,程序执行中,a数组分别为:
2,118,36,98,15,88
2,15,118,36,98,88
2,15,36,118,88,98
因此C选项正确。
15.B
【详解】
16.B
【详解】本题考查选择排序算法和字符串的比较。字符串的比较是按照从左到右单个字符进行比较的,如果第一个字符串的第一个字符比第二个字符串的第一个字符的ASCII代码大则大,ASCII码表里面,数字<大写字母<小写字母。第一趟排序,a(5)~a(2)依次和a(1)比较,最小的值放到a(1)中,a(1)~a(6)的值依次为:Change,bellow,sky,sk2, hippo ,Half;第二趟排序,a(5)~a(3) 依次和a(2)比较,最小的值放到a(2)中,a(1)~a(6)的值依次为:Change,bellow,sky,sk2, hippo ,Half;第三趟排序,a(5)~a(4) 依次和a(3)比较,最小的值放到a(3)中,数组元素a(1)~a(6)的值依次为:Change,bellow,hippo,sk2,sky,Half,选项B正确。
17.C
【详解】本题考查二分查找算法。根据分析可知:第一次:从7袋盐中任取6份,平均分成两份,分别放在天平两端,若天平平衡,则未取那袋即为稍轻的,若天平不平衡则需要进行第二次称量;第二次:从天平较高端的3袋中,任取2袋,分别放在天平两端,若天平平衡,则未取那袋即为较轻的,若天平秤不平衡,较高端即为较轻那袋;所以用天平至少要称2次才能保证找出这袋盐,选项C正确。
18.B
【详解】本题考查二分查找。二分查找算法要求数据必须是有序的,可以是升序排列也可以是降序排列,但必须保持一种统一的顺序,这样才能通过比较中间元素来决定是在左半部分还是右半部分继续查找。故答案为:B。
19.B
【详解】本题主要考查冒泡排序和选择排序知识点。冒泡排序中,值相同的两个数据在排序前后的相对位置不会变动;选择排序中,值相同的两个数据在排序前后的相对位置可能变动,故本题选B选项。
20.A
【详解】本题考查的是对分查找。由Key= Int(Rnd*32) *3+3可知key的取值范围是[3,96]中能被3整除的整数。采用倒推法,选项A中20=3*(3*(3*0+2))+2,故可知第一次查找中间值a(5)=24要小于key值;第二次查找中间值a(8)=54要大于key值;第三次查找中间值a(6)=32要小于key值;第四次查找中间值a(7)=37等于key值,但37不能被3整除,故不可能;以此类推,选项BCD都有可能。故应选A。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$