视频讲解:GESP2024年12月四级C++真题讲解_哔哩哔哩_bilibili

一、单选题

第1题

解析:

A:正确

B:函数没有设置返回类型

C:返回类型void错误,应该为float

D:没有正确返回结果,应为x*x

第2题

解析:

A:times值不变,函数无法影响实参,函数传递的值是拷贝的

B:正确

C:n是形参,times是实参

D:函数传递值需按顺序,一一对应

第3题

解析:

答案B,函数引用传递,会影响传递的实参,所以结果为10

第4题

解析:

答案B,p_arr+=1,使数组起点地址后移一个单位,p_arr起点变为原来的下标1,所以输出p_arr[0],会输出原来p_arr[1]的值,即0.5

第5题

解析:

答案D,因指针p指向x变量,所有改变p,等价于改变x,所以p、x都改变为22

第6题

解析:

答案D,使用new关键字,需指针

第7题

解析:

答案D,array[0][0]与array[1][1]距离4个单位,int类型占4个字节,所以加16个字节,即0x7ffee4065820+16=0x7ffee4065830

第8题

解析:

答案D,多维数组省略大小,需初始化数据

第9题

解析:

答案A,BC选项不应该为+=,result后移时的过度;D选项f2变量原值丢失

第10题

解析:

答案C,冒泡排序最忧的情况下,时间复杂度为O(n)

第11题

解析:

答案B,第一对气泡4,1做交换,变为{1,4,3,1,5,2},第二对气泡4,3做交换,变为{1,3,4,1,5,2},锁定B选项

第12题

解析:

答案B,函数嵌套函数,通常时间复杂度为O(n²)

第13题

解析:

答案A,插入排序从第2位开始,需要和前面每一位比较,起点为上一位,所以j=i-j;当前位需作比较,所以base=nums[i]

第14题

解析:

答案C,ofstream方式,需用outFile<<"..."<<endl,才可输入到txt文档内

第15题

解析:

答案B,函数hmean内抛出错误runtime_error,所以由第15行接收

二、判断题

第1题

C++ 中,下面代码可以正确定义指针和初始化指针
int* ptr;
*ptr = 10;

答案:❌

解析:

应为 int* ptr=&a;  初始化指针需要赋值变量的地址

第2题

一个函数必须在调用之前既声明又定义

答案:❌

解析:

可以先声明,后定义,如下

#include<iostream>
using namespace std;
int add(int a,int b);
int main(){
	cout<<add(1,2);
}
int add(int a,int b){
	return a+b;
}

第3题

函数参数可以通过值传递、引用传递和指针传递,这样函数内对参数的修改可以直接修改传入变量的值

答案:❌

解析:

值传递不可改变变量的值

第4题

int arr[3][] 是一个正确的二维数组的声明

答案:❌

解析:

多维数组的只有第一维度大小可省略

第5题

递推是一种通过已知的初始值和递推公式,逐步求解目标值的算法

答案:✔

解析:

这就是递推算法的解题思维

第6题

某算法的递推关系式为 T(n)=T(n-1)+n( n为正整数)及 T(0)=1,则该算法的时间复杂度为O(n²) 

答案:✔

解析:

函数嵌套函数,通常时间复杂度都为O(n²) 

第7题

冒泡排序的平均时间复杂度为 O(n²),但最优情况下为O(n)

答案:✔

解析:

最坏的情况O(n²) (逆序排列);最优的情况O(n) (已经排好序的数组,优化版冒泡排序)

第8题

冒泡排序和插入排序都是稳定的排序算法

答案:✔

解析:

不稳定的排序有:选择、快排、希尔、堆,其余都为稳定排序

第9题

选择排序是稳定的排序算法

答案:❌

解析:

不稳定的排序有:选择、快排、希尔、堆,其余都为稳定排序

第10题

C++ 语言中,如果一个函数可能抛出异常,那么一定要在 try 子句里调用这个函数

答案:❌

解析:

可以函数调用函数

三、编程题

第1题 [GESP202412 四级] Recamán

答案

#include<iostream>
#include<algorithm>
using namespace std;
bool vis[1000000000];
int main(){
	//1)确定数量
	int n;
	cin>>n;
	//2)循环遍历,填充数列
	int a[3010]={};
	for(int k=1;k<=n;k++){
		//2.1)检测a(k-1)-k,需是正整数且没出现过
		if(a[k-1]-k>0&&!vis[a[k-1]-k]){
			a[k]=a[k-1]-k;
		}else{//否则赋值为a[k-1]+k 
			a[k]=a[k-1]+k; 
		}
		//2.2)标记为出现
		vis[a[k]]=true; 
	} 
	//3)排序(升序)
	sort(a+1,a+n+1);
	//4)输出数列
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	} 
}

第2题 [GESP202412 四级] 字符排序

答案

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	//1)数量有多少组数据t
	int t;
	cin>>t;
	//2)填充每组数据
	for(int i=1;i<=t;i++){
		//2.1)确定字符串数量n;
		int n;
		cin>>n;
		//2.2)填充每个字符串
		string s[110];
		for(int j=1;j<=n;j++){
			cin>>s[j];
		}
		//2.3)根据首字母排序
		sort(s+1,s+n+1);
		//2.4)拼接字符串
		string last_s="";
		for(int j=1;j<=n;j++) last_s+=s[j];
		//2.5)检验字符串(满足从小到大的关系)
		bool flag=true;//假设可以
		for(int j=1;j<last_s.length();j++){
			if(last_s[j-1]>last_s[j]){//前>后 
				flag=false;
				break;
			}
		}
		//2.6)根据flag输出
		if(flag) cout<<1<<'\n';
		else cout<<0<<'\n'; 
	} 
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