2023年9月GESPC++四级真题解析

一、单选题(每题2分,共30分)

题目123456789101112131415
答案BACDDBABBCCAADC

1 们所使用的手机上安装的App通常指的是 

A. 款操作系统 B. 款应用软件 C. 种通话设备 D. 以上都不对

【答案】B

【考纲知识点】 计算机基础

【解析】本题属于考察计算机基础知识。APP是英语单词application的简写, 代表应用软件的意思。

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

A. 9   B. 7   C. 5   D. 11

【答案】A

【考纲知识点】 流程图和多层循环语句

【解析】本题属于考察计算机循环结构嵌套选择结构知识。根据流程图,n<=5  时会一直循环,每次循环先判断是否满足m*n>20的条件,然后对m进行不同的赋 值。例如:n=1,m=1,m*n不大于20,m会计算,赋值为3,依次类推,最终m的结  果是9,选A。

3 、对包含n个元素的数组进冒泡排序 ,平均时间复杂度一般为   

A.O(n
B.O(n
 log n 
C.O(n2)​​​​​​​

D. 以上都不正确

【答案】C

【考纲知识点】 冒泡排序

【解析】本题属于考察简单排序算法的时间复杂度,选C

4 、下列关于C++中指针的叙述 ,不正确的是   

A.可以定义指向int类型的指针。

B.可以定义指向定义结构体类型的指针。

C. 定义结构体类型可以包含指针类型的元素。

D.不能定义指向void类型的指针 ,那没有意义。

【答案】D

【考纲知识点】 指针的概念及使用

【解析】本题属于考察计算机指针知识。可以指向void类型。

5 、下列关于C++中数组的叙述 ,不正确的是   

A.一维数组可以用来表示数列。

B.二维数组可以用来表示矩阵。

C.三维数组可以用来表示空间中物体的形状。

D.世界是三维的 ,所以定义四维数组没有意义。

【答案】D

【考纲知识点】 数组

【解析】本题属于考察计算机数组知识。世界可以用多维描述,定义四维也有 意义。

6 、下列关于C++中函数的叙述 ,正确的是   

A.函数调用前必须定义。

B.函数调用时必须提供足够的实际参数。

C.函数定义前必须声明。

D.函数声明只能写在函数调用前。

【答案】B​​​​​​​

【考纲知识点】 函数的概念及使用

【解析】本题属于考察计算机函数知识。函数调用时如果缺少实参将不能正确 运行。

7 、下列关于C++中函数的叙述 ,不正确的是   

A.两个函数的声明可以相同。

B.两个函数的局部变量可以重名。

C.两个函数的参数可以重名。

D.两个函数可以重名。

【答案】A

【考纲知识点】 函数的概念及使用

【解析】本题属于考察计算机函数知识。函数声明时不能相同。

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

A. 10 B. 30 C. 32 D. 48

【答案】B

【考纲知识点】 二维数组知识

【解析】本题属于考察C++二维字符数组知识。内存大小和数组需要用的空间 有关。310列,需要3*10=30个空间,选B

9 、如果nint类型的变量,个指针变量定义为int *p=&n; ,则下列说法正确的  

A.指针变量p的值与变量n是相同

B.指针变量p的值与变量n 的地址是相同的。

C.指针变量p指向的值为 'n'

D.指针变量p指向的值与变量n 的地址是相同的。​​​​​​​

【答案】B

【考纲知识点】 指针
【解析】本题属于考察C++指针知识。指针的值保存的是变量的地
址,所以选B。​​​​​​​

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

A. 70字节  B. 198字节 C. 560字节 D.无法确定

【答案】C

【考纲知识点】 三维数组

【解析】本题属于考察C++三维数组知识。数组是long long类型,每间隔一下

数字就间隔8个字节,假设三维数组用长宽高来描述,array[0][0][0]

array[0][5][5]36个元素array[ 1][2][3]包含36+12+4=52个元素;到长度3宽度 2高度1 ,包括36*3+12+2=122个元素,隔离70个元素,因此长度是560 ,选C

11、如果 a int 类型的变量,且 a 的值为6 ,则执a =  ~a; 之后,a 的值会  

A. -6 B. 6  C. -7 D. 7

【答案】C

【考纲知识点】 位运算

【解析】本题属于考察C++位运算知识。6按位取反运算,注意符号位也取反, 呈现的是补码,转换过来就是-7 。具体过程:

00000110(取反操作) 11111001(补码)

11111000(补码-1=反码)​​​​​​​

10000111(负数的原码,注意此时取反符号位不变)

12个数组定义为int a[5]  =  {1,  2,  3,  4,  5}; 个指针定义为int

*  p  =  &a[2]; ,则执*p =  a[ 1]; 后 ,数组a 中的值会变为  A. {1,  2,  2,  4,  5}

B. {1,  3,  3,  4,  5} C. {1,  2,  3,  3,  5} D. {1,  2,  4,  4,  5}

【答案】A

【考纲知识点】 指针和数组

【解析】本题属于考察C++指针和数组知识。P指针指向的是a[2] ,将a[ 1]的值 赋值给p指向的变量a[2] ,数组中a[ 1]等于a[2]

13、下列关于C++语言中异常处理的叙述,正确的   

A. try句可以有多个catch句与之对应。

B.如果try句在执时发异常 ,就定会进catch句执

C.如果try句中没有可能发异常的语句 ,会产编译错误。

D. catch 句处理异常后 ,会重新执与之对应的try句。

【答案】A

【考纲知识点】 异常处理

【解析】本题属于考察C++处理异常知识。A是正确的。B选项中,得到对应类 型中的异常才能catch操作。

14、执以下C++程序后,输出结果是   

 

A. 0   B. 5   C. 55

D. 法确定。

【答案】D

【考纲知识点】 循环和一维数组的基本运用

【解析】本题属于考察C++循环结构和一维数组的知识。这是求斐波那契数列 的代码,数组的范围是[0,9] ,所以对fib[10]操作后,越界访问结果无法确定。

15、在下列代码的横线处填写 ),完成对有  nint类型元素的数组 array 排序。

 

A. int j  =  1; j  <  n; j++

B. int j  =  0;  j  <  n;  j++

C. int j  =  0;  j  <  i  -  1;  j++

D. int j  =  0; j  <  i; j++

【答案】C

【考纲知识点】 函数和数组的知识

【解析】本题属于考察C++函数和数组的知识。题目已知,要求从小到大的冒  泡排序,如果前一个比后一个大,就交换位置,外层循环从n开始,判断的区间 逐渐减小,判断循环范围C正确。

二、判断题(每题2分,共20分)

题目12345678910
答案××××

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

【答案】错误

【考纲知识点】 指针类型的概念

【解析】本题是C++指针类型的知识,指针是个变量, 占用内存。

2 、对N个元素的数组执排序算法 ,通常的时间复杂度是O(N")

【答案】正确

【考纲知识点】 排序算法

【解析】本题是C++排序算法的知识,插入排序常用时间复杂度是O(N2)

3 、在C++ ,每个变量都有其作用域。

【答案】正确

【考纲知识点】 变量

【解析】本题是C++变量的知识,变量都有作用域。

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

【答案】错误​​​​​​​

【考纲知识点】 函数

【解析】本题是C++函数的知识,传参时函数的参数也会是一个新的变量, 占用 内存。

5 、在C++中,可以通过定义结构体,定义新的数据类型。

【答案】正确

【考纲知识点】 结构体

【解析】本题是C++语言的知识,定义结构体可以认为定义一个新的数据类型。

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

【答案】正确

【考纲知识点】 结构体

【解析】本题是C++结构体的知识,可以包含数组。

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

【答案】正确

【考纲知识点】 数组

【解析】本题是C++字符数组的知识,定义长度大于等于要求。

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

【答案】错误

【考纲知识点】 函数

【解析】本题是C++函数的知识,编译不会报错。

9 ==:=都是C++的运算符。

【答案】错误

【考纲知识点】 运算符​​​​​​​

【解析】本题是C++语法的知识,==运算符。

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

【答案】正确

【考纲知识点】 文件操作

【解析】本题是C++文件操作的知识,正确。

三、编程题(每题25分,共50分)

 

1.进制转换

问题描述

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

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

数。

提示

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

1. 进制数1362 对应的进制数为1 ×  833 × 826 × 812 × 80= 754 2. 六进制数3F0 对应的进制数为3 ×  16215 ×  161+ 0 ×  160= 1008

输入描述​​​​​​​

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

保证N ≤ 1000 ;保证2 ≤ K  16

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

输出描述

输出N行,每个十进制数,表对应K进制数的十进制数值。 样例输入1​​​​​​​

【题目大意】

1.有nk进制的整数,将它们分别转换成对应的十进制。 【考纲知识点】

1.基本运算、输入输出语句、循环、进制转换的知识。 【解题思路】

1.按题目要求定义好需要的变量,并实现输入;

2.输入n行,每行2个整数,分别表示进制和要转换的数字; 3.按求进制方法求即可。例如:(abc)2=a*22+b*21+c*20

【参考程序】




2.变长编码​​​​​​​

小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整 数通常使用补码。但他总是觉得生活中很少用到231-1这么大的数,生活中常用  0 ~ 100这种数也同样需要用4个字节的补码表示,太浪费了些。热爱学习的小

明通过搜索,发现了一种正整数的变长编码方式。这种编码方式的规则如下: 1.对于给定的正整数,首先将其表达为二进制形式。例如,(0){10} =(0){2}

(926){10}=(1110011110){2}

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

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

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

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

输入描述

⼀⾏  ,包含个正整数N 。约定0N1018

输出描述

输出⼀⾏  ,输出N对应的变长编码的每个字节 ,每个字节均以2六进制表 示(其中,  A-F使⽤⼤写字母表  个字节间以空格分隔。

样例输入1
0
样例输出
1
00​​​​​​​

【题目大意】

1.给一个正整数,根据题目要求找它的变长编码,变长编码用16进制表示。 
【考纲知识点】

1.基本运算、输入输出语句、一维数组、位运算的知识。 
【解题思路】​​​​​​​

1.按题目要求定义好需要的变量,并实现输入;

2.根据题意,1 、将n对应的二进制,每71组,保存起来;

3.除了包含最高位那组,其他组最前面都增加1 ,例如中间一组是0001111 最前面加1变成10001111

4.注意输出是先输出低位的数组,输出内容用16进制表示即可。 
【参考程序】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值