CCF编程能力等级认证GESP—C++4级—20230923

2023-12-19

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

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

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

2、下列流程图的输出结果是?( )
在这里插入图片描述

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

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

A. O ( n ) O(n) O ( n )
B. O ( n l o g n ) O(n log n) O ( n l o g n
C. O ( n 2 ) O(n^2) O ( n 2 )
D.以上都不正确

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

A.可以定义指向int类型的指针。
B.可以定义指向⾃定义结构体类型的指针。
C.⾃定义结构体类型可以包含指针类型的元素。
D.不能定义指向void类型的指针 ,那没有意义。

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

A.一维数组可以用来表示数列。
B.二维数组可以用来表示矩阵。
C.三维数组可以用来表示空间中物体的形状。
D.世界是三维的 ,所以定义四维数组没有意义。

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

A.函数调用前必须定义。
B.函数调用时必须提供足够的实际参数。
C.函数定义前必须声明。
D.函数声明只能写在函数调用前。

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

A.两个函数的声明可以相同。
B.两个函数的局部变量可以重名。
C.两个函数的参数可以重名。
D.两个函数可以重名。

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

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

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

A.指针变量p的值与变量n是相同
B.指针变量p的值与变量n的地址是相同的。
C.指针变量p指向的值为 'n'。
D.指针变量p指向的值与变量n的地址是相同的。

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

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

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

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

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}

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

A.⼀个try⼦句可以有多个catch⼦句与之对应。
B.如果try⼦句在执⾏时发⽣异常 ,就⼀定会进⼊某⼀个catch⼦句执⾏。
C.如果try⼦句中没有可能发⽣异常的语句 ,会产⽣编译错误。
D. catch ⼦句处理异常后 ,会重新执⾏与之对应的try⼦句。

14、执⾏以下C++语⾔程序后,输出结果是( )。

#include <iostream>

using namespace std;

int main(){
	int fib[10];
	fib[0] = 0;
	fib[1] = 1;
	for (int i = 2; i < 10; i++)
		fib[i] = fib[i - 1] + fib[i - 2];
	cout << fib[10] << endl;
	return 0;
}
A. 0
B. 5
C. 55
D. ⽆法确定。

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

void BubbleSort(int array[], int n){
	for (int i = n; i >= 2; i--)
		for (_________) // 在此处填写代码
			if (array[j] > array[j + 1]){
				int t = array[j];
				array[j] = array[j + 1];
				array[j + 1] = t;
			} 
}
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++

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

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

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

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

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

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

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

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

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

9、==和:=都是C++语⾔的运算符。

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

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

进制转换

【问题描述】
N进制数指的是逢N进⼀的计数制。例如,⼈们日常⽣活中⼤多使用⼗进制计数,而计算机底层则⼀般使用二进制。除此之外,⼋进制和⼗六进制在⼀些场合也是常⽤的计数制(⼗六进制中,⼀般使用字母A 至F表⽰⼗⾄⼗五;本题中,⼗⼀进制到⼗五进制也是类似的)。
在本题中,我们将给出 N个不同进制的数。你需要分别把它们转换成⼗进制数。
【提示】
对于任意⼀个L位K进制数,假设其最右边的数位为第 0位,最左边的数位为第 L - 1 位,我们只需要将其第i位的数码乘以权值 K
i,再将每位的结果相加,即可得到原K进制数对应的⼗进制数。下⾯是两个例⼦:
1.⼋进制数1362 对应的⼗进制数为 1 × 8 3 + 3 × 8 2 + 6 × 8 1 + 2 × 8 0 = 754 1 × 8^3+3 × 8^2+6 × 8^1+2 × 8^0= 754 1 × 8 3 3 × 8 2 6 × 8 1 2 × 8 0 = 754
2.⼗六进制数3F0 对应的⼗进制数为 3 × 1 6 2 + 15 × 1 6 1 + 0 × 1 6 0 = 1008 3 × 16^2+15 × 16^1+ 0 × 16^0= 1008 3 × 1 6 2 15 × 1 6 1 + 0 × 1 6 0 = 1008
【输入描述】
输⼊的第⼀⾏为⼀个⼗进制表示的整数N。接下来N⾏,每⾏⼀个整数K,随后是⼀个空格,紧接着是⼀个K进制数,表示需要转换的数。保证所有K进制数均由数字和⼤写字母组成,且不以0开头 。保证K进制数合法。保证N ≤ 1000 ;保证2 ≤ K ≤ 16。
保证所有K进制数的位数不超过9。
【输出描述】
输出N行,每⼀个十进制数,表⽰对应K进制数的十进制数值。
【样例输入 1】
2
8 1362
16 3F0
【样例输出 1】
754
1008
【样例输入 2】
2
2 11011
10 123456789
【样例输出 2】
27
123456789

