返回试卷目录

需要电子版时点「打印 / 保存为 PDF」,在打印对话框的「目标打印机」里选择「另存为 PDF」即可下载。登录后可下载,每天 10 次

GESP C++ 编程三级 · 2026 年 9 月卷

GESP · C++ · 共 27 题 · 满分 100 分

姓名:____________日期:____________得分:____________

  1. 1.单选题2 分

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

    • A.数字,不管采用原码、反码、补码,它的 8 位二进制形式都是。
    • B.计算机科学中,单位换算默认,而非。
    • C.原码是最直观的一种有符号数表示方法。
    • D.反码运算中,最高位进位要抛掉。
  2. 2.单选题2 分

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

    • A.数字可以分解为:(十进制)
    • B.数字可以分解为:(十进制)
    • C.数字可以分解为:(十进制)
    • D.(通常写作)
  3. 3.单选题2 分

    下面程序的运行结果是( ) #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.程序编译错误1 / 10
  4. 4.单选题2 分

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

    • A.正数的补码:与其原码、反码相同。
    • B.负数的补码:将其对应的正数的原码按位取反(得到反码),然后加。
    • C.8 位的补码,最大表示数据是,最小表示数据是。
    • D.负数的补码,从右往左扫描正数的二进制形式,遇到第一个之后,左边的所有位都取反。
  5. 5.单选题2 分

    下面程序执行的结果是( )。 #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. 6.单选题2 分

    关于位运算,下列说法错误的是( )。例子:数组[5, 7, 9, 7, 5](唯一数是9)

    • A.找唯一数:数组中唯一出现一次的数,其余出现两次,全部异或结果即为该数。
    • B.若左移导致高位溢出(如超过整型范围),结果不再符合乘法规律。
    • C.有符号整数左移溢出时结果确定。
    • D.位二进制数,一定是的倍数(最后两位是二进制的)。
  7. 7.单选题2 分

    计算3 & 7 | 15 ^ ~11(a=3, b=7, c=15, d=11):( )。

    • A.-9
    • B.-1
    • C.-7
    • D.-5
  8. 8.单选题2 分

    下面函数是一个加密解密的函数,横线处应该填入的程序段是( )。2 / 10 #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. 9.单选题2 分

    下列程序是分别判断输入的N个数是否可能是二进制、八进制、十进制、十六进制,横线处应该填入的是( )3 / 10 #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; } 'F') << endl; endl; endl; endl;

    • A.cout << (max <= '1') << " " << (max <= '7') << " " << (max <= '9') << " " << (max <=
    • B.cout << (max <= 1) << " " << (max <= 7) << " " << (max <= 9) << " " << (max <= 'F') <<
    • C.cout << (max <= 1) << " " << (max <= 7) << " " << (max <= 9) << " " << (max <= F) <<
    • D.cout << (max >= 1) << " " << (max >= 7) << " " << (max >= 9) << " " << (max >= F) <<
  10. 10.单选题2 分

    下面的程序是位掩码技术实现权限的组合管理。首先定义四个权限常量,分别对应读、写、修改、删除,每个权限占用整数的一个独立二进制位。初始化权限掩码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. 11.单选题2 分

    下面选项中提到的变量都是正整数,关于位运算,下面说法错误的是( )。

    • A.num >> 1,对于正整数,等价于对num做整数除以,向下取整
    • B.num | 0x0F,可以把num的低 4 位全部置为1,高位保持不变4 / 10
    • C.num ^ num的结果一定等于0
    • D.若num右移时低位被移出丢弃,结果一定符合除法数学规律
  12. 12.单选题2 分

    已知:a=0, b=2, c=11, d=7, e=5,表达式!a & b << c ^ d | e的结果是( )

    • A.5
    • B.13
    • C.7
    • D.28
  13. 13.单选题2 分

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

    • A.size()返回字符串的字符个数,不包含末尾的'\0';length()和size()功能完全等价
    • B.s.empty():字符串为空时返回true,字符串不为空返回false
    • C.s.substr(pos, len),当省略第二个参数len时,代表从pos位置一直截取到字符串末尾
    • D.s.erase(2)表示删除字符串中下标为 2 的这一个字符
  14. 14.单选题2 分

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

    • A.int a[] = {1, 2, 3.0};
    • B.int b['A'];
    • C.int c[ ];
    • D.float d[10.0];
  15. 15.单选题2 分

    三进制有个奇妙的应用,有 1000 个酒缸,恰好 1 缸有毒。毒酒喝下后 24 小时毒发死亡;无毒酒无影响。总共有 48 小时,可以做两轮实验,每轮可以重新安排老鼠喝酒。有三种情况,这只老鼠两轮都不喝这缸酒;这只老鼠第一轮喝这缸酒;这只老鼠第二轮喝这缸酒,要保证找出毒酒,最少需要多少只老鼠?( )

    • A.5
    • B.7
    • C.10
    • D.9
  16. 16.判断题2 分

    对于计算机编码运算,补码做加法运算时,如果最高位产生进位,需要把该进位循环加到结果的最低位。

  17. 17.判断题2 分

    求的补码,可以对正数的二进制,从右向左扫描,遇到第一个之后,右边所有位全部取反,左边保持不变。

  18. 18.判断题2 分

    一个 8 位二进制原码表示的有符号数,可表示的数值范围是到。

  19. 19.判断题2 分

    这段代码执行后,能够将数组中所有大于0的元素赋值为0。5 / 10 int a[] = {2, -5, 7, 0, -1}; int n = sizeof(a) / sizeof(a[0]); for (int num : a) { if (num > 0) { num = 0; } }

  20. 20.判断题2 分

    a是int有符号整型,若(a & 1) == 1结果为true,则a一定是正奇数。

  21. 21.判断题2 分

    char str[4] = "GESP";将在内存空间中给str[4]分配5个字节。

  22. 22.判断题2 分

    判断字符串中字符是否是'0'或者'1',可以写条件:if(str[i]==0 || str[i]==1)。

  23. 23.判断题2 分

    下面程序执行后,将输出98。 #include <iostream> using namespace std; int main() { int a = 'a', b = 'b'; if (a > 0 || b++ > 0) { } cout << b; }

  24. 24.判断题2 分

    枚举可以在保证不漏解的前提下缩小枚举范围,不是必须遍历全部。6 / 10

  25. 25.判断题2 分

    下面流程图逻辑:初始化,;当成立时,执行,再执行;循环结束输出sum。该流程图可以正确计算一维数组a[0]~a[n]全部元素的总和。

    第 25 题配图
  26. 26.编程题25 分

    试题名称:公共二进制位 时间限制:1.0 s 内存限制:512.0 MB 题目描述:小红有 n 个非负整数 a1, a2, …, an。她将每个整数转换为二进制后,想知道有多少个二进制位在所有整数中均为 1。二进制位从右向左编号为 0, 1, 2, …。若某个整数的二进制表示中没有第 k 位,则认为它的第 k 位为 0。请你求出满足条件的二进制位数量。 输入格式:第一行一个整数 n,表示整数的个数。第二行 n 个非负整数 a1, a2, …, an。 输出格式:输出一个整数,表示所有整数的二进制表示中均为 1 的二进制位数量。 输入样例1: 3 13 7 15 输出样例1: 2 样例解释1:三个整数的二进制表示分别为 (1101)2、(0111)2 和 (1111)2。其中第 0 位和第 2 位均为 1,因此答案为 2。 数据范围:2 ≤ n ≤ 20000,0 ≤ ai ≤ 10^9。

    第 26 题配图第 26 题配图

    作答说明:按题目要求完成程序或作品;需要在线运行与自动判分时,可在站内选择「在线考试」。

  27. 27.编程题25 分

    试题名称:分割字符串 时间限制:1.0 s 内存限制:512.0 MB 题目描述:小明拿到了一段字符串文本,小明希望用下面的规则分割这个字符串: 1. 小明从左到右扫描字符串,遇到第一个空格后停止,并将字符串分割为左右两个部分(舍弃用于分割的这个空格); 2. 对于上次分割后右侧的字符串,小明继续扫描,第一次遇到连续两个空格后停止,并将字符串分割为左右两个部分(舍弃用于分割的这两个空格); 3. 对于上次分割后右侧的字符串,小明继续扫描,第一次遇到连续三个空格后停止,并将字符串分割为左右两个部分(舍弃用于分割的这三个空格); 4. 以此类推,小明每分割一次,下一次分割就需要更长的连续空格;直到字符串无法再次分割。 最后输出每次分割的左侧的字符串,以及最后一次分割的右侧字符串。如果字符串完全无法进行任何一次分割,直接输出其本身。 输入格式:输入一行,一个字符串。 输出格式:输出若干行。每行为分割后的一个字符串,注意依次输出:第一次分割左侧的字符串,第二次分割左侧的字符串,…,最后一次分割左侧的字符串,最后一次分割右侧的字符串。 输入样例1: sdfd 55 55 99312 输出样例1: sdfd 55 55 99312 样例解释1:第一次分割将字符串分割为 sdfd 和 55 55 99312;第二次分割将字符串分割为 55 55 和 99312。第二次分割需要连续两个空格才可分割;55 55 和 99312 之间有三个空格,第二次分割只消耗两个,右侧会留下一个空格,因为只留下了一个空格,所以不再满足第三次分割要求。 输入样例2: AbCd 999 输出样例2: AbCd 999 样例解释2:第一次分割将字符串分割为 AbCd 和 999;第二次分割将字符串分割为空字符串和 999。由于 AbCd 和 999 之间有三个空格,第一次分割消耗掉一个,因此还能进行第二次分割,这个时候会分割出空字符串,因此输出中会输出一个空行(不能省略)。 数据范围:字符串长度不超过 1000,字符串中只包含大写字母、小写字母、数字、或空格,且输入字符串不会以空格结尾。特别强调:输入仅一行,但可能包含若干空格。

    第 27 题配图第 27 题配图第 27 题配图第 27 题配图

    作答说明:按题目要求完成程序或作品;需要在线运行与自动判分时,可在站内选择「在线考试」。