#6566. 【大湾区】第二届C++语言试题小学组

【大湾区】第二届C++语言试题小学组

一,单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)

  1. ()是C++存储单个字符的数据类型。{{ select(1) }}
  • int
  • float
  • char
  • string
  1. ()是稳定的排序方式。{{ select(2) }}
  • 快速排序
  • 堆排序
  • 选择排序
  • 归并排序
  1. ()是8比特无符号整数能表示的最大数字。{{ select(3) }}
  • 127
  • 128
  • 255
  • 256
  1. 每个点都和所有别的点相连的图叫作()。{{ select(4) }}
  • 有向图
  • 完全图
  • 稠密图
  • 二分图
  1. 在一个有 10 个元素的序列中进行二分查找,每个元素被查找的概率相同,平均查询次数为()。{{ select(5) }}
  • 29 / 10
  • 1og2_2( 10 )
  • 19 / 10
  • 3
  1. 若( 120 )3_3表示 3 进制下的数字 120, 那么( 1026 )1_10 _0+( 1AB )1_16_6 = ()。{{ select(6) }}
  • (1001010010)2_2
  • (2654)8_8
  • (59D)1_16_6
  • (1222211)3_3
  1. 13 << 2 和 13 >> 2 的结果分别为()。{{ select(7) }}
  • 15 0
  • 52 3
  • 3 52
  • 0 15
  1. 在C++中, cout << () 不能输出数组 a 的地址。{{ select(8) }}
  • a
  • &a
  • &a[0]
  • *a
  1. 一棵有 9 个节点的树最多有()条边。{{ select(9) }}
  • 9
  • 8
  • 81
  • 36
  1. 下图中所使用的数据结构是()。

image

{{ select(10) }}

  • 哈希表
  • 队列
  • 链表
  1. 节点数为 3 的本质不同的二叉树有 () 种。{{ select(11) }}
  • 5
  • 3
  • 1
  • 9
  1. 某班有 30 名同学,有 20 名同学语文得到满分,有 25 名同学数学得到满分,最少有 () 名同学语、数得到满分。{{ select(12) }}
  • 20
  • 10
  • 15
  • 5
  1. 二进制小数110.011对应的十进制数是()。{{ select(13) }}
  • 6.75
  • 6.375
  • 3.75
  • 5.1
  1. a, b, c 为三个正整数,若a + b + c = 10, ( a, b, c )有()种不同的情况。{{ select(14) }}
  • 1331
  • 1000
  • 84
  • 120
  1. ()命令行可以生成一个源代码为 a.cpp 的可执行文件。{{ select(15) }}
  • cpp -o b a.cpp
  • cpp -g b a.cpp
  • g++ -o b a.cpp
  • g++ -g b a.ppp

二,阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确在答题卡上涂“A”,错误涂“B”;除第16题1分外,判断题每题1.5分,选择题每题3分,共计40分)

(一)

image

■判断题

  1. 若输人 65 10 A,则输出 65 10 A。(){{ select(16) }}
  • 正确
  • 错误
  1. 若输入 114 51.4 0,将输出0 51 r。(){{ select(17) }}
  • 正确
  • 错误
  1. 该程序中,头文件 #include< iostream>可以改成 #include<bits/stdc++.h>。(){{ select(18) }}
  • 正确
  • 错误

■选择题

  1. 若输出97 5 a,输入可能为()。{{ select(19) }}
  • 65 5.7 a
  • 97 5.7 a
  • 97 4.9 a
  • 65 4.9 a
  1. 若将“d = c”改成“d = c - '0’”,则可能()。{{ select(20) }}
  • 若输入的字符为数字,输出的第一个数字与其相同
  • 若输入的字符为小写字母,输出的第一个数字与其在字母表中的次序相同
  • 若输人的字符为大写字母,输出的第一个数字与其在字母表中的次序相同
  • 以上情况均不会出现
  1. 若将“d = c”改成“d = c - 48”,则可能()。{{ select(21) }}
  • 若输人的字符为数字,输出的第一个数字与其相同
  • 若输人的字符为小写字母,输出的第一个数字与其在字母表中的次序相同
  • 若输人的字符为大写字母,输出的第一个数字与其在字母表中的次序相同
  • 以上情况均不会出现

(二)

image

■判断题

  1. 上述代码中,第 13 行、第 14 行双重循环的次序先 i 后 j 改为先 j 后 i,输出结果不变。(){{ select(22) }}
  • 正确
  • 错误
  1. 上述代码中,第 13 行、第 14 行双重循环中第 10 行的 i = 0 改为 i = 1, 输出结果一定不变。(){{ select(23) }}
  • 正确
  • 错误
  1. 若输人数据中,1 ≤ n ≤ 1000,1 ≤ a[i] ≤ 1000000, 则所求答案一定没有溢出。(){{ select(24) }}
  • 正确
  • 错误

