一、单选题(每题 2 分,共 30 分)
1
、下面
C++
代码用于求斐波那契数列,该数列第
1
、
2
项为
1,以后各项均是 前两项之和。下面有关说法错误的是( )
。

A. fiboA( )
⽤
递归
⽅
式,
fiboB()
循环
⽅
式
B. fiboA( )
更加符合斐波那契数列的数学定义,直观易于理解,
⽽
fiboB() 需 要将数学定义转换为计算机程序实现
C. fiboA( )
不仅仅更加符合数学定义,直观易于理解,且因代码量较少执⾏ 效率更
⾼
D. fiboB( )
虽然代码量有所增加,但其执
⾏效率更⾼.
【答案】
C
【考纲知识点】算法知识点
【解析】
fiboA 是很好理解的,但是执行效率不高,有的计算是重复的,导致效 率低。
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
【考纲知识点】算法知识点
【解析】本题考察归并排序。归并排序需要先将排序序列一分为二,左边的元素 的区间是
[s,m],
右边元素区间是
[m+1,t],然后递归排序两个子序列后,将有序的 子序列合并。
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
【考纲知识点】算法知识点
【解析】本题考察递归算法。输出
fracA
函数,是先输出
1
,再输出
5 的阶乘, 120;23
行代码,执行
fracB
函数,此时
stepCount
从
2
开始计数,依次输出
2/3/4/5/6, 再输出
5
的阶乘
120
。
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
【考纲知识点】排序算法知识点
【解析】本题考察排序算法。前一个数字,下标是
j 的数字是偶数,后面的数字 下标是
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
【考纲知识点】指针知识点
【解析】本题考察双链表知识点。每个节点需要 2 个指针,指向前驱节点和后继 节点。按照要求,新的节点要求插入到链表头部。头节点和新插入的节点都需要 修改。
B
选项能够完成新节点的插入。
6
、有关下
⾯
C++代码说法正确的是( )。

A.
如果
x
⼩
于
10
,
rc
值也不会超过
20
B. foo
可能
⽆
限递归
C. foo
可以求出
x
和
y
的最
⼤
公共质因
⼦
D. foo
能够求出
x
和
y
的最
⼩
公倍数
【答案】
A
【考纲知识点】数学知识点
【解析】本题考察数学算法,求最大公约数。这是典型的最大公约数写法的变形。 排除法选
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
【考纲知识点】排序算法知识点
【解析】本题考察快速排序。
Less
数组保存的是小于等于
pivot
,然后加上 pivot 元素,再加上大于等于
pivot
的数组。
8
、下
⾯
C++
代码中的
isPrimeA()
和
isPrimeB()
都
⽤
于判断参数
N 是否素数 , 有关其时间复杂度的正确说 法是( )。


【答案】
B
【考纲知识点】数学知识点
【解析】本题考察数学知识,判断质数。
A
函数时间复杂度是
O(n/2)
,
B 函数算 法是
O(sqrt(n))
,大部分情况后者是优的,值更小。
9
、下
⾯
C++
代码
⽤
于有序
list
的
⼆分查找 ,