视频讲解:GESP2024年12月三级C++真题讲解

一、单选题

第1题

解析:

答案B

1、[1000 0011]原  转二进制 
符号位是1,所以是负数
-(2^1+2^0)=-(2+1)=-3
2、[1000 0011]补  
转反码变  1000 0100
转原码变  1111 1011
转二进制 
 -(2^6+2^5+2^4+2^3+2^1+2^0)
= -(64+32+16+8+2+1)
=-125

第2题

解析:

答案D

负数反码,符号位不变

第3题

解析:

答案A

1、逐位转为二进制

B 2 0 2 5
1011 0010 0000 0010 0101

2、以3个隔开,再转为 八进制

10 110 010 000 000 100 101
2 6 2 0 0 4 5

第4题

解析:

答案A

1、解决整数 625
625%2=312...1
312%2=156...0
156%2=78...0
78%2=39...0
39%2=19...1
19%2=9...1
9%2=4...1
4%2=2...0
2%2=1...0
1%2=0...1
整数二进制为 10 0111 0001
2、解决浮点数  0.625
0.625*2=1.250   整数为1
0.250*2=0.5  整数为0
0.5*2=1  整数为1
浮点数二进制为 101
3、合并结果
10 0111 0001.101

第5题

解析:

答案D

第6题

解析:

答案B

补码 1111 1101

右移1位,符号位不变 1111 1110

-1得反码 1111 1101

取反得原码 1000 0010

转为十进制,即-2

第7题

解析:

答案C

字符:1 2 3 4 @ @ c h e n a  d  a  i
下标:0 1 2 3 4 5 6 7 8 9 10 11 12 13

replace(1,5,str)
从下标1开始,替换5个字符,为str变量

即下面替换 成“12345”
字符:2 3 4 @ @
下标:1 2 3 4 5

字符串最终为:“112345@@chenadai”

第8题

解析:

答案A

a变量未知
运算过程为下
 0010
|????
-----------
 ??1?

从右往左第二位 ,绝对是1

第9题

解析:

答案A

ch[5]存储"\0"

在c++中,0 、‘\0’、NULL、false 都等价

所以  if(ch[5]==NULL) 条件符合,输出“right”

第10题

解析:

答案D,代码输出的是11,但是题目问的是 "ch占用空间" ,char数组会在末尾添加‘\0’,标记为结束,所以占用空间为11+1=12

第11题

解析:

答案D

ASCII 65对应 ‘A’

tolower转小写,变为 ‘a’

因为tolower()函数 返回的是 int类型,所以输出 ‘a’对应 ASCII 97

第12题

解析:

答案C

选项A:i=n+1,不符合“包含n”

选项B:res 没有初始化为0

选项D:temp没有拷贝i

第13题

解析:

答案D

A选项:条件(25*i + 20*j +k ==300),换算单位不统一

B选项:条件(20*i + 10*j +k ==300),换算单位不统一

C选项:循环(int k=0;k<=20;k++)有误,k表达的是鸭子的数量,鸭子数量最多不止20只

D选项:其实也有问题,无法满足 “每种必须一只” ,但是官方答案给了D,我们只能某某接受

第14题

解析:

答案C

A选项:if(i % j != 0){  flag=1 }  错误,flag为1表达的应该是“ i不是素数 ”

B选项:没有解决2这个素数

D选项:flag没有重置

第15题

解析:

答案A

假设4段,分别1、2、4、8

天数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
工人 1 2 1,2 4 1,4 2,4 1,2,4 8 1,8 2,8 1,2,8 4,8 1,4,8 2,4,8 1,2,4,8
老板 2,4,8 1,4,8 4,8 1,2,8 2,8 1,8 8 1,2,4 2,4 1,4 4 1,2 2 1

二、判断题

第1题

解析:

答案√,补码就是把负数用另一种方式存储,实现加法模拟减法

第2题

解析:

答案√

2原码:0000 0010
-1原码:1000 0001

 0000 0010
+1000 0001
----------------
 1000 0011
即-3

第3题

解析:

答案√

第4题

解析:

答案×,结果正确,表述错误,应该是从后往前

第5题

解析:

答案√

0开头表示八进制
即1111(8)

全部转为二进制
65的二进制 0100 0001
1111(8)
=512 + 64 + 8 +1
二进制为:0010 0100 1001

做&运算
  0000 0100 0001
& 0010 0100 1001
--------------------
  0000 0100 0001
还是65,即‘A’

第6题

