CCF-GESP 等级考试 2023年9月认证C++五级真题解析

2023年9月真题

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


正确答案:A

解析:考察知识点:计算机基础

本题属于考察计算机基础知识知识。手写板是输入信息的设备,选A。


正确答案:D

解析:考察知识点:运算表达式和位运算

本题属于考察运算表达式和位运算知识。b 不等于0,a 是b 的3倍。A 选项中,a 右移 3 位,相当于除以 8;B 是取余运算;如果a=7,b=2,a/b的结果也等于 3,因为是整型,C 选项也不正确;选 D。


正确答案:C

解析:考察知识点:数据类型和运算表达式

本题属于考察数据类型、逗号表达式、运算表达式知识。逗号表达式从左到右依次计算每一个表达式,整个逗号表达式的结果是最后一个表达式的计算结果,a=6,b=3*15/2=22,b=6+22=28,选 C。



正确答案:C

解析:考察知识点:函数和递归算法

本题属于考察递归和函数知识。sumA 用循环求的是1 到n 的总和;sumB用递归的方式求 1 到 n 的总和。1 加到 100000 的和大于int 类型最大值,2147483647,会溢出,选 C。


正确答案:A

解析:考察知识点:函数和递归算法

本题属于考察递归和函数知识。要倒序输出字符串,先输出字符串中的最后一个字符,最后一个字符下标是长度-1,然后翻转除了最后一个字符的字符串,这个字符串是从 0 开始,选 sln.length()-1 个字符,选A。


正确答案:B

解析:考察知识点:函数和递归算法

本题属于考察递归和函数知识。汉诺塔比较经典的递归问题,第11行代码意味这剩下的 N-1 快圆盘,现在 B 柱子上,借助 A 柱,挪到C柱上,选B。



正确答案:A

解析:考察知识点:函数的调用、值传递

本题考察的是 vector 和 sort 函数的使用。本题中首先创建了一个vector

lstA 存储整数 1~99,然后调用 sort 函数对 lstA 进行排序,sort 函数排序需要传递三个参数,前两个参数决定了排序范围的起始位置和结束位置,第三个参数是排序规则函数,排序规则函数需要两个参数和一个 bool 类型的返回值,所以代码 1 处传递排序规则函数 compare,只需要写函数名即可,不需要写成调用的形式,排除选项 B 和 D。

接下来的代码是将 lstA 中的奇数存储到另一个 vector lstB 中,判断奇数可以使用自定义函数 isOdd,代码 2 处是调用 isOdd 函数判断当前的lstA[i]是否为奇数,因此需要使用调用函数语法 isOdd(IstA[i]),正确答案为A 选项。


正确答案:C

解析:考察知识点:函数的定义、调用、值传递

本题考察函数指针的知识。isEven 是一个自定义函数,用于判断为偶数。checkNum 也是一个自定义函数,该函数的第一个参数是一个函数指针类型,需要传递一个函数,所传递的这个函数要求返回值为 bool,并且有一个int 类型参数,isEven 函数复合该类型的要求,所以调用 checkNum 函数时,第一个参数传递函数 isEven,第二个参数传递整数 10 没有错误,执行checkNum函数内部代码 Fx(N),也就是调用函数 isEven(10),整数 10 是偶数,因此最后调用的结果是1,因此正确答案选 C。


正确答案:C

解析:考察知识点:函数指针

本题考察函数指针的知识。checkNum 函数的第一个参数需要传递一个返回值为 bool、参数为 int 类型的函数,isEven 函数复合该类型的要求,所以调用 checkNum 函数时,第一个参数传递函数 isEven,不会导致编译错误,Square函数的返回值是 int 类型,不符合 cehckNum 函数的第一个参数的类型要求,因此调用时传递 Square 函数会导致编译错误,所以答案为C 选项。


正确答案:D

解析:考察知识点:递归和函数

本题属于考察递归和函数知识。第 13 行代码调用jumFloor(4),首先输出 4#,然后返回 jumFloor(3)+ jumFloor(2),jumFloor(3)输出3#再继续递归调用 jumFloor(2)+ jumFloor(1)依次输出 2#1#并返回 3。jumFloor(2)输出 2#返回 2,所以第 13 行代码调用之后的返回结果是3+2=5,最后的输出结果就是 4#3#2#1#2#5,所以正确答案选 D。



正确答案:B

解析:考察知识点:时间复杂度

本题属于考察时间复杂度的相关知识。isPrimeA 的最坏时间复杂度是O(N),isPrimeB 的最坏时间复杂度是 O(),O()优于 O(N),正确答案B选项。






正确答案:C

解析:考察知识点:分治算法

本题考察归并排序的相关知识。listA 的长度为7,根据递归返回的条件s t a r t > = e nd ,merge 函数会被调用 6 次,正确答案C 选项。


正确答案:B

解析:考察知识点:分治算法、归并排序

本题属于考察归并排序的相关知识。归并排序采用的是分治算法思想,正确答案 B 选项。


正确答案:A

解析:考察知识点:归并排序算法

本题属于考察归并排序的相关知识。归并排序基本思想就是将数组分成两个⼦数组,分别排序后再合并,正确答案 A 选项。


正确答案:C

