一、单选题(每题 2 分,共 30 分)
第1题 下面C++代码用于求斐波那契数列,该数列第1、2项为1,以后各项均是前两项之和。下面有关说法错误的是( )。
A. fiboA( ) 用递归方式, fiboB() 循环方式
B. fiboA( ) 更加符合斐波那契数列的数学定义,直观易于理解,而 fiboB() 需要将数学定义转换为计算机程序实现
C. fiboA( ) 不仅仅更加符合数学定义,直观易于理解,且因代码量较少执行效率更高
D. fiboB( ) 虽然代码量有所增加,但其执行效率更高
答案:C
第2题
下面C++代码以递归方式实现合并排序,并假设 merge (int T[], int R[], int s, int m, int t)
函数将有序(同样排序规则)的 T[s…m]
和 T[m+1…t]
归并到 R[s…t]
中。横线处应填上代码是( )。
A. mergeSort(SList, T2, s, m,len), mergeSort(SList, T2, m,t,len)
B. mergeSort(SList, T2, s, m-1,len), mergeSort(SList, T2, m+1,t,len)
C. mergeSort(SList, T2, s, m,len), mergeSort(SList, T2, m+1,t,len)
D. mergeSort(SList, T2, s, m-1,len), mergeSort(SList, T2, m-1,t,len)
答案:C
第3题 阅读下面的C++代码,执行后其输出是( )。
A. 1->120<===>2->120
B. 1->120<===>1->120
C. 1->120<===>1->2->3->4->5->120
D. 1->120<===>2->3->4->5->6->120
答案:D
第4题 下面的C++用于对 lstA 排序,使得偶数在前奇数在后,横线处应填入( )。
A. isEven(lstA[j]) && !isEven(lstA[j+1])
B. !isEven(lstA[j]) && isEven(lstA[j+1])
C. lstA[j] > lstA[j+1]
D. lstA[j] < lstA[j+1]
答案:A
第5题 下面的C++代码用于将字符串保存到带头节点的双向链表中,并对重复的串计数,然后将最新访问的串的节点放在链头便于查找。横线处应填入代码是( )。
A. if(pHead) {p->next = pHead->next, pHead->next->prev = p;}
B. if(pHead->next) {p->next = pHead->next, pHead->next->prev = p;}
C. p->next = pHead->next, pHead->next->prev = p;
D. 触发异常,不能对空指针进行操作。
答案:B
第6题 有关下面C++代码说法正确的是( )。
A. 如果 x 小于10, rc 值也不会超过20
B. foo 可能无限递归
C. foo 可以求出 x 和 y 的最大公共质因子
D. foo 能够求出 x 和 y 的最小公倍数
答案:A
第7题 下面的C++代码实现对 list 的快速排序,有关说法,错误的是( )。
A. qSort(less) + qSort(greater) + (vector<int>)pivot
B. (vector<int>)pivot + (qSort(less) + qSort(greater))
C. (qSort(less) + (vector<int>)pivot + qSort(greater))
D. qSort(less) + pivot + qSort(greater)
答案:C
第8题
下面C++代码中的 isPrimeA()
和 isPrimeB()
都用于判断参数N是否素数,有关其时间复杂度的正确说法是( )。
A. isPrimeA( ) 的最坏时间复杂度是 , isPrimeB( ) 的最坏时间复杂度是 , isPrimeA() 优于 isPrimeB()
B. isPrimeA() 的最坏时间复杂度是 , isPrimeB( ) 的最坏时间复杂度是 , isPrimeB() 绝大多数情况下优于 isPrimeA()
C. isPrimeA() 的最坏时间复杂度是 , isPrimeB( ) 的最坏时间复杂度是 , isPrimeA( ) 优于isPrimeB( )
D. isPrimeA() 的最坏时间复杂度是 , isPrimeB( ) 的最坏时间复杂度是 , isPrimeA() 优于isPrimeB( )
答案:B
第9题 下面C++代码用于有序 list 的二分查找,有关说法错误的是( )。
A. 代码采用二分法实现有序 list 的查找
B. 代码采用分治算法实现有序 list 的查找
C. 代码采用递归方式实现有序 list 的查找
D. 代码采用动态规划算法实现有序 list 的查找
答案:D
第10题
在上题的 _binarySearch
算法中,如果 lst 中有 N 个元素,其时间复杂度是( )。
A. O(N)
B. O(logN)
C. O(NlogN)
D. O(N^2)
答案:B
第11题 下面的C++代码使用数组模拟整数加法,可以处理超出大整数范围的加法运算。横线处应填入代码是( )。
A. c.push_back(t % 10), t = t % 10;
B. c.push_back(t / 10), t = t % 10;
C. c.push_back(t / 10), t = t / 10;
D. c.push_back(t % 10), t = t / 10;
答案:D
第12题 有关下面C++代码的说法正确的是( )。
A. 上述代码构成单向链表
B. 上述代码构成双向链表
C. 上述代码构成循环链表
D. 上述代码构成指针链表
答案:B
第13题 通讯卫星在通信网络系统中主要起到()的作用。
A. 信息过滤
B. 信号中继
C. 避免攻击
D. 数据加密
答案:B
第14题 小杨想编写一个判断任意输入的整数N是否为素数的程序,下面哪个方法不合适?( )
A. 埃氏筛法
B. 线性筛法
C. 二分答案
D. 枚举法
答案:C
第15题 下面的排序算法都要处理多趟数据,哪种排序算法不能保证在下一趟处理时从待处理数据中选出最大或最小的数据?( )
A. 选择排序
B. 快速排序
C. 堆排序
D. 冒泡排序
答案:B
二、判断题(每题 2 分,共 20 分)
第16题
归并排序的时间复杂度是 O(NlogN)
。( )
答案:正确
第17题
小杨在生日聚会时拿一块 H*W
的巧克力招待来的K个小朋友,保证每位小朋友至少能获得一块相同大小的巧克力。那么小杨想分出来最大边长的巧克力可以使用二分法。( )
答案:错误
第18题 以下C++代码能以递归方式实现斐波那契数列,该数列第1、2项为1,以后各项均是前两项之和。( )
答案:错误
第19题 贪心算法可以达到局部最优,但可能不是全局最优解。( )
答案:正确
第20题 小杨设计了一个拆数程序,它能够将任意的非质数自然数N转换成若干个质数的乘积,这个程序是可以设计出来的。( )
答案:正确
第21题 插入排序有时比快速排序时间复杂度更低。( )
答案:正确
第22题 下面的C++代码能实现十进制正整数N转换为八进制并输出。( )
答案:错误
第23题
对数组 int arr[] = {2, 6, 3, 5, 4, 8, 1, 0, 9, 10}
执行 sort(arr, arr+10)
,则执行后 arr中的数据调整为 {0, 1, 2, 3, 4, 5, 6, 8,9, 10}
。( )
答案:正确
第24题
小杨想写一个程序来算出正整数 N
有多少个因数,经过思考他写出了一个重复没有超过 N/2
次的循环就能够算出来了。( )
答案:正确
第25题 同样的整数序列分别保存在单链表和双向链中,这两种链表上的简单冒泡排序的复杂度相同。( )
答案:正确
三、编程题(每题 25 分,共 50 分)