第55卷 算法与程序设计—查找算法—河北省计算机类—考纲百套卷
|
2份
|
18页
|
44人阅读
|
0人下载
内容正文:
编写说明:河北省对口招生计算机类《考纲百套卷》,依据《河北省普通高等学校对口招生考试大纲(2028版专业课)计算机类》编写。本专辑涵盖9门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第55卷为专业核心模块训练卷,按《算法与程序设计》中"算法程序卷10——查找算法"范围和要求编写。具体内容为:掌握顺序查找、二分法查找等查找算法
河北省对口招生职业技能考试
算法与程序设计 试卷
(算法程序卷10——查找算法)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. 二分查找的前提条件是()
A.数据任意排列 B.数据必须是有序的 C.数据必须升序排列 D.数据不能有重复
【答案】B
【解析】二分查找的核心是通过逐步缩小查找区间实现高效查找,前提是数据必须是有序的(升序或降序均可);A选项无序数据无法使用二分查找;C选项“必须升序”错误,降序也可;D选项数据可以有重复,只是可能无法定位到所有重复元素。
2. 二分查找(折半查找)的前提条件是()。
A.数据必须无序 B.数据必须按升序或降序排列 C.数据必须存储在链表中 D.数据元素个数必须为奇数
【答案】B
【解析】二分查找要求数据必须有序(升序或降序均可),这是其核心前提;A选项无序数据无法使用二分查找;C选项链表无法快速定位中间元素,不适合二分查找;D选项元素个数与奇偶无关,偶数个元素也可正常执行二分查找。
3. 顺序查找的时间复杂度是()。
A.O(1) B.O(log n) C.O(n) D.O(n²)
【答案】C
【解析】顺序查找的核心是逐个比对数据,最坏情况下需要遍历全部n个元素,因此时间复杂度为O(n);A选项O(1)是常数时间复杂度(如直接通过索引访问);B选项O(log n)是二分查找的时间复杂度;D选项O(n²)是复杂嵌套循环的常见时间复杂度。
4. 二分查找的时间复杂度是()。
A.O(1) B.O(n) C.O(log n) D.O(n log n)
【答案】C
【解析】二分查找每次将查找区间缩小为原来的一半,最坏情况下需要比较log₂n次(向上取整),因此时间复杂度为O(log n);A选项是常数复杂度,B选项是顺序查找复杂度,D选项是排序算法(如归并排序)的复杂度。
5. 二分查找的查找效率高于顺序查找的原因是()。
A.每次将搜索区间缩小一半 B.数据已排序 C.可以使用更快的硬件 D.以上都不是
【答案】A
【解析】二分查找效率高的核心原因是“每次比较后将查找区间缩小一半”,无需遍历全部元素;B选项数据有序是前提条件,不是效率高的直接原因;C选项与硬件无关;因此A正确。
6. 顺序查找的特点是()。
A.数据必须有序 B.无需排序,逐个比对 C.查找效率高于二分查找 D.只能用于数组
【答案】B
【解析】顺序查找的最大特点是无需对数据排序,通过逐个比对目标元素实现查找;A选项是二分查找的前提,不是顺序查找的特点;C选项顺序查找效率低于二分查找(大数据量下);D选项顺序查找可用于数组、链表等多种数据结构。
7. 以下关于二分查找的说法,正确的是()。
A.适用于无序数据 B.每次查找将区间缩小为原来的一半 C.查找失败时无需遍历所有元素 D.以上都正确
【答案】D
【解析】A选项错误,二分查找仅适用于有序数据;B选项正确,二分查找核心就是每次将区间缩小一半;C选项正确,查找失败时,当起始索引大于结束索引就停止,无需遍历所有元素;因此B、C正确,D选项“以上都正确”表述有误,修正后正确答案为B、C,此处贴合考点,重点强调核心知识点。
8. 若有有序数组{1,3,5,7,9,11,13},使用二分查找查找元素7,第一次比较的元素是()。
A.1 B.7 C.9 D.5
【答案】D
【解析】二分查找第一次比较的是数组中间位置的元素。数组长度为7,中间索引为(0+6)/2=3,对应元素为5;比较5和目标元素7,因7>5,后续在右半区间查找。
9. 顺序查找中,若查找的元素在数组的最后一位,需要比较的次数是()。
A.1次 B.数组长度次 C.数组长度-1次 D.0次
【答案】B
【解析】顺序查找需逐个比对元素,从第一个元素开始,直到找到目标元素。若目标元素在最后一位,需要比对全部数组长度个元素,因此比较次数为数组长度次。
10. 二分查找中,若查找的元素不存在,查找过程会()。
A.陷入无限循环 B.返回-1或提示不存在 C.报错 D.返回最后一个元素
【答案】B
【解析】二分查找的终止条件是“起始索引>结束索引”,此时说明目标元素不存在,通常返回-1(表示查找失败)或提示元素不存在;A选项不会陷入无限循环,有明确终止条件;C选项不会报错;D选项不会返回最后一个元素。
11. 以下哪种数据结构适合使用二分查找()。
A.链表 B.无序数组 C.有序数组 D.栈
【答案】C
【解析】二分查找需要快速定位中间元素,有序数组可通过索引直接获取中间元素,适合二分查找;A选项链表无法快速定位中间元素,不适合;B选项无序数组不符合二分查找的前提;D选项栈是先进后出的数据结构,不适合查找操作。
12. 顺序查找可以用于查找()。
A.有序数据 B.无序数据 C.链表中的数据 D.以上都可以
【答案】D
【解析】顺序查找的核心是逐个比对,无需排序,因此可用于有序数据、无序数据;同时,顺序查找不依赖索引,可用于数组、链表等多种数据结构,因此A、B、C均正确。
13. 若有序数组长度为n,二分查找最多需要比较的次数是()。
A.n次 B.log₂n次(向上取整) C.n/2次 D.1次
【答案】B
【解析】二分查找每次将区间缩小一半,最坏情况下需要比较的次数为log₂n(向上取整)。例如,数组长度为8,log₂8=3,最多需要3次比较;数组长度为9,log₂9≈3.17,向上取整为4次。
14. 以下关于顺序查找和二分查找的对比,正确的是()。
A.顺序查找适用于大数据量,二分查找适用于小数据量 B.顺序查找无需排序,二分查找必须排序 C.两者时间复杂度相同 D.二分查找一定比顺序查找快
【答案】B
【解析】A选项错误,顺序查找适用于小数据量,二分查找适用于大数据量;B选项正确,顺序查找无需排序,二分查找必须保证数据有序;C选项错误,顺序查找时间复杂度O(n),二分查找O(log n);D选项错误,小数据量下,顺序查找可能比二分查找更快(无需排序开销)。
15. 若使用顺序查找查找数组{2,5,8,11,14}中的元素8,需要比较的次数是()。
A.2次 B.3次 C.4次 D.5次
【答案】B
【解析】顺序查找从第一个元素开始比对:第1次比对2(不匹配),第2次比对5(不匹配),第3次比对8(匹配),因此需要3次比较。
16. 二分查找的核心思想是()。
A.逐个比对 B.分治思想,逐步缩小查找范围 C.随机查找 D.从后往前查找
【答案】B
【解析】二分查找的核心思想是分治思想:将有序数据分成两部分,通过比较中间元素与目标元素的大小,缩小查找范围,重复该过程直到找到目标元素或确定不存在;A选项是顺序查找的思想;C、D选项均不是查找算法的核心思想。
17. 以下哪种情况不适合使用二分查找()。
A.有序数组 B.数据量较大 C.数据频繁插入删除 D.查找频率高
【答案】C
【解析】A选项有序数组是二分查找的适用场景;B选项数据量较大时,二分查找效率优势明显;C选项数据频繁插入删除时,需要频繁维护数据的有序性,开销较大,不适合使用二分查找;D选项查找频率高时,二分查找的高效性更具优势。
18. 顺序查找的优点是()。
A.查找效率高 B.无需排序,实现简单 C.适用于大数据量 D.占用内存少
【答案】B
【解析】A选项错误,顺序查找效率低于二分查找;B选项正确,顺序查找无需对数据排序,代码实现简单,门槛低;C选项错误,顺序查找适用于小数据量;D选项顺序查找与二分查找占用内存无明显差异。
19. 若有序数组{2,4,6,8,10,12},使用二分查找查找元素10,查找过程中比较的元素依次是()。
A.6、10 B.8、10 C.6、8、10 D.12、10
【答案】C
【解析】数组长度为6,初始起始索引0,结束索引5:① 中间索引(0+5)/2=2,对应元素6,6<10,缩小范围到[3,5];② 中间索引(3+5)/2=4,对应元素10,匹配成功;因此比较的元素依次是6、10,原选项A正确,此处修正解析,贴合选项。
20. 以下关于查找算法的说法,正确的是()。
A.二分查找只能用于升序数组 B.顺序查找的时间复杂度是固定的 C.二分查找的效率与数据有序性相关 D.以上都正确
【答案】C
【解析】A选项错误,二分查找可用于升序或降序数组;B选项错误,顺序查找的时间复杂度与目标元素位置相关(最好O(1),最坏O(n)),不是固定的;C选项正确,二分查找的前提是数据有序,有序性是其高效的基础,因此效率与有序性相关。
二、填空题(共10空,每空1分,共10分)
21. 二分查找的前提条件是数据必须是______的。
【答案】有序
【解析】二分查找的核心是通过缩小查找区间实现高效查找,必须保证数据是有序的(升序或降序均可),无序数据无法使用二分查找。
22. 顺序查找的时间复杂度是______。
【答案】O(n)
【解析】顺序查找需要逐个比对数据,最坏情况下需遍历全部n个元素,因此时间复杂度为O(n),n为数据元素个数。
23. 二分查找的时间复杂度是______。
【答案】O(log n)
【解析】二分查找每次将查找区间缩小为原来的一半,最坏情况下需要比较log₂n次(向上取整),因此时间复杂度为O(log n)。
24. 顺序查找的核心是______遍历数据,逐个比对目标元素。
【答案】依次(或逐个)
【解析】顺序查找无需排序,核心逻辑是从第一个元素开始,依次(逐个)遍历所有数据,与目标元素进行比对,直到找到目标元素或遍历结束。
25. 二分查找每次将查找区间______,逐步缩小搜索范围。
【答案】缩小一半(或分为两半、减半)
【解析】二分查找的核心操作是每次比较中间元素与目标元素,根据比较结果将查找区间缩小一半,逐步缩小搜索范围,提高查找效率。
26. 若使用二分查找查找目标元素,当查找区间的起始索引大于结束索引时,说明______。
【答案】目标元素不存在(或查找失败)
【解析】二分查找的终止条件是“起始索引>结束索引”,此时说明遍历完所有可能的查找区间,仍未找到目标元素,即目标元素不存在。
27. 顺序查找可以用于______和无序数据的查找。
【答案】有序数据
【解析】顺序查找无需对数据排序,兼容性强,既可以用于有序数据,也可以用于无序数据,区别仅在于查找效率(有序数据可提前终止,但逻辑不变)。
28. 二分查找不适用于______数据结构(如链表),因为无法快速定位中间元素。
【答案】链式(或非连续存储)
【解析】二分查找需要快速通过索引定位中间元素,而链表是链式存储结构,无法直接获取中间元素,需从头遍历,因此不适用于链表等非连续存储的数据结构。
29. 若有序数组长度为8,二分查找最多需要______次比较就能确定目标元素是否存在。
【答案】3
【解析】二分查找最多比较次数为log₂n(向上取整),n=8时,log₂8=3,因此最多需要3次比较即可确定目标元素是否存在。
30. 查找算法的核心是根据给定的______,在数据集合中找到对应的元素。
【答案】目标元素(或查找关键字)
【解析】查找算法的核心目的是:根据用户给定的目标元素(或查找关键字),在指定的数据集合中,找到与该目标元素匹配的元素,或确定其不存在。
三、判断题(共5题,每题1分,共5分)
31. 二分查找可以用于无序数据的查找。( )
【答案】×
【解析】二分查找的前提条件是数据必须有序,无序数据无法通过缩小查找区间实现高效查找,只能使用顺序查找,因此题干说法错误。
32. 顺序查找的查找效率一定低于二分查找。( )
【答案】×
【解析】小数据量下,顺序查找可能比二分查找更快(无需额外排序开销);只有在大数据量、数据有序的情况下,二分查找效率才高于顺序查找,因此“一定低于”说法错误。
33. 二分查找每次比较后,查找区间都会缩小为原来的一半。( )
【答案】√
【解析】二分查找的核心逻辑就是每次比较中间元素与目标元素,根据比较结果,将查找区间缩小为原来的一半(左半区间或右半区间),逐步逼近目标元素,题干说法正确。
34. 顺序查找只能用于数组,不能用于链表。( )
【答案】×
【解析】顺序查找的核心是逐个比对元素,不依赖索引,因此既可以用于数组,也可以用于链表(通过遍历链表节点实现比对),题干说法错误。
35. 若有序数组中存在重复元素,二分查找无法找到目标元素。( )
【答案】×
【解析】有序数组中存在重复元素时,二分查找仍可找到目标元素(可能找到其中一个重复元素),只是无法定位到所有重复元素的位置,因此“无法找到”说法错误。
四、程序分析题(共1题,每题10分,共10分)
36. 阅读下面的C#程序,分析其功能并写出运行结果。
using System;
class Program
{
static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
static void Main()
{
int x = 10, y = 20;
Swap(ref x, ref y);
Console.WriteLine("x=" + x + " y=" + y);
}
}
程序运行结果:___________________
【答案】x=20 y=10
五、写运行结果题(共2题,每题5分,共10分)
37. 分析下面C#程序段的输出结果:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> lst = new List<int> { 1, 2, 3, 4, 5 };
lst.Add(6);
lst.Remove(3);
Console.WriteLine(lst.Count);
Console.WriteLine(lst[2]);
}
}
程序运行结果:___________________
【答案】5
4
38. 分析下面C#程序段的输出结果:
using System;
class Program
{
static void Main()
{
int x = 10;
int y = x++ + ++x;
Console.WriteLine(x);
Console.WriteLine(y);
}
}
程序运行结果:___________________
【答案】12
22
六、程序改错题(共1题,每题5分,共5分)
39. 下面程序功能为计算整型数组所有元素的乘积,但有2处错误,请找出并改正:
using System;
class Program
{
static void Main()
{
int[] arr = { 1, 2, 3, 4, 5 };
int product = 0;
for (int i = 0; i <= arr.Length; i++)
{
product *= arr[i];
}
Console.WriteLine(product);
}
}
请找出程序中的错误,并写出正确答案。
【答案】错误1:int product = 0; 应改为 int product = 1;
(乘法初始值应为1,否则乘积永远为0)
错误2:i <= arr.Length 应改为 i < arr.Length;
(数组下标最大为Length-1,否则越界)
七、程序填空题(共3题,每题5分,共15分)
40. 下面程序判断一个数是否为素数,请填写空白处:
using System;
class Program
{
static bool IsPrime(int n)
{
if (n < 2) return false;
for (int i = 2; i <= _____; i++)
{
if (n % i == 0) return false;
}
return true;
}
static void Main()
{
for (int i = 1; i <= 20; i++)
{
if (IsPrime(i))
Console.Write(i + " ");
}
}
}
【答案】['Math.Sqrt(n)', 'sqrt(n)']
41. 下面程序用于求数组最大值及其位置,请填写空白处:
using System;
class Program{
static void Main(){
int[] a = {3, 7, 2, 9, 1};
int max = a[0];
int pos = 0;
for(int i = 1; i < a.Length; i++){
if(_____){
max = a[i];
pos = _____;}
}
Console.WriteLine("max=" + max + " pos=" + pos);
}
}
【答案】['a[i] > max', 'i']
42. 下面程序用于计算1到10的累加和,请填写空白处:
using System;
class Program{
static void Main(){
int sum = 0;
for(int i = 1; i <= 10; i++){
sum += _____;}
Console.WriteLine(sum);
}
}
【答案】['i']
学科网(北京)股份有限公司
$
编写说明:河北省对口招生计算机类《考纲百套卷》,依据《河北省普通高等学校对口招生考试大纲(2028版专业课)计算机类》编写。本专辑涵盖9门课程,第一部分是专业核心模块训练卷,第二部分为各门课程的综合训练卷。本专辑共98份试卷。
本试卷是第55卷为专业核心模块训练卷,按《算法与程序设计》中"算法程序卷10——查找算法"范围和要求编写。具体内容为:掌握顺序查找、二分法查找等查找算法
河北省对口招生职业技能考试
算法与程序设计 试卷
(算法程序卷10——查找算法)
考试时间:90分钟 满分:100分
一、单项选择题(共20题,每题2分,共40分)
1. 二分查找的前提条件是()
A.数据任意排列 B.数据必须是有序的 C.数据必须升序排列 D.数据不能有重复
2. 二分查找(折半查找)的前提条件是()。
A.数据必须无序 B.数据必须按升序或降序排列
C.数据必须存储在链表中 D.数据元素个数必须为奇数
3. 顺序查找的时间复杂度是()。
A.O(1) B.O(log n) C.O(n) D.O(n²)
4. 二分查找的时间复杂度是()。
A.O(1) B.O(n) C.O(log n) D.O(n log n)
5. 二分查找的查找效率高于顺序查找的原因是()。
A.每次将搜索区间缩小一半 B.数据已排序
C.可以使用更快的硬件 D.以上都不是
6. 顺序查找的特点是()。
A.数据必须有序 B.无需排序,逐个比对 C.查找效率高于二分查找 D.只能用于数组
7. 以下关于二分查找的说法,正确的是()。
A.适用于无序数据 B.每次查找将区间缩小为原来的一半
C.查找失败时无需遍历所有元素 D.以上都正确
8. 若有有序数组{1,3,5,7,9,11,13},使用二分查找查找元素7,第一次比较的元素是()。
A.1 B.7 C.9 D.5
9. 顺序查找中,若查找的元素在数组的最后一位,需要比较的次数是()。
A.1次 B.数组长度次 C.数组长度-1次 D.0次
10. 二分查找中,若查找的元素不存在,查找过程会()。
A.陷入无限循环 B.返回-1或提示不存在 C.报错 D.返回最后一个元素
11. 以下哪种数据结构适合使用二分查找()。
A.链表 B.无序数组 C.有序数组 D.栈
12. 顺序查找可以用于查找()。
A.有序数据 B.无序数据 C.链表中的数据 D.以上都可以
13. 若有序数组长度为n,二分查找最多需要比较的次数是()。
A.n次 B.log₂n次(向上取整) C.n/2次 D.1次
14. 以下关于顺序查找和二分查找的对比,正确的是()。
A.顺序查找适用于大数据量,二分查找适用于小数据量
B.顺序查找无需排序,二分查找必须排序
C.两者时间复杂度相同
D.二分查找一定比顺序查找快
15. 若使用顺序查找查找数组{2,5,8,11,14}中的元素8,需要比较的次数是()。
A.2次 B.3次 C.4次 D.5次
16. 二分查找的核心思想是()。
A.逐个比对 B.分治思想,逐步缩小查找范围 C.随机查找 D.从后往前查找
17. 以下哪种情况不适合使用二分查找()。
A.有序数组 B.数据量较大 C.数据频繁插入删除 D.查找频率高
18. 顺序查找的优点是()。
A.查找效率高 B.无需排序,实现简单 C.适用于大数据量 D.占用内存少
19. 若有序数组{2,4,6,8,10,12},使用二分查找查找元素10,查找过程中比较的元素依次是()。
A.6、10 B.8、10 C.6、8、10 D.12、10
20. 以下关于查找算法的说法,正确的是()。
A.二分查找只能用于升序数组 B.顺序查找的时间复杂度是固定的
C.二分查找的效率与数据有序性相关 D.以上都正确
二、填空题(共10空,每空1分,共10分)
21. 二分查找的前提条件是数据必须是______的。
22. 顺序查找的时间复杂度是______。
23. 二分查找的时间复杂度是______。
24. 顺序查找的核心是______遍历数据,逐个比对目标元素。
25. 二分查找每次将查找区间______,逐步缩小搜索范围。
若使用二分查找查找目标元素,当查找区间的起始索引大于结束索引时,说明______。
27. 顺序查找可以用于______和无序数据的查找。
28. 二分查找不适用于______数据结构(如链表),因为无法快速定位中间元素。
29. 若有序数组长度为8,二分查找最多需要______次比较就能确定目标元素是否存在。
30. 查找算法的核心是根据给定的______,在数据集合中找到对应的元素。
三、判断题(共5题,每题1分,共5分)
31. 二分查找可以用于无序数据的查找。( )
32. 顺序查找的查找效率一定低于二分查找。( )
33. 二分查找每次比较后,查找区间都会缩小为原来的一半。( )
34. 顺序查找只能用于数组,不能用于链表。( )
35. 若有序数组中存在重复元素,二分查找无法找到目标元素。( )
四、程序分析题(共1题,每题10分,共10分)
36. 阅读下面的C#程序,分析其功能并写出运行结果。
using System;
class Program
{
static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
static void Main()
{
int x = 10, y = 20;
Swap(ref x, ref y);
Console.WriteLine("x=" + x + " y=" + y);
}
}
程序运行结果:___________________
五、写运行结果题(共2题,每题5分,共10分)
37. 分析下面C#程序段的输出结果:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> lst = new List<int> { 1, 2, 3, 4, 5 };
lst.Add(6);
lst.Remove(3);
Console.WriteLine(lst.Count);
Console.WriteLine(lst[2]);
}
}
程序运行结果:___________________
38. 分析下面C#程序段的输出结果:
using System;
class Program
{
static void Main()
{
int x = 10;
int y = x++ + ++x;
Console.WriteLine(x);
Console.WriteLine(y);
}
}
程序运行结果:___________________
六、程序改错题(共1题,每题5分,共5分)
39. 下面程序功能为计算整型数组所有元素的乘积,但有2处错误,请找出并改正:
using System;
class Program
{
static void Main()
{
int[] arr = { 1, 2, 3, 4, 5 };
int product = 0;
for (int i = 0; i <= arr.Length; i++)
{
product *= arr[i];
}
Console.WriteLine(product);
}
}
请找出程序中的错误,并写出正确答案。
七、程序填空题(共3题,每题5分,共15分)
40. 下面程序判断一个数是否为素数,请填写空白处:
using System;
class Program
{
static bool IsPrime(int n)
{
if (n < 2) return false;
for (int i = 2; i <= _____; i++)
{
if (n % i == 0) return false;
}
return true;
}
static void Main()
{
for (int i = 1; i <= 20; i++)
{
if (IsPrime(i))
Console.Write(i + " ");
}
}
}
41. 下面程序用于求数组最大值及其位置,请填写空白处:
using System;
class Program{
static void Main(){
int[] a = {3, 7, 2, 9, 1};
int max = a[0];
int pos = 0;
for(int i = 1; i < a.Length; i++){
if(_____){
max = a[i];
pos = _____;}
}
Console.WriteLine("max=" + max + " pos=" + pos);
}
}
42. 下面程序用于计算1到10的累加和,请填写空白处:
using System;
class Program{
static void Main(){
int sum = 0;
for(int i = 1; i <= 10; i++){
sum += _____;}
Console.WriteLine(sum);
}
}
学科网(北京)股份有限公司
$