当前位置: 首页 > article >正文

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

2023年6月真题

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

在这里插入图片描述
正确答案:D
解析:考察知识点:编程环境
本题属于考察计算机基础知识中的编辑、编译、解释、调试的概念;其中编辑是编写修改代码,保存是将代码保存下来,调试是测试运行代码,而编译是将源程序翻译成可执行代码,所以本题正确答案为 D。

在这里插入图片描述
正确答案:C
解析:考察知识点:排序算法
本题属于考察排序的基本概念;冒泡排序、插入排序一般是稳定的,而选择排序一般是不稳定的,所以本题正确答案为 C。

在这里插入图片描述
正确答案:C
解析:考察知识点:指针
本题属于考察指针的基本概念;指针变量不仅可以指向基本类型的变量也可以指向其它的指针变量,所以本题正确答案为 C。

在这里插入图片描述
正确答案:D
解析:考察知识点:二维及多维数组
本题属于考察二维数组的基本概念;数组(包括多维数组)在内存中必须要连续存放,所以本题正确答案为 D。

在这里插入图片描述
正确答案:A
解析:考察知识点:函数
本题属于考察函数的基本概念;函数可以没有参数和返回值,同时函数定义可以在调用之后,只需要在调用前要加函数声明,但是函数必须要有名字,所以本题正确答案为 A。
注:如果了解“匿名函数”概念(该概念超出考纲范围),应注意区分:匿名函数,正式名称为“�表达式”,是一种可捕捉参数变量的无命名函数对象,属于“函数对象”的一种,并不属于“函数”范畴。函数对象与函数在使用时经常可以自动相互转换,但二者在实现机制上完全不同。

在这里插入图片描述
正确答案:D
解析:考察知识点:全局/局部作用域
本题属于考察变量定义域的基本概念;在 C++中两个变量可以取相同的变量名,只要它们在不同的作用域下即可,所以本题正确答案为D。

在这里插入图片描述
正确答案:D
解析:考察知识点:二维及多维数组
本题属于考察内存的基本概念; double 类型的数据占用内存是8 字节,array 数组共使用了 30 个 double 类型的数据,占用内存为30*8=240 字节。所以本题正确答案为 D。

在这里插入图片描述
正确答案:B
解析:考察知识点:指针
本题属于考察指针的基本概念。指针变量的类型为int *,A 选项错误;nullptr 指向的是固定的内存地址 0,C 选项错误;nullptr 指向的内存位置通常不存放有效数据,因此常用来表示未指向有效数据,访问它可能出现运行时错误,但不会出现编译错误,D 选项错误。本题正确答案为 B。

在这里插入图片描述
正确答案:C
解析:考察知识点:二维及多维数组
本题属于考察内存地址的基本概念;array[1][2]和array[2][1]中间差了array[2][0],相当于差了 2 个 int,也就是 8 字节,所以本题正确答案为C。

在这里插入图片描述
正确答案:C
解析:考察知识点:位运算
本题属于考察位运算的基本概念;a &= 3;等价于a = a & 3;。&为按位与运算,a 的原值为 6,6 & 3 的结果为 2。所以本题正确答案为C。

在这里插入图片描述
正确答案:A
解析:考察知识点:指针
本题属于考察指针的基本概念;首先让指针 p 指向变量a[2]的内存地址,然后让 a[1]=*p,也就是让 a[1]=a[2],所以 a 数组变为{1, 3, 3, 4, 5}。所以本题正确答案为 A。

在这里插入图片描述
正确答案:A
解析:考察知识点:函数、指针、二维及多维数组
本题属于考察函数参数的基本概念。当把数组作为函数的一个参数时,实际上只传递了数组的首指针。于是,传递多维数组时,只有形式参数的第一维的长度可以省略,形式参数的其他维的长度都不能省略。所以本题正确答案为A。

在这里插入图片描述
正确答案:B
解析:考察知识点:函数、指针
本题属于考察指针的基本概念; 题目要求输出20 10,也就是把a 和b进行交换,参数中传递了 a 和 b 的内存地址,需要使用相应类型的指针来存放,所以本题正确答案为 B。

在这里插入图片描述
正确答案:D
解析:考察知识点:全局/局部作用域
本题属于考察变量初始化相关概念;因为 sum 是在函数内部定义的,所以 sum 的初始值并不一定是 0,也就无法确定最终的输出了,所以本题正确答案为 D。

在这里插入图片描述
在这里插入图片描述
正确答案:A
解析:考察知识点:排序算法
本题属于考察选择排序算法;选择排序每次会从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,也就是对于所有的i+1<=j<n,找到最小的 array[j],所以本题正确答案为 A。

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

在这里插入图片描述
正确答案:错误
解析:考察知识点:计算机存储与网络
本题属于考察域名相关概念,域名是由两个或两个以上的词构成,中间用点号分隔开,最右边的那个词称为顶级域名,所以顶级域名是cn,所以本题错误。

在这里插入图片描述
正确答案:正确
解析:考察知识点:递推算法
本题属于考察递推相关概念,递推是按照一定的规律来计算序列中的每个项,本题中规律是从第三个数开始,每个数是前面两项之和,且我们按照从小到大的顺序依次计算数列中的每个项,这和递归的编程思想一致,所以本题正确。

在这里插入图片描述
正确答案:错误
解析:考察知识点:函数
本题属于考察函数相关概念,函数的参数默认以值传递方式进行传递,所以本题错误。

在这里插入图片描述
正确答案:错误
解析:考察知识点:二维及多维数组
】本题属于考察数组相关概念。实际问题中是有可能使用到四维甚至更多维数组的,所以本题错误。

在这里插入图片描述
正确答案:正确
解析:考察知识点:函数
本题属于考察函数相关概念。函数的参数只有在函数被调用时才会在调用栈上分配对应内存,并在函数返回时回收,这也形成了函数参数的生命周期。因此,函数的参数在没有被调用时不会占用内存,本题正确。

在这里插入图片描述
正确答案:错误
解析:考察知识点:异常处理
本题属于考察异常处理相关概念,即使一个函数可能抛出异常,也不一定要在 try 子句里调用这个函数。可正常调用,异常会向调用更上层抛出,如上层调用在 try 子句中,则可以在上层捕获处理。所以本题错误。

在这里插入图片描述
正确答案:错误
解析:考察知识点:二维及多维数组
本题属于考察数组相关概念。最长为 99 个字节的字符串,应申请100个 char 的数组;要定义 10 个最长为 99 字节的字符串,应该将字符串数组定义为 char s[10][100],所以本题错误。

在这里插入图片描述
正确答案:错误
解析:考察知识点:字符串
本题属于考察字符串相关概念,‘0’是一个字符常量,它的ASCII 码值为48;’\0’也是一个字符常量,它的 ASCII 码值为 0,通常用来表示字符串或字符数组的结束标志。可见它们不等价,所以本题错误。

在这里插入图片描述
正确答案:正确
解析:考察知识点:基本运算,位运算
本题属于考察运算符相关概念。>=是关系运算符大于等于;>>=是复合位右移赋值运算符,a >>= b;等价于 a = a >> b;。所以本题正确。

在这里插入图片描述
正确答案:正确
解析:考察知识点:文件操作
本题属于考察文件操作相关概念。使用文件重定向操作后,cout 输出的内容可能被写入文件而不是屏幕上。这是由程序用户决定的,编写程序的程序员无法确定,所以本题正确。

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

在这里插入图片描述
在这里插入图片描述

