2023年9月 GESP C++ 4级
2023年9月 GESP C++ 4级认证考试真题(含编程操作题部分)
// questions
题目预览
人们所使用的手机上安装的 App 通常指的是( )。
一款操作系统
一款应用软件
一种通话设备
以上都不对
下列流程图的输出结果是?( )
999
777
555
111111
对包含 nnn 个元素的数组进行冒泡排序,平均时间复杂度一般为( )。
以上都不正确
下列关于 C++ 语言中指针的叙述,不正确的是( )。
可以定义指向 int 类型的指针。
可以定义指向自定义结构体类型的指针。
自定义结构体类型可以包含指针类型的元素。
不能定义指向 void 类型的指针,那没有意义。
下列关于 C++ 语言中数组的叙述,不正确的是( )。
一维数组可以用来表示数列。
二维数组可以用来表示矩阵。
三维数组可以用来表示空间中物体的形状。
世界是三维的,所以定义四维数组没有意义。
下列关于 C++ 语言中函数的叙述,正确的是( )。
函数调用前必须定义。
函数调用时必须提供足够的实际参数。
函数定义前必须声明。
函数声明只能写在函数调用前。
下列关于 C++ 语言中函数的叙述,不正确的是( )。
两个函数的声明可以相同。
两个函数的局部变量可以重名。
两个函数的参数可以重名。
两个函数可以重名。
一个二维数组定义为 char array[3][10]; ,则这个二维数组占用内存的大小为( )。
101010
303030
323232
484848
如果 nnn 为 int 类型的变量,一个指针变量定义为 int *p = &n;,则下列说法正确的是( )。
指针变量 ppp 的值与变量 nnn 是相同的。
指针变量 ppp 的值与变量 nnn 的地址是相同的。
指针变量 ppp 指向的值为 'n'。
指针变量 ppp 指向的值与变量 nnn 的地址是相同的。
一个三维数组定义为 long long array[6][6][6];,则 array[1][2][3] 和 array[3][2][1] 在内存中的位置相差多少字节?( )
707070 字节
198198198 字节
560560560 字节
无法确定
如果 aaa 为 int 类型的变量,且 aaa 的值为 666,则执行 a = ~a; 之后,aaa 的值会是( )。
−6-6−6
666
−7-7−7
777
一个数组定义为 int a[5] = {1, 2, 3, 4, 5};,一个指针定义为 int * p = &a[2];,则执行 *p = a[1]; 后,数组 aaa 中的值会变为( )。
{111, 222, 222, 444, 555}
{111, 333, 333, 444, 555}
{111, 222, 333, 333, 555}
{111, 222, 444, 444, 555}
下列关于 C++ 语言中异常处理的叙述,正确的是( )。
一个 try 子句可以有多个 catch 子句与之对应。
如果 try 子句在执行时发生异常,就一定会进入某一个 catch 子句执行。
如果 try 子句中没有可能发生异常的语句,会产生编译错误。
catch 子句处理异常后,会重新执行与之对应的 try 子句。
执行以下 C++ 语言程序后,输出结果是( )。
000
555
555555
无法确定。
在下列代码的横线处填写( ),完成对有 nnn 个 int 类型元素的数组 array 由小到大排序。
int j = 1; j < n; j++
int j = 0; j < n; j++
int j = 0; j < i - 1; j++
int j = 0; j < i; j++
在 C++ 语言中,指针变量在逻辑上指向另一个变量在内存中的位置,指针变量本身不占用内存。
对 nnn 个元素的数组执行插入排序算法,通常的时间复杂度是 O(n2)O(n^2)O(n2)。
在 C++ 语言中,每个变量都有其作用域。
在 C++ 语言中,在函数调用时,通过引用传递的参数不会复制实际参数,因此不会额外占用内存。
在 C++ 语言中,可以通过定义结构体,定义一个新的数据类型。
在 C++ 语⾔中,可以定义结构体类型的数组变量,定义结构体时也可以包含数组成员。
如果希望记录 101010 个最长为 999999 字节的字符串,可以将字符串数组定义为 char s[10][100];。
一个可能抛出异常的函数,调用它的位置没有在 try 子句中,会引起编译错误。
== 和 := 都是 C++ 语言的运算符。
通过使用文件重定向操作,可以将程序中输出到 cout 的内容输出到文件中,这是常用的记录程序运行日志的方法之一。
试题名称:进制转换
时间限制:1.0 s | 内存限制:128.0 MB
题目描述
NNN 进制数指的是逢 NNN 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五;本题中,十一进制到十五进制也是类似的)。
在本题中,我们将给出 NNN 个不同进制的数。你需要分别把它们转换成十进制数。
输入格式
输入的第一行为一个十进制表示的整数 NNN。接下来 NNN 行,每行一个整数 KKK,随后是一个空格,紧接着是一个 KKK 进制数,表示需要转换的数。保证所有 KKK 进制数均由数字和大写字母组成,且不以 000 开头。保证 KKK 进制数合法。
保证 N≤1000N \le 1000N≤1000;保证 2≤K≤162 \le K \le 162≤K≤16。
保证所有 KKK 进制数的位数不超过 999。
输出格式
输出 NNN 行,每一个十进制数,表示对应 KKK 进制数的十进制数值。
样例输入 #1
2
8 1362
16 3F0
样例输出 #1
754
1008
样例输入 #2
2
2 11011
10 123456789
样例输出 #2
27
123456789
说明/提示
对于任意一个 LLL 位 KKK 进制数,假设其最右边的数位为第 000 位,最左边的数位为第 L−1L-1L−1 位,我们只需要将其第 iii 位的数码乘以权值 KiK^iKi,再将每位的结果相加,即可得到原 KKK 进制数对应的十进制数。下面是两个例子:
-
八进制数
1362对应的十进制数为:1×83+3×82+6×81+2×80=7541×8^3+3×8^2+6×8^1+2×8^0=7541×83+3×82+6×81+2×80=754; -
十六进制数
3F0对应的十进制数为:3×162+15×161+0×160=10083×16^2+15×16^1+0×16^0=10083×162+15×161+0×160=1008。
试题名称:变长编码
时间限制:1.0 s | 内存限制:128.0 MB
题目描述
小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他总是觉得,生活中很少用到 231−12^{31}-1231−1 这么大的数,生活中常用的 0∼1000\sim 1000∼100 这种数也同样需要用 444 个字节的补码表示,太浪费了些。 热爱学习的小明通过搜索,发现了一种正整数的变长编码方式。这种编码方式的规则如下:
-
对于给定的非负整数,首先将其表达为二进制形式。例如,(0){10}=(0){2}(0)_{\{10\}}=(0)_{\{2\}}(0){10}=(0){2},(926){10}=(1110011110){2}(926)_{\{10\}}=(1110011110)_{\{2\}}(926){10}=(1110011110){2}。
-
将二进制数从低位到高位切分成每组 777 bit,不足 777bit 的在高位用 000 填补。例如,(0){2}(0)_{\{2\}}(0){2} 变为000000000000000000000 的一组,(1110011110){2}(1110011110)_{\{2\}}(1110011110){2} 变为 001111000111100011110 和 000011100001110000111 的两组。
-
由代表低位的组开始,为其加入最高位。如果这组是最后一组,则在最高位填上 000,否则在最高位填上 111。于是,000 的变长编码为 000000000000000000000000 一个字节, 926926926 的变长编码为 100111101001111010011110 和 000001110000011100000111 两个字节。
这种编码方式可以用更少的字节表达比较小的数,也可以用很多的字节表达非常大的数。例如,987654321012345678987654321012345678987654321012345678 的二进制为 (0001101 1011010 0110110 1001011 1110100 0100110 1001000 0010110 1001110){2}(0001101 \ 1011010 \ 0110110 \ 1001011 \ 1110100 \ 0100110 \ 1001000 \ 0010110 \ 1001110)_{\{2\}}(0001101 1011010 0110110 1001011 1110100 0100110 1001000 0010110 1001110){2},于是它的变长编码为(十六进制表示) CE 96 C8 A6 F4 CB B6 DA 0D,共 999 个字节。
你能通过编写程序,找到一个正整数的变长编码吗?
输入格式
输入第一行,包含一个非负整数 NNN。约定 0≤N≤10180\le N \le 10^{18}0≤N≤1018。
输出格式
输出一行,输出 NNN 对应的变长编码的每个字节,每个字节均以 222 位十六进制表示(其中, A-F 使用大写字母表示),两个字节间以空格分隔。
样例输入 #1
0
样例输出 #1
00
样例输入 #2
926
样例输出 #2
9E 07
样例输入 #3
987654321012345678
样例输出 #3
CE 96 C8 A6 F4 CB B6 DA 0D