变长编码

【问题描述】
小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他总是觉得生活中很少用到231-1这么大的数,生活中常用的0 ~ 100这种数也同样需要用4个字节的补码表示,太浪费了些。热爱学习的小明通过搜索,发现了一种正整数的变长编码方式。这种编码方式的规则如下:
1.对于给定的正整数,首先将其表达为二进制形式。例如,(0){10} =(0){2},(926){10}=(1110011110){2}。
2.将二进制数从低位到高位切分成每组7 bit,不足7bit的在高位用0填补。例如,(0){2}变为0000000的一组,(1110011110){2}变为0011110和0000111的两组。
3.由代表低位的组开始,为其加入最高位。如果这组是最后一组,则在最高位填上0,否则在最高位填上1。于是,0的变长编码为00000000一个字节,926的变长编码为10011110和00000111两个字节。
这种编码方式可以用更少的字节表达比较小的数,也可以用很多的字节表达非常大的数。例如,987654321012345678的二讲制为(0001101 1011010 01101101001011 1110100 0100110 1001000 0010110 1001110){2}于是它的变长编码为(十六进制表示) CE 96 C8 A6 F4 CB B6 DA OD,共9个字节。
你能通过编写程序,找到一个正整数的变长编码吗?
【输入描述】
输⼊第⼀⾏ ,包含⼀个正整数N。约定0≤N≤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

答案及解析

单选题

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

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

3、
【答案】C
【考纲知识点】 冒泡排序
【解析】本题属于考察简单排序算法的时间复杂度,选C。

4、
【答案】D
【考纲知识点】 指针的概念及使用
【解析】本题属于考察计算机指针知识。可以指向void类型。

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

6、
【答案】B
【考纲知识点】 函数的概念及使用
【解析】本题属于考察计算机函数知识。函数调用时如果缺少实参将不能正确运行。

7、
【答案】A
【考纲知识点】 函数的概念及使用
【解析】本题属于考察计算机函数知识。函数声明时不能相同。

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

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

10、
【答案】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、
【答案】C
【考纲知识点】 位运算
【解析】本题属于考察C++位运算知识。6按位取反运算,注意符号位也取反,呈现的是补码,转换过来就是-7。具体过程:
00000110(取反操作)
11111001(补码)
11111000(补码-1=反码)
10000111(负数的原码,注意此时取反符号位不变)

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

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

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

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

判断题

1、
【答案】错误
【考纲知识点】 指针类型的概念
【解析】本题是C++指针类型的知识,指针是个变量,占用内存。

2、
【答案】正确
【考纲知识点】 排序算法
【解析】本题是C++排序算法的知识,插入排序常用时间复杂度是O(N2)

3、
【答案】正确
【考纲知识点】 变量
【解析】本题是C++变量的知识,变量都有作用域。

4、
【答案】错误
【考纲知识点】 函数
【解析】本题是C++函数的知识,传参时函数的参数也会是一个新的变量,占用内存。

5、
【答案】正确
【考纲知识点】 结构体
【解析】本题是C++语言的知识,定义结构体可以认为定义一个新的数据类型。

6、
【答案】正确
【考纲知识点】 结构体
【解析】本题是C++结构体的知识,可以包含数组。

7、
【答案】正确
【考纲知识点】 数组
【解析】本题是C++字符数组的知识,定义长度大于等于要求。

8、
【答案】错误
【考纲知识点】 函数
【解析】本题是C++函数的知识,编译不会报错。

9、
【答案】错误
【考纲知识点】 运算符
【解析】本题是C++语法的知识,==是运算符。

10、
【答案】正确
【考纲知识点】 文件操作
【解析】本题是C++文件操作的知识,正确。

编程题1

