CCF GESP 2026年9月认证 C++ 3级

所有 GESP 真题,手机上也能刷 · 自动判分 · 错题自动进错题本 扫码去刷
一 单选题
共 15 道 每题 2 分 共计 30 分
第 1 题

关于计算机的数据编码,下面说法不正确的是( )。

A

数字 $5$,不管采用原码、反码、补码,它的 8 位二进制形式都是 $(0000\ 0101)_2$。

B

计算机科学中,单位换算默认 $1KB=1024B$,而非 $1000B$。

C

原码是最直观的一种有符号数表示方法。

D

反码运算中,最高位进位要抛掉。

第 2 题

关于进制转换,下面说法不正确的是( )

A

数字 $1101B$ 可以分解为:

$1×2^3+1×2^2+0×2^1+1×2^0=8+4+0+1=13$(十进制)

B

数字 $42Q$ 可以分解为:

$4×8^1+2×8^0=32+2=34$(十进制)

C

数字 $2BEH$ 可以分解为:

$2×16^2+11(B)×16^1+14(E)×16^0=512+176+14=702$(十进制)

D

$345Q=0E3H$(通常写作 $E3H$)

第 3 题
下面程序的运行结果是( )
#include <iostream>
using namespace std;
int main() {
    int x = 1;
    for (int i = 0; i = 0; i <= 5) {
        x++;
    }
    cout << x << endl;
    return 0;
}
A
1
B
10
C
15
D
程序编译错误
第 4 题
关于计算机编码中补码,下面说法错误的是( )。
A
正数的补码:与其原码、反码相同。
B
负数的补码:将其对应的正数的原码按位取反(得到反码),然后加 $1$。
C
8 位的补码,最大表示数据是 $128$,最小表示数据是 $-128$。
D
负数的补码,从右往左扫描正数的二进制形式,遇到第一个 $1$ 之后,左边的所有位都取反。
第 5 题
下面程序执行的结果是( )。
#include <iostream>
using namespace std;
int main() {
    int x = 2026;
    int count = 0;
    while (x > 0) {
        count++;
        x = x & (x - 1);
    }
    cout << count << endl;
}
A
2026
B
8
C
16
D
32
第 6 题
关于位运算,下列说法错误的是( )。
A
找唯一数:数组中唯一出现一次的数,其余出现两次,全部异或结果即为该数。例子:数组 [5, 7, 9, 7, 5](唯一数是 9)
B
若左移导致高位溢出(如超过整型范围),结果不再符合乘法规律。
C
有符号整数左移溢出时结果确定。
D
$n+2$ 位二进制数 $A₁A₂⋯ Aₙ00$,一定是 $4$ 的倍数(最后两位 $00$ 是二进制的 $00$)。
第 7 题
计算 3 & 7 | 15 ^ ~11( a=3, b=7, c=15, d=11):( )。
A
-9
B
-1
C
-7
D
-5
第 8 题

下面函数是一个加密解密的函数,横线处应该填入的程序段是( )。

#include <iostream>
#include <string>
using namespace std;
int  main() {
    int key;
    cin >> key;
    string msg = "Hello GESP";
    cout << msg << endl;
    for(int i = 0; i < msg.size(); i++) {
        msg[i] = msg[i] ^ key;
    }
    cout << msg << endl;
    _________________________________
    cout << msg << endl;
    return 0;
}
A
for (int i = 0;  i < msg.size(); i++) {
     msg[i] = msg[i] | key;
}
B
for (int i = 0; i < msg.size(); i++) {
     msg[i] = msg[i] >>  key;
}
C
for (int i = 0; i < msg.size(); i++) {
     msg[i] = msg[i]  ^  key;
}
D
for (int i  = 0; i < msg.size(); i++) {
     msg[i] = msg[i] &  key;
}
第 9 题

下列程序是分别判断输入的 N 个数是否可能是二进制、八进制、十进制、十六进制,横线处应该填入的是( )