解析:考察知识点:循环链表

本题考察链表的相关知识。第 15 行代码~第 17 行代码创建了三个链表的节点,第一个节点的 next 指向第二个节点,第二个节点的next 指向第三个节点,第三个节点的 next 又指向了第一个节点,形成了一个环,所以是循环链表,正确答案 C 选项。

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


正确答案:正确

解析:考察知识点:计算机网络

本题是计算机网络的知识,传输层是这 2 个协议。


正确答案:错误

解析:考察知识点:流程图

本题考察流程图,流程图中没有三角框。


正确答案:错误

解析:考察知识点:线性筛法和埃氏筛法

本题考察筛选素数的算法,线性筛法是在埃⽒筛法基础的改进,效率更高。


正确答案:错误

解析:考察知识点:二分法和链表

本题考察二分法和链表的知识点,使用二分法查找元素,元素必须是顺序存储的,链表不是顺序存储数据,因此不能使用二分法。


正确答案:正确

解析:考察知识点:循环链表

本题考察循环链表的知识点,链表的最后一个节点的next 指针指向头结点就能形成循环链表。


正确答案:正确

解析:考察知识点:贪心算法

本题考察贪心算法的知识点,贪心算法找到的不一定是最优解。


正确答案:错误

解析:考察知识点:冒泡排序

本题考察排序算法性能,冒泡时间复杂度为 O(),归并排序的时间复杂度为 O(NlogN),因此归并优于冒泡,说法错误。


正确答案:正确

解析:考察知识点:qsort函数:快速排序函数

本题考察 qsort 函数,qsort 函数内部使用的是不稳定的排序算法。


正确答案:正确

解析:考察知识点: 质数的判定和筛选

本题考察质数的判定和筛选,说法正确。


正确答案:正确

解析:考察知识点:sort函数

本题考察 sort 函数的排序规则,排序规则函数compareModule5 确定的排序规则是根据除 5 的余数进行升序排序,所以 main 函数中对0~6 范围的整数排序之后的结果就是 0516234.

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



本题考察 初等数论,多重循环,算术运算

唯一分解定理(算术基本定理)是数论中的一个基本定理,表明每个正整数可以唯一地分解为素数的乘积。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	long long num, i=2, cnt;
	cin>>num;
	int first=1;
	while(i*i<=num) { // 
		cnt=0; //记录分解出的素因子个数 
		while(num%i == 0) { //素因子 
			cnt++;
			num /= i;
		}
		if(cnt>0) { //素因子个数至少一个 
			//考虑输出格式 
			if(!first) cout<<" * ";
			cout<<i;
			if(cnt>1) cout<<"^"<<cnt;
			first=0;
		}
		i++;
	}
	//num!=1,说明只有num本身是素数 
	if(num!=1) {
		if(!first) cout<<" * ";
		cout<<num;
	}
	return 0;
}


本题考察 贪心算法、数组、sort 函数。

题目其实有很明显的贪心特性,要想获得最大的奖励,肯定考虑优先安排奖励大的游戏,游戏有截至完成时间,因此安排游戏的时候,贴着截至完成时间往前安排,给截至时间容忍度低的游戏尽量留出空间,能安排的下就安排,安排不了就放弃。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
struct game{
	int time;
	int award;
}arr[501];
bool cmp(game a, game b){
	return a.award > b.award;
}
int main() {
	int n, flag[501]={};
	cin>>n;
	for(int i=1; i<=n; i++) cin>>arr[i].time;
	for(int i=1; i<=n; i++) cin>>arr[i].award;
	sort(arr+1, arr+n+1, cmp);
	int res=0, j=1;
	for(int i=1; i<=n; i++){
		for(int j=arr[i].time; j>=1; j--){
			if(!flag[j]){
				flag[j]=true;
				res += arr[i].award;
				break;
			}
		}
	}
	cout<<res;
	return 0;
}
相关推荐
智多星0018 分钟前
c++Qt登录页面设计
开发语言·c++·qt
Tfly__12 分钟前
ubuntu 18.04安装GCOPTER(最新)
linux·c++·ubuntu·github·ros·无人机·运动规划
code monkey.25 分钟前
【探寻C++之旅】第一章:C++入门
开发语言·c++
程序员老冯头1 小时前
第二十三章 C++ 继承
开发语言·数据结构·c++·算法·继承
Dream it possible!1 小时前
LeetCode 热题 100_二叉树的最大深度(37_104_简单_C++)(二叉树;递归;层次遍历)
c++·算法·leetcode
yuyanjingtao2 小时前
CCF-GESP 等级考试 2023年12月认证C++二级真题解析
c++·青少年编程·gesp·csp-j/s·编程等级考试
m0_748239332 小时前
Linux下C++轻量级WebServer服务器 框架梳理
linux·服务器·c++
Michael_Good2 小时前
【C/C++】C语言编程规范
c语言·开发语言·c++
明月看潮生4 小时前
青少年编程与数学 02-005 移动Web编程基础 06课题、响应式设计
前端·青少年编程·编程与数学·移动web
明月看潮生4 小时前
青少年编程与数学 02-005 移动Web编程基础 07课题、多媒体形式
前端·青少年编程·移动开发·编程与数学·移动web