Logo

2023年9月 GESP C++ 4级

GESP · 4级 · 2023-09

60:00
满分 100
时长 60 分钟
27

2023年9月 GESP C++ 4级认证考试真题(含编程操作题部分)

答题卡 已答 0/27
已答 正确 错误 编程题

单选题(共 15 题,每题 2 分)

1

人们所使用的手机上安装的 App 通常指的是( )。

2

下列流程图的输出结果是?( )

3

对包含 $n$ 个元素的数组进行冒泡排序,平均时间复杂度一般为( )。

4

下列关于 C++ 语言中指针的叙述,不正确的是( )。

5

下列关于 C++ 语言中数组的叙述,不正确的是( )。

6

下列关于 C++ 语言中函数的叙述,正确的是( )。

7

下列关于 C++ 语言中函数的叙述,不正确的是( )。

8

一个二维数组定义为 char array[3][10]; ,则这个二维数组占用内存的大小为( )。

9

如果 $n$ 为 int 类型的变量,一个指针变量定义为 int *p = &n;,则下列说法正确的是( )。

10

一个三维数组定义为 long long array[6][6][6];,则 array[1][2][3]array[3][2][1] 在内存中的位置相差多少字节?( )

11

如果 $a$ 为 int 类型的变量,且 $a$ 的值为 $6$,则执行 a = ~a; 之后,$a$ 的值会是( )。

12

一个数组定义为 int a[5] = {1, 2, 3, 4, 5};,一个指针定义为 int * p = &a[2];,则执行 *p = a[1]; 后,数组 $a$ 中的值会变为( )。

13

下列关于 C++ 语言中异常处理的叙述,正确的是( )。

14

执行以下 C++ 语言程序后,输出结果是( )。

15

在下列代码的横线处填写( ),完成对有 $n$ 个 int 类型元素的数组 array 由小到大排序。

判断题(共 10 题,每题 2 分)

16

在 C++ 语言中,指针变量在逻辑上指向另一个变量在内存中的位置,指针变量本身不占用内存。

17

对 $n$ 个元素的数组执行插入排序算法,通常的时间复杂度是 $O(n^2)$。

18

在 C++ 语言中,每个变量都有其作用域。

19

在 C++ 语言中,在函数调用时,通过引用传递的参数不会复制实际参数,因此不会额外占用内存。

20

在 C++ 语言中,可以通过定义结构体,定义一个新的数据类型。

21

在 C++ 语⾔中,可以定义结构体类型的数组变量,定义结构体时也可以包含数组成员。

22

如果希望记录 $10$ 个最长为 $99$ 字节的字符串,可以将字符串数组定义为 char s[10][100];

23

一个可能抛出异常的函数,调用它的位置没有在 try 子句中,会引起编译错误。

24

==:= 都是 C++ 语言的运算符。

25

通过使用文件重定向操作,可以将程序中输出到 cout 的内容输出到文件中,这是常用的记录程序运行日志的方法之一。

编程操作题(共 2 题,共 50 分)

26
编程操作题 25分

试题名称:进制转换

时间限制:1.0 s | 内存限制:128.0 MB

题目描述

$N$ 进制数指的是逢 $N$ 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五;本题中,十一进制到十五进制也是类似的)。

在本题中,我们将给出 $N$ 个不同进制的数。你需要分别把它们转换成十进制数。

输入格式

输入的第一行为一个十进制表示的整数 $N$。接下来 $N$ 行,每行一个整数 $K$,随后是一个空格,紧接着是一个 $K$ 进制数,表示需要转换的数。保证所有 $K$ 进制数均由数字和大写字母组成,且不以 $0$ 开头。保证 $K$ 进制数合法。

保证 $N \le 1000$;保证 $2 \le K \le 16$。

保证所有 $K$ 进制数的位数不超过 $9$。

输出格式

输出 $N$ 行,每一个十进制数,表示对应 $K$ 进制数的十进制数值。

样例输入 #1

2
8 1362
16 3F0

样例输出 #1

754
1008

样例输入 #2

2
2 11011
10 123456789

样例输出 #2

27
123456789

说明/提示

对于任意一个 $L$ 位 $K$ 进制数,假设其最右边的数位为第 $0$ 位,最左边的数位为第 $L-1$ 位,我们只需要将其第 $i$ 位的数码乘以权值 $K^i$,再将每位的结果相加,即可得到原 $K$ 进制数对应的十进制数。下面是两个例子:

  1. 八进制数 1362 对应的十进制数为:$1×8^3+3×8^2+6×8^1+2×8^0=754$;

  2. 十六进制数 3F0 对应的十进制数为:$3×16^2+15×16^1+0×16^0=1008$。

27
编程操作题 25分

试题名称:变长编码

时间限制:1.0 s | 内存限制:128.0 MB

题目描述

小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他总是觉得,生活中很少用到 $2^{31}-1$ 这么大的数,生活中常用的 $0\sim 100$ 这种数也同样需要用 $4$ 个字节的补码表示,太浪费了些。
热爱学习的小明通过搜索,发现了一种正整数的变长编码方式。这种编码方式的规则如下:

  1. 对于给定的非负整数,首先将其表达为二进制形式。例如,$(0){{10}}=(0){{2}}$,$(926){{10}}=(1110011110){{2}}$。

  2. 将二进制数从低位到高位切分成每组 $7$ bit,不足 $7$bit 的在高位用 $0$ 填补。例如,$(0){{2}}$ 变为$0000000$ 的一组,$(1110011110){{2}}$ 变为 $0011110$ 和 $0000111$ 的两组。

  3. 由代表低位的组开始,为其加入最高位。如果这组是最后一组,则在最高位填上 $0$,否则在最高位填上 $1$。于是,$0$ 的变长编码为 $00000000$ 一个字节, $926$ 的变长编码为 $10011110$ 和 $00000111$ 两个字节。

这种编码方式可以用更少的字节表达比较小的数,也可以用很多的字节表达非常大的数。例如,$987654321012345678$ 的二进制为 $(0001101 \ 1011010 \ 0110110 \ 1001011 \ 1110100 \ 0100110 \ 1001000 \ 0010110 \ 1001110)_{{2}}$,于是它的变长编码为(十六进制表示) CE 96 C8 A6 F4 CB B6 DA 0D,共 $9$ 个字节。

你能通过编写程序,找到一个正整数的变长编码吗?

输入格式

输入第一行,包含一个非负整数 $N$。约定 $0\le N \le 10^{18}$。

输出格式

输出一行,输出 $N$ 对应的变长编码的每个字节,每个字节均以 $2$ 位十六进制表示(其中, A-F 使用大写字母表示),两个字节间以空格分隔。

样例输入 #1

0

样例输出 #1

00

样例输入 #2

926

样例输出 #2

9E 07

样例输入 #3

987654321012345678

样例输出 #3

CE 96 C8 A6 F4 CB B6 DA 0D
已答 0/27