#include <iostream>
using namespace std;
int main() {
    int n = 0;
    cin >> n;
    for (int i = 0; i < n; i++) {
        char str[11];
        cin >> str;
        char max = '0';
        for (int i = 0; str[i] != '\0'; i++)
            if (str[i] > max)
                max = str[i];
        _____________________________
    }
    return 0;
}
A

cout << (max <= '1') << " " << (max <= '7') << " " << (max <= '9') << " " << (max <='F') << endl;

B

cout << (max <= 1) << " " << (max <= 7) << " " << (max <= 9) << " " << (max <= 'F') <<endl;

C

cout << (max <= 1) << " " << (max <= 7) << " " << (max <= 9) << " " << (max <= F) <<endl;

D

cout << (max >= 1) << " " << (max >= 7) << " " << (max >= 9) << " " << (max >= F) <<endl;

第 10 题
下面的程序是位掩码技术实现权限的组合管理。首先定义四个权限常量,分别对应读、写、修改、删除,每个权限占用整数的一个独立二进制位。初始化权限掩码 mask 为 0 ,代表没有任何权限。如果想实现如下的操作:添加读权限;添加写权限;清除读权限,其他位不变;添加删除权限。则横线处应该填入的是( )。
#include <iostream>
using namespace  std;

int main() {
    const  int READ  = 1 << 0;
    const  int WRITE  = 1 <<  1;
    const  int MODIFY  = 1 <<  2;
    const  int DELETE_  = 1 <<  3;
    int  mask = 0;
    __________________________
    return  0;
}
A
mask =  mask | READ;
mask =  mask | WRITE;
mask =  mask & (~READ);
mask =  mask | DELETE_;
B
mask =  mask & READ;
mask =  mask & WRITE;
mask =  mask | (~READ);
mask =  mask & DELETE_;
C
mask =  mask | READ;
mask =  mask & WRITE;
mask =  mask & (~READ);
mask =  mask | DELETE_;
D
mask =  mask | READ;
mask =  mask | WRITE;
mask =  mask | (~READ);
mask =  mask | DELETE_;
第 11 题
下面选项中提到的变量都是正整数,关于位运算,下面说法错误的是( )。
A
num >> 1,对于正整数,等价于对 num 做整数除以 $2$,向下取整。
B
num | 0x0F ,可以把 num 的低 4 位全部置为 1 ,高位保持不变
C
num ^ num 的结果一定等于 0
D
若 num 右移时低位被移出丢弃,结果一定符合除法数学规律
第 12 题
已知: a=0, b=2, c=11, d=7, e=5,表达式 !a & b << c ^ d | e 的结果是( )
A
5
B
13
C
7
D
28
第 13 题

关于 string 的成员函数,下面说法错误的是( )

A

size() 返回字符串的字符个数,不包含末尾的 '\0';length()和size() 功能完全等价

B

s.empty():字符串为空时返回 true,字符串不为空返回 false

C

s.substr(pos, len),当省略第二个参数 len 时,代表从 pos 位置一直截取到字符串末尾

D

s.erase(2) 表示删除字符串中下标为 2 的这一个字符

第 14 题

以下数组定义,符合 C++ 语法的是( )

A

int a[] = {1, 2, 3.0};

B

int b['A'];

C

int c[ ];

D

float d[10.0];

第 15 题
三进制有个奇妙的应用,有 1000 个酒缸,恰好 1 缸有毒。毒酒喝下后 24 小时毒发死亡;无毒酒无影响。总共有 48 小时,可以做两轮实验,每轮可以重新安排老鼠喝酒。有三种情况,这只老鼠两轮都不喝这缸酒;这只老鼠第一轮喝这缸酒;这只老鼠第二轮喝这缸酒,要保证找出毒酒,最少需要多少只老鼠?( )
A
$5$
B
$7$
C
$10$
D
$9$
单选题部分已到底了。

小程序开心码未来

微信扫码,随时随地练 GESP 真题

  • 手机刷题 · 自动判分,错题自动归档到错题本
  • 绑定网站账号后,查看答案解析等权限自动同步
开心码未来小程序二维码(微信扫一扫) 微信扫一扫