GESP 2024年12月认证 C++ 3级真题
GESP 2024年12月认证 C++ 3级真题
- 场次:2024年12月
- 满分:100 分
- 题目来源:官方直发原件
1 单选题(每题 2 分,共 30 分)
下列二进制表示的十进制数值分别是( )
[10000011]原=( )
[10000011]补=( )
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写标点题干
原卷作
[10000011]原=( )洛谷有题在「原」「补」后加了空格并把全角括号改成半角;已按官方 PDF 第 1 页恢复。
已按官方原件恢复:现为原卷原文
关于计算机中的编码,下列说法中错误的是( )
16 进制数 B2025 转换成 8 进制数是( )
625.625 变成二进制是( )。
下面逻辑运算中,正确的是( )。
补码 1111 1101 进行运算 1111 1101>>1 以后得到的结果是( )
下列代码输出的是
string s="1234@@chenadai";
string str="12345";
s.replace(1,5,str);
cout<<s<<endl;
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
string s="1234@@chenadai";洛谷有题在运算符两侧加空格;已按官方 PDF 第 2 页列位恢复。
已按官方原件恢复:现为原卷原文
a | 10(a 与 10 都是 10 进制,且二进制表示最高位为 1)运算的结果是( )。
下列程序输出的是( )。
string ch="hello";
if(ch[5]==NULL)
{
cout<<"right"<<endl;
}
else if (ch[5]=='\0')
{
cout<<"wrong"<<endl;
}
else
{
cout<<"hello"<<endl;
}
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
if(ch[5]==NULL)洛谷有题在运算符两侧加空格;已按官方 PDF 第 3 页列位恢复。
已按官方原件恢复:现为原卷原文
下列程序中,假设一个字符占用的内存空间是 1,下列程序中,ch 占用的内存空间是( )
char ch[] = "hello world";
size_t ret=strlen(ch);
cout<<ret<<endl;
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
size_t ret=strlen(ch);洛谷有题在 = / << 两侧加空格;已按官方 PDF 第 3 页列位恢复。
已按官方原件恢复:现为原卷原文
下列程序最后输出的是( )
int a=65;
cout<<tolower(a)<<endl;
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
int a=65;洛谷有题在 = / << 两侧加空格;已按官方 PDF 第 3 页列位恢复。
已按官方原件恢复:现为原卷原文
想要计算从数字 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;
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写数值印错题干
原卷作
n+1洛谷有题将选项 A 的 n+1 写成 C1;已按官方 PDF 第 4 页恢复。
已按官方原件恢复:现为原卷原文
兔子五元一只,鸡三元一只,小鸭子一元三只,现在你有一百元要买一百只,兔子、鸡、鸭子,问兔子、鸡、鸭子各买多少只,每种必须至少一只,下列哪个程序能实现。( )。
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;
}
}
}
求小于等于 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 处(照原卷保留,未作修改)
来源题面被改写数值印错题干
原卷作
if(N >= 2){洛谷有题将选项 B/C/D 的 N >= 2 写成 N > 2;已按官方 PDF 第 6–7 页恢复。
已按官方原件恢复:现为原卷原文
工人工作一天,会得到一个金环作为工资报酬,某个工作需要 15 天完成,一条 15 个环的金环项链,为了严格执行每天工作结束时,完成对工人工资的结算,最少需要将金环项链剪裁成几段,每段几个金环( )
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写数值印错选项 3
原卷作
$3$、$3$、$3$、$3$、$2$、$1$洛谷有题选项 C 少写一段 3(写成 3、3、3、2、1);官方 PDF 第 7 页为 3、3、3、3、2、1,已恢复。
已按官方原件恢复:现为原卷原文
2 判断题(每题 2 分,共 20 分)
判断题「√」表示正确,「×」表示错误
为了简化计算机基本运算电路,使加减法都只需要通过加法电路实现,也就是让减去一个正数或加上一个负数这样的运算可以用加上一个正数来代替。于是改变负数存储的形式,存储成一种可以直接当成正数来相加的形式,这种形式就是补码。
使用原码进行的计算, 2+(−1) 的结果是 −3
反码计算加减法:加法与减法结果都是正确的,只是解决不了 −0 的问题
10 进制数 63,在转换成二进制的计算过程中,产生了如下的式子:
1 63/2=31 余 1
2 31/2=15 余 1
3 15/2=7 余 1
4 7/2=3 余 1
5 3/2=1 余 1
6 1/2=0 余 1
按照从前往后的顺序,获得 63 的二进制值是 111111
下列程序输出的是 A
char x=65;
x=x&00001111;
cout<<x<<endl;
下列可执行程序段中,最后 pos 的值是 4
string str="chenADai";
int pos = str.find('D');
--pos&11;
string ch="chen";
cout<<ch[4]<<endl;
该段程序将不能正确执行
char a='A';
a=a+32;
cout<<(int)a<<endl;
将输出 97
自然界中,最小的素数是 2。
CCF(十六进制) = 12363(七进制)
3 编程题(每题 25 分,共 50 分)
数字替换
C++时间 1 s内存 512 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。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
打印数字
C++时间 1 s内存 512 MB标准输入输出
小杨为数字 0,1,2 和 3 设计了一款表示形式,每个数字占用了 5×5 的网格。数字 0,1,2 和 3 的表示形式如下:
..... ****. ..... .....
.***. ****. ****. ****.
.***. ****. ..... .....
.***. ****. .**** ****.
..... ****. ..... .....
小杨想请你将给定的数字 n 转换为对应的表示形式。
输入格式
第一行包含一个非负整数代表 n。
输出格式
输出对应的表示形式。
样例
12230
****..................... ****.****.****.****..***. ****.................***. ****..****.********..***. ****.....................
数据范围
对于全部数据,保证有 0≤n≤106,且 n 仅由数字 0,1,2,3 组成。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB