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

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

2024年3月真题

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

在这里插入图片描述
正确答案:C
考察知识点:函数的定义与调用、函数参数传递的概念
解析:C++函数参数传递:值传递、引用传递、指针传递。
函数 f 的参数是引用类型,调用时需传入变量本身(直接传变量名),这样函数内对x的修改会直接作用于原变量。
选项 A 传入地址(&a是指针类型,与函数参数的引用类型不匹配);
选项 B 的*a语法错误(a不是指针);
选项 D 传入的是表达式a-3(临时值,非原变量);
只有选项 C f(a)直接传入变量a,能修改a的值。答案为C。

在这里插入图片描述
正确答案:C
考察知识点:数组
解析:sizeof这个运算符,用于计算变量、数据类型或表达式所占用的内存字节数。x是int类型数组,含 4 个元素,int类型数据占4字节,因此sizeof(x)=4×4=16。geSP[16]对应字符是’n’。答案为C。

在这里插入图片描述
在这里插入图片描述
正确答案:D
考察知识点:函数的定义与调用、函数参数传递的概念
解析:函数foo的参数是float *f(指向float类型的指针),函数内执行return int(*f*2);,即先对指针指向的float值乘以 2,再强制转换为int类型返回。
main函数 调用foo(fnum)时,fnum作为数组名,会退化为指向数组第一个元素的指针,因此foo函数中 *f 就是fnum[0]的值1.1。计算1.1×2 = 2.2,强制转换为int后得到2,所以fnum[1] = 2。
输出 fnum[0] + fnum[1] = 1.1 + 2 = 3.1。答案为D。

在这里插入图片描述
正确答案:D
考察知识点:二维数组与多维数组基本应用
解析:arr[1]是二维数组的一个一维子数组,含16个int元素,每个int占4字节,因此内存大小为16×4 = 64字节。答案为 D。

在这里插入图片描述
正确答案:C
考察知识点:二维数组与多维数组基本应用、C++指针类型的概念及基本应用
解析:二维数组arr[3][16]中,每个一维子数组含16个int元素,每个int占4字节,因此每个子数组的字节数为16×4 = 64(十六进制为0x40)。arr的地址是0x28cbc0,arr[1]的地址为0x28cbc0 + 0x40 = 0x28cbd0。答案为C。

在这里插入图片描述
正确答案:C
考察知识点:C++指针类型的概念及基本应用、字符串
解析:字符指针p指向字符串"I love GESP!“,p+i 是指针运算,p+0 指向第 1 个字符,p+1 指向第 2 个字符,…,p+5 指向第 6 个字符(索引 5)‘e’,输出从’e’开始的子串"e GESP!”。答案为C。

在这里插入图片描述
在这里插入图片描述
正确答案:D
考察知识点:变量的作用域
解析:在 C++ 中,当局部变量和全局变量同名时,局部变量会屏蔽(隐藏)全局变量。main函数内定义的局部变量rc未初始化,其值是不确定的。执行++rc时,对未初始化的变量进行操作,结果不确定,因此输出结果不确定。答案为D。

在这里插入图片描述
正确答案:A
考察知识点:递推算法
解析:该函数通过已知的前两项f[0]、f[1],依次推导后续项f[i] = f[i-1] + f[i-2],这种从已知条件逐步推导未知结果的算法属于递推。答案选 A。

在这里插入图片描述
正确答案:C
考察知识点:排序算法
解析:插入排序的算法思想是:将待排序数组分为已排序区间和未排序区间,初始时已排序区间只有第一个元素。然后依次从未排序区间取出元素,插入到已排序区间的合适位置,使已排序区间始终保持有序,重复此过程直到未排序区间元素为空,最终得到有序数组。
插入排序在最好情况(数组已完全有序)下,每趟只需比较 1 次即可确定插入位置,无需移动元素。总操作次数与元素个数N成正比,时间复杂度为 O(N)。答案为C。

在这里插入图片描述
在这里插入图片描述
正确答案:B
考察知识点:结构体、C++指针类型的概念及基本应用
解析:结构体变量XiaoYang的首地址与其中第一个成员no的地址相同,因为结构体成员是连续存储的,no作为第一个成员,其地址就是结构体变量的起始地址。因此第 11 行和第 12 行输出的地址X和Y相等,即X==Y。答案为B。

在这里插入图片描述
在这里插入图片描述
正确答案:C
考察知识点:文件重定向与文件读写操作
解析:本题代码实现了从文件 1.txt 中进行读入。line是字符串类型,x是整数类型。fin>>line,实现的字符串读入,要求字符串中没有空格。因此代码中for循环执行两次fin >> line,读取 “50”、“2024” 后,文件指针移动到 “3.16”。之后fin>>x尝试读取数值,但此时遇到的是 “3.16”,x是整数类型,因此只将小数点之前的整数部分读入x,即3。答案为C。

在这里插入图片描述
在这里插入图片描述
正确答案:C
考察知识点:C++指针类型的概念及基本应用、字符串、数组
解析:数组s是字符指针数组,*s 指向第一个字符串的第一个字符,即指向 “2024” 的’2’,*s + i是指针运算。
当i=0时,*s + 0,即 *s 指向 “2024” 的’2’,依据C++关于字符串的输出(截止到’\0’为止),此处输出:2024。
当i=1时,*s + 1 指向 “2024” 的第二个字符’0’, 依据C++关于字符串的输出(截止到’\0’为止),此处输出:024。
因此输出第 2 行是024。答案为C。

在这里插入图片描述
正确答案:B
考察知识点:变量的作用域
解析:A选项:extern 用于声明外部变量 / 函数,扩展作用域而非限定。
C选项:inline 用于修饰内联函数,与作用域无关。
D选项:public 是类的访问权限修饰符,控制成员的访问范围,并非对象作用域的限定关键字。
B选项:static 关键字可限定对象的作用域:全局 static 对象作用域为当前文件;局部 static 对象作用域为所在函数 / 代码块,且生命周期贯穿程序运行。答案为B。

在这里插入图片描述
正确答案:C
考察知识点:计算机基础
解析:鸿蒙通常指华为公司发布的鸿蒙操作系统,是一款基于微内核的面向全场景的分布式操作系统。它旨在打破不同设备之间的壁垒,让多种设备通过系统直接连通,实现应用程序在手机、平板电脑、电视、智能手表、智能家电等多种设备上的跨端运行。答案为C。

在这里插入图片描述
正确答案:C
考察知识点:计算机历史
解析:王选,是中国著名计算机学家,重大贡献:发明汉字激光照排系统、华光系列和方正电子出版系统等。答案为C。

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

在这里插入图片描述
正确答案:正确
考察知识点:排序算法
解析:选择排序,将待排序数组分为「已排序区间」和「未排序区间」,初始时已排序区间为空。每次从未排序区间中找到最小(或最大)元素,将其与未排序区间的第一个元素交换位置,此时该元素加入已排序区间。重复此过程,直到未排序区间为空。
选择排序第一趟:找到数组中最小的元素,与第一个元素交换。原数组[2,0,2,4,3,1,6]中最小元素是0(位于索引 1),与第一个元素2交换后,数组变为[0,2,2,4,3,1,6]。表述正确。

在这里插入图片描述
正确答案:正确
考察知识点:排序算法
解析:排序算法分为内排序(数据全部在内存中处理)和外排序(数据无法全部装入内存,需借助外存如磁盘分阶段处理)。当待排序数据不能都装进内存时,外排序算法(如归并外排)是必要的解决方案。表述正确。

在这里插入图片描述
正确答案:错误
考察知识点:C++指针类型的概念及基本应用
解析:&++a中,&是取地址运算符,作用于++a(先将a自增为 6,再取其地址),输出的是变量a的内存地址(如十六进制数值),而非6。表述错误。

在这里插入图片描述
正确答案:正确
考察知识点:函数的定义与调用、形参与实参、作用域
解析:在 C++ 中,全局变量的作用域是整个程序,两个函数可通过读写同一个全局变量来传递数据。例如定义全局变量int g_data;,函数A修改g_data,函数B读取g_data,即可实现数据传递。表述正确。

在这里插入图片描述
正确答案:错误
考察知识点:二维数组与多维数组基本应用
解析:定义数组 int a[2024][3][16]={2,0,2,4,3,1,6},会将{2,0,2,4,3,1,6} 依次填充到数组中,按行存储,一行填充完毕,填充下一行,其余位置自动初始化为 0。a[2023][2][15]是数组的最后一个元素,它的值为0,输出为0。表述错误。

在这里插入图片描述
正确答案:错误
考察知识点:函数参数传递的概念
解析:在 C++ 中,函数参数为指针时,函数内部可通过解引用(如*p = 10;)修改指针指向的变量值;也可修改指针本身的值(如p = new int;),但这种修改仅在函数内部生效,不影响外部实参指针的地址。
从可否修改来说,本题的表述应该为正确。但本题官方给的答案是错误,那可以理解为修改后是否影响外部实参。

在这里插入图片描述
正确答案:错误
考察知识点:异常处理
解析:在 C++ 中,try子句里抛出的结构体等自定义类型异常,只要catch块中声明的类型与抛出类型匹配(或存在继承关系),就能被捕获。例如定义结构体struct MyErr {};,在try中throw MyErr();,可通过catch(MyErr& e)捕获。表述错误。

在这里插入图片描述
正确答案:错误
考察知识点:位运算
解析:在 C++ 中,^是按位异或运算符。9^2的按位异或结果是11(9 的二进制是1001,2 的二进制是0010,异或后为1011即十进制11),因此输出不是 81。表述错误。

在这里插入图片描述
正确答案:正确
考察知识点:计算机基础
解析:路由器的主要功能是连接不同的网络(如将家庭局域网连接到互联网),并为连接的设备分配 IP 地址等网络参数,实现网络数据的转发等。能让数字电视设置 IP 地址并接入以收看节目,说明该 WIFI 盒子可以为设备分配 IP 地址等网络相关功能,具备路由器的基本功能。表述正确。

在这里插入图片描述
正确答案:正确
考察知识点:控制语句结构-循环
解析:for循环的结构for(初始化; 条件; 迭代)可拆解为:先执行初始化,再用while(条件)判断,循环体内执行迭代和原逻辑。例如for(int i=0; i<5; i++)可转化为int i=0; while(i<5){ 逻辑; i++; },因此任何for循环都能等价转化为while循环。表述正确。

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

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

本题考察:字符串及其操作、多测试样例操作、函数的定义和调用

a和b是相似的:a通过删除一个字符,或插入一个字符,或修改一个字符变成b,那么字符串a和b要想相似,则它们的长度差<=1。

分三种情况讨论:

1、字符串a和字符串b长度差>=2,肯定不相似;

2、字符串a和字符串b长度差为0,只能通过修改实现,统计差别字符的个数,差1个则相似,否则不相似;

3、字符串a和字符串b长度差为1,可以通过删除或者插入一个字符实现,a更长通过删除,b更长通过插入。实际上,如果b更长,可以交换a,b将其统一成删除操作。

#include <bits/stdc++.h>
using namespace std;
bool check(string a, string b) {int lena=a.size(), lenb=b.size(); if(abs(lena-lenb) >= 2) return false; //字符串a和字符串b长度差>=2,不相似 else if(lena == lenb) { //长度相等,统计不同字符的个数int cnt=0;for(int i=0; i<lena; i++) {if(a[i] != b[i]){cnt++;if(cnt>1) return false; //不同字符数量超过1,不相似 } }return true; //长度相等,只有1个不同,相似 } else { //长度差1if(lena < lenb){ //如果b更长,交换a、b,统一操作 swap(a, b);swap(lena, lenb);} int idx=0; //偏移量 for(int i=0; i<lena; i++){if(a[i] == b[i-idx]) continue;else{ //遇到不相等的 if(idx == 0){ //偏移量为0,意味着是第一次遇到不相等的,考虑删除a[i],则此后a[i]和a[i-1]进行比较 idx=1;continue;}else{ 	//偏移量不为1,意味着是第二次遇到不相等的。返回falsereturn false;		} }}return true;}
}
int main() {int n;cin>>n;while(n--){string a, b;cin>>a>>b;if(check(a, b)) cout<<"similar"<<endl;else cout<<"not similar"<<endl;}return 0;
}

在这里插入图片描述

本题考察:排序算法、贪心算法。贪心算法在GESP考试大纲中是放在五级中的, 但本题的贪心策略并没有很难,容易理解,所以严格来说,并不算超纲。

题意:小杨同学做题,在第 k 天时,他必须要完成 k 道题,否则他就会偷懒。给定n 套题单,每一套题单中有一定数量的题目,问小杨同学最多做题的天数?

贪心策略:要想小杨同学做题的天数最多,则题量大的题单应该放在后边,尽量满足小杨越来越大的题量需求。

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n, arr[N];
int main(){cin>>n;for(int i=0; i<n; i++) cin>>arr[i];sort(arr, arr+n); //题单升序排序 int k=1, idx=0; //第k天要完成k道题,idx题单数组下标 while(true){while(idx<n && arr[idx]<k) idx++; //寻找满足第k天要求的题单 if(idx<n) idx++;//如果找到,则第k天做idx下标的题单 else break; //否则结束while循环 k++; } cout<<k-1;return 0;
}
http://www.dtcms.com/a/533460.html

相关文章:

  • C++ 类的学习(五) 友元成员
  • 哪里做网站最便宜微信开发者工具下载官网下载
  • SpringBoot—配置文件分类 文件基本(数据)格式 获取数据 profile 内部(外部)配置顺序
  • 大做网站免费人脉推广
  • 手机模板的网站深圳营销网站
  • 第十一章:跃迁篇 - 集成 MCP,连接能力宇宙
  • 建设制作网站wordpress数据表格
  • 建立网站多少钱一年phpmyadmin做网站
  • html5网站布局教程网站建设座谈会上的发言
  • 【补题】 Codeforces Round 1039 (Div. 2) D. Sum of LDS
  • 自建站怎么接入支付个人买卖网站如何做
  • Linux小课堂: systemd核心功能详解
  • 专做网站wordpress 图像滑块插件
  • 郑州知名做网站中国市场网
  • 【技术深度】腾讯 IM 接入规范文档(基于区块链交易所 APP)
  • 什么是区块链?有哪些场景需要用到?
  • 该如何选择深圳网站建设公司菏泽网站建设公司
  • 基于AI Agent的数据资产自动化治理实验
  • Rust 并发编程进阶:线程模型、通道通信与异步任务对比分析
  • 南京一站式工程装饰装修网站做网站建设的名声很差吗
  • 三型布局的网站兴义网站网站建设
  • LangChain最详细教程之Model I/O(三)Output Parsers
  • 网站制作 万网营销型网站建设设计服务
  • 做网站前端用什么语言网站建设是什么专业
  • Photoshop - Photoshop 工具栏(17)铅笔工具
  • sem竞价托管多少钱搜索引擎优化的内容有哪些
  • 合肥营销网站建设价格网站策划的工作要求
  • Diffusion Planner(1): 论文解读
  • 怎样做pdf电子书下载网站网站建设合同贴花算哪一类
  • 交互设计精髓斜杠青年seo工作室