万卷网> GESP认证 >C++ > 2024年12月CCF—GESP(C++三级)编程能力等级认证试卷

2024年12月CCF—GESP(C++三级)编程能力等级认证试卷
三级 2024 2025-06-02 11:08:35 59

一、单选题

1.

a|10(a与10都是10进制,且二进制表示最高位为1)运算的结果是( )。

A.

使a的二进制表示从右往左的第二位为1

B.

使a的二进制表示从右往左的第一位为0

C.

使a的二进制表示从右往左第二位为0

D.

使a的二进制表示最高位为0

2.

下列程序中,假设一个字符占用的内存空间是1,下列程序中,ch占用的内存空间是 ( )

char ch[] = "hello world";
size_t ret=strlen(ch);
cout<<ret<<endl;
A.

11

B.

10

C.

13

D.

12

3.

兔子五元一只,鸡三元一只,小鸭子一元三只,现在你有一百元要买一百只,兔子、鸡、鸭子,问兔子、鸡、鸭子各买多少只,每种必须至少一只,下列哪个程序能实现。( )。

A.
for(int i = 0; i <= 100; i++){
	for(int j = 0; j <= 100; j++){
		for(int k = 0; k <= 100; k++){
			if(i + j + k == 100 && 25 * i + 10 * j + k == 300)
				cout << i << " " << j << " " << k << endl;
		}
	}
}
B.
for(int i = 0; i <= 100; i++){
	for(int j = 0; j <= 100; j++){
		for(int k = 0; k <= 100; k++){
			if(i + j + k == 100 && 20 * i + 10 * j + k == 300)
				cout << i << " " << j << " " << k << endl;
		}
	}
}
C.
for(int i = 0; i <= 20; i++){
	for(int j = 0; j <= 34; j++){
		for(int k = 0; k <= 20; k++){
			if(i + j + k == 100 && 15 * i + 9 * j + k == 300)
				cout << i << " " << j << " " << k << endl;
		}
	}
}
D.
for(int i = 0; i <= 100; i++){
	for(int j = 0; j <= 100; j++){
		for(int k = 0; k <= 100; k++){
			if(i + j + k == 100 && 15 * i + 9 * j + k == 300)
				cout << i << " " << j << " " << k << endl;
		}
	}
}
4.

下列程序最后输出的是()

int a=65;
cout<<tolower(a)<<endl;

A.

65

B.

A

C.

a

D.

97

5.

下列二进制表示的十进制数值分别是( )

[10000011]原=( )
[10000011]补=( )
A.

-125,-3

B.

-3, -125

C.

-3,-3

D.

-125,-125

6.

关于计算机中的编码,下列说法中错误的是()

A.

对于无符号数,原码就是真值

B.

正数的反码是其本身

C.

负数的反码和补码是不一样的

D.

负数的反码,在其原码的基础上, 各个位取反

7.

625.625变成二进制是( )。

A.

1001110001.101

B.

101.101

C.

101.1001110001

D.

1001110001.1101

8.

下面逻辑运算中,正确的是( )

A.

5&&3==0

B.

5|3==8

C.

5||3==11

D.

5&3==0001

9.

下列程序输出的是( )

string ch="hello";
if(ch[5]==NULL)
{
cout<<"right"<<endl;
}
else if (ch[5]=='\0')
{
cout<<"wrong"<<endl;
}
else
{
cout<<"hello"<<endl;
}
A.

right

B.

wrong

C.

hello

D.

不能正确执行

10.

16进制数B2025转换成8进制数是()

A.

2620045

B.

2004526

C.

729125

D.

2420045

11.

想要计算从数字n到数字m之间(包含n和m)有多少个数字d出现,下列程序哪个能够实现( )。

A.
int n,m,res,d;
cin >> n >> m>>d;
for(int i = n+1; i <= m; i++){
	int temp = i;
	while(temp){
		if(temp % 10 == d) res++;
		temp /= 10;
	}
}
cout << res << endl;
return 0;
B.
int n,m,res,d;
cin >> n >> m>>d;
for(int i = n; i <= m; i++){
	int temp = i;
	while(temp){
		if(temp % 10 = d) res++;
		temp /= 10;
	}
}
cout << res << endl;
return 0;
C.
int n,m,res=0,d;
cin >> n >> m>>d;
for(int i = n; i <= m; i++){
	int temp = i;
	while(temp){
		if(temp % 10 == d) res++;
		temp /= 10;
	}
}
cout << res << endl;
return 0;
D.
int n,m,res=0,d;
cin >> n >> m>>d;
for(int i = n; i <= m; i++){
	while(temp){
		if(temp % 10 == d) res++;
		temp /= 10;
	}
}
cout << res << endl;
return 0;
12.