1、
【题目大意】
1.有n个k进制的整数,将它们分别转换成对应的十进制。
【考纲知识点】
1.基本运算、输入输出语句、循环、进制转换的知识。
【解题思路】
1.按题目要求定义好需要的变量,并实现输入;
2.输入n行,每行2个整数,分别表示进制和要转换的数字;3.按求进制方法求即可。例如: ( a b c ) 2 = a ∗ 2 2 + b ∗ 2 1 + c ∗ 2 0 (abc)_2=a*2^2+b*2^1+c*2^0 ( ab c ) 2 = a 2 2 + b 2 1 + c 2 0

#include <iostream>
#include <cstring>
using namespace std;

int trans_digit(int k, char c){
	if (c <= '9')
		return (c - '0');
	return (c - 'A' + 10);
}

long long trans (int k, char str[]) {
	int l = strlen(str);
	long long res = 0, pw = 1;
	for (int i = l - 1; i >= 0; i--){
		res += pw * trans_digit(k, str[i]);
		pw *= k; 
	}
	return res;
}
int main(){
	int n = 0;
	cin >> n;
	for (int t = 0; t < n; t++){
		int k = 0;
		char str[10];
		cin >> k >> str;
		cout << trans(k, str) << endl;
	}
	return 0;
}

编程题2

2、
【题目大意】
1.给一个正整数,根据题目要求找它的变长编码,变长编码用16进制表示。
【考纲知识点】
1.基本运算、输入输出语句、一维数组、位运算的知识。【解题思路】
1.按题目要求定义好需要的变量,并实现输入;
2.根据题意,1、将n对应的二进制,每7位1组,保存起来;3.除了包含最高位那组,其他组最前面都增加1,例如中间一组是0001111,最前面加1变成10001111;
4.注意输出是先输出低位的数组,输出内容用16进制表示即可。

#include <iostream>

using namespace std;