■选择题

  1. 当输入的 a[i][j] 全部都是 1 时,输出结果为()。{{ select(25) }}
  • 0
  • 1
  • (y2 - y1) * (x2 - x1)
  • (y2 - y1 + 1)*(x2 - x1 + 1)
  1. 当输人为:

image

输出为()。{{ select(26) }}

  • 4
  • 22
  • 25
  • 33
  1. 上述代码的时间复杂度为()。{{ select(27) }}
  • O(n * n)
  • O(n * n * q)
  • O(q)
  • O(max( n * n, q))

(三)

image

■判断题

  1. 上述代码实现了求任意两点之间的最短路。(){{ select(28) }}
  • 正确
  • 错误
  1. 上述代码中,输人的a[i][j]的最小上界为1,000,000,007。(){{ select(29) }}
  • 正确
  • 错误
  1. 去掉“(a[i][j] == MAXL? - 1 : a[i][j])” 中的括号 “()” 后程序仍能正常编译运行。(){{ select(30) }}
  • 正确
  • 错误

■选择题

  1. 上述代码的作用的算法名为()。{{ select(31) }}
  • Bellman-Ford
  • Floyd
  • SPFA
  • Dijkstra
  1. 上述代码的时间复杂度为()。{{ select(32) }}
  • O(n)
  • O(nlogn)
  • O(n2n^2)
  • O(n3n^3)
  1. 若输入数据为:

image

输出数据中有()个 -1。{{ select(33) }}

  • 0
  • 8
  • 12
  • 13

三、完善程序(单选题,每小题3分,共计30分)

(一) (区间极值)输人一个正整数 n,以及 n 个正整数组成的序列,输入一个正整数 q,以及 q 组询问,每组询问求区间最大值。

image image

  1. (1)处应填()。{{ select(34) }}
  • ST[0][i] = a[i]
  • ST[0][i] = 0
  • ST[i][0] = a[i]
  • ST[i][0] = 0
  1. (2)处应填()。{{ select(35) }}
  • (1 << i) - 1
  • 1 << (i - 1)
  • (1 << i) + 1
  • 1 << (i + 1)
  1. (3)处应填()。{{ select(36) }}
  • max(a[j], ST[i - 1][j + D])
  • max(a[j], ST[i - 1][j - D])
  • max(ST[i - 1][j], ST[i - 1][j + D])
  • max(ST[i - 1][j], ST[i - 1][j - D])
  1. (4)处应填()。{{ select(37) }}
  • floor(log2(D))
  • floor(ln(D))
  • round(log2(D))
  • round(ln(D))
  1. (5)处应填()。{{ select(38) }}
  • min(ST[q][1], ST[q][r - (1 << q)])
  • min(ST[q][1], ST[q][r -(1 << q) + 1])
  • max(ST[q][1], ST[q][r - (1 << q)])
  • max(ST[q][1], ST[q][r - (1 << q) + 1])

(二) (强连通分量)给出一张 n 个节点 m 条边的有向图,求这张图的强连通分量

输入: 第一行两个正整数 n, m 表示点数与边数。

接下来 m 行,每行两个正整数 x, y; 表示节点 x 到节点 y 之间有一条有向边。

接下来输入一个整数 q 表示询问数。

接下来 q 行,每行两个正整数 x, y,询问这两个点是否互相可达,即节点 x 可以通过有向边到达 y 点,反之亦然。

输出: 输出询问的答案

试补全程序。

image image image

  1. (1)处应填()。{{ select(39) }}
  • min(low[u], low[v])
  • min(low[u], dfn[v])
  • max(low[u], low[v])
  • max(low[u], dfn[v])
  1. (2)处应填()。{{ select(40) }}
  • stack[top] == u
  • dfn[u] == low[u]
  • stack[top] != u
  • dfn[u] != low[u]
  1. (3)处应填()。{{ select(41) }}
  • top != 0
  • instack[stack[top]]==1
  • stack[top] != cnt
  • stack[top] != u
  1. (4)处应填()。{{ select(42) }}
  • E[y].push_back(x)
  • E[x].push_back(y)
  • E[x].push(y)
  • E[y].push(x)
  1. (5)处应填()。{{ select(43) }}
  • dfn[x] == dfn[y]
  • low[x] == dfn[y]
  • scc[x] == scc[y]
  • instack[x] == instack[y]