补码1111 1101进行运算1111 1101>>1以后得到的结果是()

A.

1111 1100

B.

-2

C.

1111 1101

D.

1111 1010

13.

下列代码输出的是

string s="1234@@chenadai";
string str="12345";
s.replace(1,5,str);
cout<<s<<endl;
A.

12345

B.

2345@

C.

112345chenadai

D.

12345chenadai

14.

工人工作一天,会得到一个金环作为工资报酬,某个工作需要15天完成,一条15个环的金环项链,为了严格执行每天工作结束时,完成对工人工资的结算,最少需要将金环项链剪裁成几段,每段几个金环( )

A.

4段,分别是1、2,4,8

B.

15段,每段1个

C.

6段,分别是3、3、3、3、2、1

D.

9段,分别是2、2、2、2、2、2、1、1、1

15.

求小于等于N的素数的方法中,有一种方法是将所有从2到它本身减1的数都除一遍,如果不能整除,就是素数。下列哪个程序,体现了这种方法()

A.
if(N >= 3){
cout<<2<<endl;
for(int i = 2;i <= N;i ++){
	for(int j = 2;j < i;j ++){
		if(i % j != 0){
			flag = 1;
		}
	}
	if(flag == 0){
		cout<<i<<endl;
	}
	flag = 0;
	}
}
B.
if(N >= 2){
for(int i = 3;i <= N;i ++){
	for(int j = 2;j < i;j ++){
		if(i % j == 0){
			flag = 1;
		}
	}
	if(flag == 0){
		cout<<i<<endl;
	}
	flag = 0;
	}
}
C.
if(N >= 2){
cout<<2<<endl;
for(int i = 3;i <= N;i ++){
	for(int j = 2;j < i;j ++){
		if(i % j == 0){
			flag = 1;
		}
	}
	if(flag == 0){
		cout<<i<<endl;
	}
	flag = 0;
	}
}
D.
if(N >= 2){
	cout<<2<<endl;
	for(int i = 3;i <= N;i ++){
		for(int j = 2;j < i;j ++){
			if(i % j == 0){
				flag = 1;
			}
		}
		if(flag == 0){
			cout<<i<<endl;
		}
	}
}

二、判断题

1.

为了简化计算机基本运算电路,使加减法都只需要通过加法电路实现,也就是让减去一个正数或加上一个负数这样的运算可以用加上一个正数来代替。于是改变负数存储的形式,存储成一种可以直接当成正数来相加的形式,这种形式就是补码。

A.正确 B.错误
2.

使用原码进行的计算, 2+(-1) 的结果是 -3

A.正确 B.错误
3.

CCF(十六进制) = 12363(七进制)

A.正确 B.错误
4.
char a='A';
a=a+32;
cout<<(int)a<<endl;

将输出 97

A.正确 B.错误
5.

自然界中,最小的素数是 2

A.正确 B.错误
6.

string ch="chen";
cout<<ch[4]<<endl;


该段程序将不能正确执行

A.正确 B.错误
7.

下列程序输出的是 A

char x=65;
x=x&00001111;
cout<<x<<endl;

A.正确 B.错误
8.

下列可执行程序段中,最后 pos 的值是 4

string str="chenADai";
int pos = str.find('D');
--pos&11;

A.正确 B.错误
9.

10 进制数 63,在转换成二进制的计算过程中,产生了如下的式子:

63/2=31 余 1
31/2=15 余 1
15/2=7 余 1
7/2=3 余 1
3/2=1 余 1
1/2=0 余 1

按照从前往后的顺序,获得 63 的二进制值是 111111

A.正确 B.错误
10.

反码计算加减法:加法与减法结果都是正确的,只是解决不了 -0 的问题

A.正确 B.错误

三、编程题

1.

数字替换

时间限制:1.0 s

内存限制:512.0 MB

题面描述

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

输入格式

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

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

输出格式

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


输入样例

5 0
-2 -1 0 1 2

输出样例

-2 -2 0 2 2

对于全部数据,保证有 1≤n≤105,∣k∣,∣ai∣≤105 。

2.

打印数字

时间限制:1.0 s

内存限制:512.0 MB

题面描述

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

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

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

输入格式

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

输出格式

输出对应的表示形式。


输入样例

12230

输出样例

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

对于全部数据,保证有 0≤n≤106,且 n 仅由数字 0,1,2,3 组成。

公众号
客服 反馈
顶部