void output_digit(int d){
	if (d >= 10)
		cout << char('A' + d - 10);
	else
		cout << char('0' + d);
}
void output_code (int s){
	output_digit(s >> 4);
	output_digit(s & 0x0f);
}
int main(){
	long long n = 0;
	cin >> n;
	int split[10];
	int l = 0;
	while (n > 0){
		split[l] = int(n & 0x7f);
		n >>= 7;
		l++; 
	}
	for (int i = 0; i < l - 1; i++)
		split[i] |= 0x80;
	output_code(split[0]);
	for (int i = 1; i < l; i++){
		cout << " ";
		output_code(split[i]);
	}
	cout << endl;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CCF编程能力等级认证GESP—C++4级—20230923 的相关文章

随机推荐

  • 网络安全日报 2023年12月19日

    1 谷歌Chrome测试新的跟踪保护可阻止第三方Cookie https blog google products chrome privacy sandbox tracking protection Google 周四宣布将开始测试一项名
  • 能够图片转word工具推荐哪一个?这些一定要试试看

    临近年末 公司上下都在为了年末盘点而忙到飞起 大家都被分配到满满的任务 我也不例外 老板交代让我把一些图片文件整理成电子文档 方便后续内容的编辑和修改 本来工作就多 加上老板的任务要得急 我也没想那么多 直接就把老板发过来的图片资料全部一股
  • 测试编排效率提升:掌握前置接口响应数据的引用方法

    宁波银行深圳分行综合柜员面经 三方寄过去了 告诉我停止24届招聘 全部毁约 牛的 he芯 毁约应届生 34316 地产投资岗上岸啦 经验分享 江西农发行市级支行信贷岗面试 最终还是搏了一把 2023届CV视觉算法岗求职记录贴 规划指南 实习
  • 计算机SSM毕设选题 在线音乐网站系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 2 1 系统开发流程
  • Redis HyperLogLog:数据统计的轻量级解决方案

    引言 在现代数据驱动的应用中 Redis 以其出色的性能和灵活性成为了不可或缺的工具 特别是在统计大量数据时 传统的计数方法往往既耗时又占用大量存储空间 这次 阿七将介绍一种名为 HyperLogLog 的算法 它在 Redis 中的实现让
  • “最美中国女生”——AI绘画还没上车的有难了!!!

    废话少说 先上图 前段时间 ChatGPT生成了一张自诩为 最美的中国女生 虽然审美是主观的 但不可否认 图片的客观美 不过 你不会还只是看到图片里的美女 肤浅地欣赏高颜值吧 别人都已经透过现象看本质 赶上新浪潮 get新技能了 好 进入正
  • 底层的“原始码农”注定会被ChatGPT取代!

    抓不住AI的风口 你就等着被淘汰吧 绝对不是危言耸听 时代车轮滚滚向向前 没有跟上节奏 等你回过神来 才发现时代已经换新篇 掂量掂量自己的斤两 不禁倒吸一口凉气 想想 取代 二字是何其刺耳又真实 遇到问题解决问题 那么 如何拥有不可替代性成
  • 计算机网络基础 走入计算机行业的重中之重

    计算机网络是指将地理位置不同的 功能独立的多台计算机通过通信线路连接起来 以功能完善的网络软件支撑 实现资源共享和信息传递的系统 对于信息安全高级工程师来说 理解计算机网络的基本原理是至关重要的 下面我们将逐一解析计算机网络的核心概念 网络
  • CCF编程能力等级认证GESP—C++5级—样题1

    CCF编程能力等级认证GESP C 1级 样题1 单选题 每题 2 分 共 30 分 判断题 每题 2 分 共 20 分 编程题 每题 25 分 共 50 分 小杨的锻炼 小杨的队列 参考答案 单选题
  • 【网络安全】—Shell编程入门(1)

    Shell编程入门 Shell 是 Unix Linux 操作系统下的一种命令行解释器 它接收用户输入的命令然后调用相应的程序 我们可以通过 Shell 脚本来自动执行一系列的命令 接下来 我们将详细介绍 Shell 编程的基本概念和技能
  • 新入门IT行业想学编程?你可以选Python!

    最近有不少新入门IT行业的同学问小编 Python是什么 所以 小编给大家准备好了一份Python学习攻略 我们一起来看一下吧 01 Python是什么 Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于199
  • uniapp H5项目使用ucharts的Echart组件方式创建圆环

    问题 没有报错但是图表不出来 调试了半天圆环图表没有不出来 是因为没有明示设置宽度与高度 请根据实际需求修改父元素尺寸 组件自动识别宽高 charts box width 100 height 300px 最终效果 先导入ucharts到项
  • 软件测试/测试开发/人工智能/测试管理圆桌讨论会 | 解锁测试管理的核心问题,提升您的管理实力!

    人工智能的出现 对我们的测试行业有哪些明显的影响呢 我们又应该如何应对 如何更好地拥抱人工智能呢 如何打造积极向上 主动 执行力强 不推诿 不甩锅 服从安排 和谐 互帮互助的团队 如何有效的追踪团队的测试效率 后续对测试时间 质量等评估做支
  • 2023年12月中国数据库排行榜:人大金仓跻身前五,南大通用、中兴热度再升

    破冰行舟蓄势起 壮志猛发破浪飞 2023年12月的 墨天轮中国数据库流行度排行 火热出炉 本月共有288个数据库参与排名 本月排行榜前十名有所变动 人大金仓冲入前五开新局 南大通用 中兴通讯排名上升占优势 墨天轮十强名次归属再迎变动 本月排
  • 测试编排效率提升:掌握前置接口响应数据的引用方法

    宁波银行深圳分行综合柜员面经 三方寄过去了 告诉我停止24届招聘 全部毁约 牛的 he芯 毁约应届生 34316 地产投资岗上岸啦 经验分享 江西农发行市级支行信贷岗面试 最终还是搏了一把 2023届CV视觉算法岗求职记录贴 规划指南 实习
  • 浅谈专项测试之弱网络测试

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • unittest自动化测试断言方法的介绍

    断言如同在测试用例上 类似于预期结果与实际结果是否一致 如果一致则表示测试通过 Assert断言 很好的用于测试结果判断上 更灵活的对预期结果和实际结果进行对比 下面简单的介绍一下unittest的Assert断言 unittest中基础的
  • 干货:教你如何在JMeter中调用Python代码N种方法!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • AI绘画生成器让你秒变画神,输入文字就能生成精美图片的AI绘画功能,AI绘画软件推荐

    在当今这个数字化时代 图片编辑已经成为我们日常生活和工作中的一项重要任务 无论是社交媒体上的个人展示 还是商业广告中的产品推广 精美的图片总能吸引更多的关注和赞誉 为了满足广大用户对图片编辑的需求 我们推出了一款全新的软件 首助编辑高手 1
  • CCF编程能力等级认证GESP—C++4级—20230923

    CCF编程能力等级认证GESP C 4级 20230923 单选题 每题 2 分 共 30 分 判断题 每题 2 分 共 20 分 编程题 每题 25 分 共 50 分 进制转换 变长编码 答案及解析 单选题