本题考察 模拟法

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n, len, sum, k;
	cin>>n;
	//待判断的正整数num,使用字符串更方便处理输入
	string num; 
	while(n--){
		cin>>num;
		len = num.size(); //待判断正整数num的长度 
		sum = 0; //累计和 
		for(int i=len-1; i>=0; i--) {
			k = num[i]-'0'; //当前位的数值 
			//个位为第一位,因为用字符串存储待判断的正整数,这里数位要特别注意一下 
			if((len-i)%2!=0) { //奇数位,需要做变换,
				k *= 7;
				while(k>9) {
					k = k/10+k%10;
				}
			}
			sum+=k;
		}
		if(sum%8==0) cout<<"T"<<endl;
		else cout<<"F"<<endl;
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本题考察多层循环,模拟法(三级),函数的定义与调用、进制转换

#include<bits/stdc++.h>
using namespace std;
struct node {
	int cnt; //次数 
	int id; //数值 
} arr[256]; //arr[i] 数值i的值和出现的次数 
//按出现次数排序,如果次数相同,按灰阶值从小到大为序
bool cmp(node a, node b) {
	if(a.cnt == b.cnt) return a.id < b.id;
	return a.cnt > b.cnt;
}
//十六进制转成十进制 
int change1(char ch){
	if(ch>='0' && ch<='9') return ch-'0';
	else return ch-'A'+10;
}
//十进制转成十六进制 
char change2(int num){
	return char(num<10? num+'0' : num-10+'A');
}
int main() {
	int n;
	cin>>n;
	string s[20];
	//输入n行灰度图像,记录0~255出现的次数 
	for(int i=0; i<n; i++) {
		cin>>s[i]; //灰度图像
		for(int j=0; j<s[i].size(); j=j+2) {
			//每两位十六进制转成十进制,对应0~255的数值 
			int num=change1(s[i][j])*16+change1(s[i][j+1]); 
			arr[num].cnt++;
			arr[num].id=num;
		}
	}
	//排序,找出出现次数最多的前16个数值,将其十六进制存入code 
	sort(arr, arr+256, cmp);
	string code="";
	for(int i=0; i<16; i++) {
		code += change2(arr[i].id/16); 
		code += change2(arr[i].id%16); 
	}
	cout<<code<<endl;
	//进行压缩:如果在code内,用code内的,如果不在,选择code里最接近的 
	for(int i=0; i<n; i++) {
		for(int j=0; j<s[i].size(); j=j+2){
			int num1=change1(s[i][j])*16+change1(s[i][j+1]);
			int diff=256, id=0; 
			for(int k=0; k<code.size(); k=k+2){
				int num2=change1(code[k])*16+change1(code[k+1]);
				if(num1==num2){
					id = k;
					break;
				}else if(abs(num1-num2) < diff){
					diff = abs(num1-num2);
					id = k;
				}
			}
			cout<<change2(id/2); 
		}
		cout<<endl;
	}
	return 0;
}

http://www.kler.cn/a/447726.html

相关文章:

  • 【机器人】机械臂位置、轨迹和转矩控制概要
  • 人工智能在VR展览中扮演什么角色?
  • 【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)
  • 全志H618 Android12修改doucmentsui鼠标单击图片、文件夹选中区域
  • Java期末复习暨学校第十三次上机课作业
  • 批量DWG文件转dxf(CAD图转dxf)——c#插件实现
  • 目标检测文献阅读-Faster R-CNN:通过区域建议网络实现实时目标检测(12.16-12.22)
  • 【Rust 学习笔记】Rust 基础数据类型介绍——字符和字符串类型
  • 设计模式-创建型模式-简单工厂模式详解
  • Oracle中间件 SOA之 OSB 12C服务器环境搭建
  • 《开启微服务之旅:Spring Boot 从入门到实践》(三)
  • HTTP协议及安全防范
  • Unity 开发Apple Vision Pro物体识别追踪ObjectTracking
  • Numpy基本操作
  • OnlineMusic项目测试报告
  • 【Leetcode 每日一题】1387. 将整数按权重排序
  • 2024年12月CCF-GESP编程能力等级认证C++编程八级真题解析
  • Jenkins持续集成部署——jenkins安装
  • 时间管理系统|Java|SSM|JSP|
  • 国际抖音TikTok矩阵运营的关键要素有哪些?
  • 【MySQL】深入了解索引背后的内部结构
  • 使用开源在线聊天工具Fiora轻松搭建个性化聊天平台在线交流
  • 海信中央空调 冬日取暖的舒适密码
  • RAG+AI Agent在医疗领域的应用有哪些?
  • 关于redis锁的简单实现
  • GTID下复制问题和解决