解析:

答案√

find('D')的下标
字符:c h e n A D a i
下标:0 1 2 3 4 5 6 7
所以pos = 5

--pos
pos变为4

pos&11不影响 pos的值

第7题

解析:

答案×,ch[4]是‘\0’为终止符,可以输出,但是不可见

第8题

解析:

答案√,‘A’ 的 ascii值为65,65+32=97

第9题

解析:

答案√,数学定义中,2就是最小的素数

第10题

解析:

答案√

CCF(16)
转十进制
C*16^2 + C*16^1 + F*16^0
=12*16*16+12*16+15
=3072+192+15
=3279

12363(7)
转十进制
1*7^4 + 2*7^3 + 3*7^2 + 6*7^1 + 3*7^0
=7*7*7*7 + 2*7*7*7 + 3*7*7 + 6*7 + 3*1
=49*49 + 14*49 + 3*49 +42+ 3
=49*( 49+14+3 ) + 45
=49*66 + 45
=3234+45
=3279

三、编程题

第1题 [GESP202412 三级] 数字替换

题目描述

小杨有一个包含 n 个数字的序列 A,即 A=[a1​,a2​,…,an​],他想将其中大于 k 的数字都替换为序列的最大值,将其中小于 k 的数字都替换为序列的最小值,请你帮他计算出替换后的序列。

输入格式

第一行包含两个正整数 n,k,含义如题面所示。

第二行包含 n 个数字,代表序列 A。

输出格式

输出 n 个整数,代表替换后的结果。

输入输出样例

输入 #1

5 0
-2 -1 0 1 2

输出 #1

-2 -2 0 2 2

说明/提示

对于全部数据,保证有 1≤n≤10^{5},∣k∣,∣ai​∣≤10^{5}

答案

#include<bits/stdc++.h>
using namespace std;
int main(){
	//1)确定数量n  条件k
	int n,k;
	cin>>n>>k;
	//2)循环填充n个数
	int arr[100010]={};
	int maxx=INT_MIN,minn=INT_MAX;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
		//3)比较找出最大 最小
		if(arr[i]>maxx) maxx=arr[i];
		if(arr[i]<minn) minn=arr[i];
	}
	//4)输出修改后的数组
	for(int i=1;i<=n;i++){
		if(arr[i]==k) cout<<k<<" ";
		else if(arr[i]<k) cout<<minn<<" ";
		else cout<<maxx<<" ";
	}
}

第2题 [GESP202412 三级] 打印数字

题目描述

小杨为数字 0,1,2 和 3 设计了一款表示形式,每个数字占用了 5×5 的网格。数字 0,1,2 和 3 的表示形式如下:

..... ****. ..... .....
.***. ****. ****. ****.
.***. ****. ..... .....
.***. ****. .**** ****.
..... ****. ..... .....

小杨想请你将给定的数字 n 转换为对应的表示形式。

输入格式

第一行包含一个非负整数代表 n。

输出格式

输出对应的表示形式。

输入输出样例

输入 #1

12230

输出 #1

****.....................
****.****.****.****..***.
****.................***.
****..****.********..***.
****.....................

说明/提示

对于全部数据,保证有 0≤n≤10^{6},且 n 仅由数字 0,1,2,3 组成。

答案

#include<bits/stdc++.h>
using namespace std;
string ans1,ans2,ans3,ans4,ans5;
void f(char x){
	if(x=='0'){
		ans1+=".....";
		ans2+=".***.";
		ans3+=".***.";
		ans4+=".***.";
		ans5+=".....";
	}else if(x=='1'){
		ans1+="****.";
		ans2+="****.";
		ans3+="****.";
		ans4+="****.";
		ans5+="****.";
	}else if(x=='2'){
		ans1+=".....";
		ans2+="****.";
		ans3+=".....";
		ans4+=".****";
		ans5+=".....";
	}else{
		ans1+=".....";
		ans2+="****.";
		ans3+=".....";
		ans4+="****.";
		ans5+=".....";
	}
}
int main(){
	//1)确定数字(字符串)
	string s;
	cin>>s;
	//2)遍历字符串(从前往后)
	for(int i=0;i<s.size();i++){
		//3)拼接对应网格
		f(s[i]);
	}
	//4)输出结果
	cout<<ans1<<endl; 
	cout<<ans2<<endl; 
	cout<<ans3<<endl; 
	cout<<ans4<<endl; 
	cout<<ans5<<endl; 
}

Logo

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

更多推荐