小测试-03月28号
朝外信奥1队 3月28号课堂测试
答案版
一、单项选择题
1. 在标准 ASCII 码表中,已知英文字母 Z 的 ASCII 码十进制表示是 90,那么英文字母 B 的 ASCII 码二进制表示是( )。
答案:B。B 的 ASCII 十进制是 66,二进制是 01000010。
2. 以下不能用作 C++ 程序中的标识符的是( )。
答案:A。
private 是关键字。3. NOI 复赛测评机所用的 Linux 系统属于( )。
答案:C。Linux 属于操作系统。
4. 下列排序算法中,稳定排序算法是( )。
答案:C。归并排序是稳定排序。
5. 搜索算法中的 BFS 算法经常用到的数据结构是( )。
答案:D。BFS 按层扩展,常用队列。
6. 在已经从小到大排好序的 n 元素单向链表中查询是否存在关键字为 k 的元素,最坏情况下运行的时间复杂度是( )。
答案:B。单向链表不能随机访问,只能顺扫。
7. 在下列各种排序算法中,不是以“比较”作为主要操作的算法是( )。
答案:D。桶排序属于非比较排序。
8. 关于计算机网络,下面的说法中正确的是( )。
答案:C。
9. 将 (2,6,10,17) 分别存储在某个地址区间为 0~10 的哈希表中,如果哈希函数 h(x)=( ),将不会产生冲突。
答案:D。对应值分别为 1、2、3、4,没有重复。
10. 现在有一个十六进制数 27,它等于二进制数的( )。
答案:C。十六进制
27 转二进制是 0010 0111。11. 某二叉树有 16 个结点都同时有左孩子结点和右孩子结点,则该二叉树中的叶子结点数是( )个。
答案:B。满二叉树性质:叶子数 = 度为 2 的结点数 + 1。
12. 现有 16 张不同的卡片,其中红、黄、蓝、绿色卡片各 4 张。从中任取 3 张,要求红色最多有 1 张并且 3 张卡片不能是同一种颜色,不同的取法组合共有( )种。
答案:B。
13. 有 8 个结点的非连通无向图最多有( )条边。
答案:C。把 8 个点分成 7 个点和 1 个点时边数最多,为
C(7,2)=21。14. 在 C++ 程序中用到的一个常量 a = 5e-6 在内存中占( )空间。
答案:D。浮点字面量默认是
double。15. 某单位安装一条电信宽带进行上网,运营商说下行速度是 500 Mbps。要下载大小为 10 GB 的软件,最快大约需要( )秒。
答案:C。10GB 约等于 80Gb,
80 / 0.5 ≈ 160 秒,最接近 200 秒。16. 大写字母 M 的 ASCII 码整数值和空格的 ASCII 码整数值之和,是字母 m 的 ASCII 码整数值。空格的 ASCII 码整数值是( )。
答案:A。小写字母比对应大写字母大 32。
17. 对于长度为 n 的数组,使用顺序查找查找某个元素,在最坏情况下时间复杂度是( )。
答案:C。最坏要把数组扫完。
18. 搜索算法中的 DFS 算法经常用到的数据结构是( )。
答案:B。DFS 常用栈或递归实现。
19. 在下列排序算法中,STL 中的 sort() 函数采用的主要算法是( )。
答案:B。竞赛语境下一般记作快速排序,工程实现通常是内省排序。
20. 以下不能对二维数组 a 进行正确初始化的语句是( )。
答案:A。声明了 2 行,却给了 3 组初始化列表。
21. 设 A=true,B=false,C=false,D=true,以下逻辑运算表达式的值为假的是( )。
答案:A。代入后分别为
false, true, true, true。22. 二叉树的中序序列为 ABCEFGHD,后序序列为 ABFHGEDC,则其前序序列为( )。
答案:B。
23. 从班级中体育比较好的 12 人中选 5 人去参加运动会,其中甲、乙、丙最多同时选两人,不同的选法共有( )种。
答案:B。总数
C(12,5)=792,减去甲乙丙全选时的 C(9,2)=36,得到 756。24. 以下哪个结构可以用来存储图?( )
答案:C。图的常见存储方式有邻接矩阵和邻接表。
二、阅读程序题
01 #include <iostream>
02 using namespace std;
03 int gcd(int a, int b){
04 int tmp;
05 if(b) tmp = a%b;
06 else return a;
07 while(tmp){
08 a = b;
09 b = tmp;
10 tmp = a%b;
11 }
12 return b;
13 }
14 int lcm(int a, int b){
15 return a/gcd(a,b)*b;
16 }
17 int main(){
18 int a,b;
19 cin >> a >> b;
20 cout << gcd(a, b) << endl;
21 return 0;
22 }
25. 若输入 0 2024,则输出结果为 0。
答案:错。输出为
2024。26. 将第 5 行中的
if(b) 改为 if(0 != b),程序的运行结果不会改变。答案:对。两种写法等价。
27. 若输入 2.4 4.8,则输出错误。
答案:对。程序按
int 读入,这组输入会导致读入失败,结果不符合正常题意。28. 将第 15 行
return a/gcd(a,b)*b 替换成 return a*b/gcd(a,b),程序的运行结果不会改变。答案:错。先乘再除更容易发生整型溢出。
29. 若输入数据为 20244204 12348,则输出为( )
答案:C。最大公约数是
36。30. 若将第 20 行替换成
cout << lcm(a, b) << endl,输入数据为 20244204 12348,则输出为( )答案:D。数学上的最小公倍数是
6943761972,但函数返回类型是 int,会溢出,常见环境下会输出负数。