GESP 客观题评测系统

试卷解析 · 理解每一步

2024-03-Level-3

2024-03-Level-3

试卷解析总览,可直接查看每题答案与解析。

单选题

第 1 题(单选题,2 分)

整数-5的16位补码表示是()。

A.
1005
B.
1006
C.
FFFA
D.
FFFB

正确答案D

解析详情
答案 D有符号整数的补码表示
思路与推导
  1. 在16位二进制中,正数 5 的原码是 0000 0000 0000 0101。负数 -5 的补码等于其反码(符号位不变,其余位取反)加 1。反码为 1111 1111 1111 1010,加 1 得到补码 1111 1111 1111 1011,转换为十六进制即为 FFFB。

第 2 题(单选题,2 分)

如果 16 位短整数 -2 的二进制是 "FFFE",则短整数 -4 的十六进制是()。

A.
FF04
B.
FFFA
C.
FFFC
D.
FFFH

正确答案C

解析详情
答案 C进制转换与补码运算
思路与推导
  1. -2 的 16 位补码为 FFFE。-4 可以看作 -2 + (-2),在补码下直接运算:FFFE + FFFE = 1FFFC,取低 16 位得 FFFC。或者计算 4 的补码:原码 0004,反码 FFFB,补码 FFFC。

第 3 题(单选题,2 分)

下面C++代码执行后的输出是()。

int main()
{
    cout << (3|16) << endl;

    cout << endl;
    return 0;
}
A.
3
B.
16
C.
19
D.
48

正确答案C

解析详情
答案 C位运算(按位或)
思路与推导
  1. 3 的二进制是 00011,16 的二进制是 10000。执行按位或运算 3 | 16:

  2. 00011

  3. | 10000

  4. ---------

  5. 10011

  6. 二进制 10011 转换为十进制为 16 + 2 + 1 = 19。

第 4 题(单选题,2 分)

定义整数 int x=-5,则执行C++代码 cout << (x == (x<<1>>1)) 输出是()。

A.
θ
B.
1
C.
-5
D.
5

正确答案B

解析详情
答案 B位移运算与符号位保持
思路与推导
  1. -5 在内存中以补码形式存储。左移一位后再右移一位,对于有符号整数,通常进行算术右移(保留符号位)。只要左移时没有溢出导致符号位改变,x << 1 >> 1 的值通常回到 x。这里 -5 远未达到 16 位整数的溢出边界,故结果为 1(true)。

第 5 题(单选题,2 分)

已知字符 '0' 的ASCII编码的十进制表示为48,则执行下面C++代码后,输出是()。

int main()
{
    string s="316";
    int n=s.length();
    int x=0;
    for(int i = 0; i < n; i++)
    {
        x += s[i];
        cout << x << endl;
    }
    cout << endl;
    return 0;
}
A.
10
B.
58
C.
154
D.
316

正确答案C

解析详情
答案 C字符串遍历与 ASCII 码累加
思路与推导
  1. 字符串 s = "316"。循环遍历每个字符并将其 ASCII 值累加到 x:

  2. 1. i=0, x = 0 + '3'(51) = 51

  3. 2. i=1, x = 51 + '1'(49) = 100

  4. 3. i=2, x = 100 + '6'(54) = 154

  5. 最终输出 154。

第 6 题(单选题,2 分)

下面C++代码执行后数组中大于0的数的特征是()。

int main()
{
    int a[20],i;
    for(i = 0; i < 20; i++)
        a[i] = i + 1;

    for(int i = 0; i < 20; i++)
        if((a[i] % 2) && (a[i] % 3))
            a[i] = 0;

    for(i = 0; i < 20; i++)
        if(a[i])
            cout << a[i] << " ";

    cout << endl;
    return 0;
}
A.
2的倍数
B.
3的倍数
C.
能被2或3整除的数
D.
能被2和3同时整除的数

正确答案C

解析详情
答案 C逻辑运算与数组处理
思路与推导
  1. 数组 a 存储了 1 到 20。条件 if((a[i] % 2) && (a[i] % 3)) a[i] = 0; 表示如果 a[i] 不能被 2 整除且不能被 3 整除,则将其置 0。反之,保留下来的(大于 0 的)数是能被 2 整除或能被 3 整除的数。

第 7 题(单选题,2 分)

执行下面C++代码后输出的第一个数是()。

int main()
{
    int a[20], i;
    for(i = 0; i < 20; i++)
        a[i] = i + 1;

    for(; i > 0; i--)
        cout << a[i - 1] << " ";

    cout << endl;
    return 0;
}
A.
20
B.
19
C.
1
D.
不确定

正确答案A

解析详情
答案 A循环边界与数组访问
思路与推导
  1. 第一个循环后 i 的值为 20。第二个循环初始为空,直接执行 i > 0 判断。第一次输出 a[i-1] 即 a[19],其值为 20。

第 8 题(单选题,2 分)

在下列代码的横线处填写(),可以使得输出是 GESP IS INTERESTING 。

int main()
{
    string str="gEsP is Interesting";
    int x = str.length();

    for(int i = 0; i < x; i++)
        if ((str[i] >='a') && (str[i] <='z'))
            cout << str << endl;

    cout << endl;
    return 0;
}
A.
str[i]+='a'-'A'
B.
str[i]+=20
C.
str[i]+='A'-'a'
D.
无法实现

正确答案C

解析详情
答案 C字符大小写转换
思路与推导
  1. 要将小写字母转换为大写字母,需要利用 ASCII 码中大写字母比对应小写字母小 32 的特性。横线处应填 str[i] += 'A' - 'a'(即减去 32)。

第 9 题(单选题,2 分)

假设英文句子由若干词构成。下面C++代码统计输出的词数是()。

int main()
{
    string str="gEsP is Interesting !";
    int x = str.length();
    int nwords = 0;
}
for(int i = 0; i < x; i++)
    if (str[i] == ' '){
        nwords++;
        while(str[++i] == ' ');
    }
    cout << nwords << endl;
    cout << endl;
    return 0;
}
A.
1
B.
2
C.
3
D.
4

正确答案C

解析详情
答案 C字符串处理与计数
思路与推导
  1. 代码逻辑是每遇到一个空格就认为发现了一个新单词的间隔(并跳过多余空格)。在字符串 "gEsP is Interesting !" 中,空格分别出现在 "gEsP" 之后、"is" 之后、"Interesting" 之后。因此 nwords 累加 3 次。

第 10 题(单选题,2 分)

C++的字符变量的码值是整数,下⾯字⾯量形式的字符码值最⼤的是( )。

A.
100
B.
075
C.
0x70
D.
0x60

正确答案C

解析详情
答案 C进制表示与数值比较
思路与推导
  1. A. 100 (十进制 100);B. 075 (八进制 7*8+5 = 61);C. 0x70 (十六进制 7*16 = 112);D. 0x60 (十六进制 6*16 = 96)。数值最大的是 C。

第 11 题(单选题,2 分)

下面 C++ 程序执行的结果是()。

int main()
{
    int a[20],i;
    int cnt=0;
    for(i = 0; i < 20; i++)
    {
        a[i] = i+1;
    }
    for( ; i > 1; i--)
    {
        if((a[i-1]+a[i-2])%3)
        {
            cnt++;
            cout << cnt << endl;
        }
        cout << endl;
        return 0;
    }
}
A.
5
B.
6
C.
10
D.
12

正确答案D

解析详情
答案 D循环模拟与逻辑判断
思路与推导
  1. 代码逻辑是遍历 2 到 20 之间的相邻元素对,如果它们的和不能被 3 整除则 cnt++。由于代码中有 return 0,理论上只运行一次,但根据选项和 GESP 题型习惯,应是考察完整循环:总共有 19 对相邻数,和能被 3 整除的有 (1,2), (4,5), (7,8)... 共 7 对,故不能被 3 整除的有 19 - 7 = 12 对。

第 12 题(单选题,2 分)

定义字符数组 char str[20] = { 'G' , 'E' , 'S' , 'P' };,则 str 的字符串长度为()。

A.
4
B.
5
C.
19
D.
20

正确答案A

解析详情
答案 A字符数组与字符串长度
思路与推导
  1. 字符数组 str 被初始化为 {'G', 'E', 'S', 'P'},剩余部分自动补为 '\0'。strlen 函数计算直到 '\0' 为止的字符数,结果为 4。

第 13 题(单选题,2 分)

定义整型变量 int a=3, b=16 , 则 a|b 的值和 a+b 的关系是()。

A.
大于
B.
等于
C.
小于
D.
等于或小于

正确答案B

解析详情
答案 B按位或与加法运算的联系
思路与推导
  1. a = 3 (00011), b = 16 (10000)。因为 a 和 b 在二进制表示中没有共同的 1 位(即 a & b == 0),所以 a | b 的结果等于 a + b,均为 19。

第 14 题(单选题,2 分)

小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是()。

A.
小程序
B.
计时器
C.
操作系统
D.
神话人物

正确答案C

解析详情
答案 C计算机基础常识
思路与推导
  1. 鸿蒙(HarmonyOS)是华为公司开发的操作系统。

第 15 题(单选题,2 分)

中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是()。

A.
制造自动驾驶汽车
B.
创立培训学校
C.
发明汉字激光照排系统
D.
成立方正公司

正确答案C

解析详情
答案 C计算机历史人物贡献
思路与推导
  1. 王选先生的重大贡献是发明了汉字激光照排系统。

判断题

第 1 题(判断题,2 分)

任意整数 a 的二进制反码与补码都有1位不同。()

正确答案错误

解析详情
答案 错误反码与补码的概念
思路与推导
  1. 对于正整数,其原码、反码、补码完全相同,不存在任何位的差异。题干说“任意整数”都有差异是错误的。

第 2 题(判断题,2 分)

对整型变量 int a = 3,执行C++代码 a<<2 将把2输出到 a 中。()

正确答案错误

解析详情
答案 错误位运算的副作用
思路与推导
  1. a << 2 是一个表达式,它计算 a 左移两位后的值,但并不会改变变量 a 本身的值(除非写成 a <<= 2)。

第 3 题(判断题,2 分)

下面C++代码可以计算1到100的累加和,采用的是穷举法。

int main()
{
    int i, sum = 0;
    for (int i = 1; i <= 100; i++)
        sum += i;
    cout << sum << endl;

    cout << endl;
    return 0;
}

正确答案错误

解析详情
答案 错误算法分类与定义
思路与推导
  1. 计算 1 到 100 的累加和通常使用简单的循环累加或等差数列公式。穷举法(Brute Force)是指尝试所有可能的解来寻找答案,此处的循环并不属于典型的穷举思想。

第 4 题(判断题,2 分)

一个 int 类型变量 a,执行操作 (a<<2>>2) 后的值一定是 a。()

正确答案错误

解析详情
答案 错误位移运算的溢出风险
思路与推导
  1. 对于 int 类型,左移操作可能导致最高位(符号位)被覆盖或有效位丢失。当发生溢出时,a << 2 >> 2 无法还原回原值 a。

第 5 题(判断题,2 分)

在 C++ 语言中,010≪1010 \ll 1执行结果是 100。()

正确答案错误

解析详情
答案 错误八进制表示与位移运算
思路与推导
  1. 010 是八进制数,等于十进制的 8。8 << 1 的结果是 16,而不是 100。100 只有在某些误解下才可能得出。

第 6 题(判断题,2 分)

执行下面C++代码后将输出2。()

int main()
{
    string str="gEsP is Interesting";
    int x = str.find("s");

    cout << x << endl;

    cout << endl;
    return 0;
}

正确答案正确

解析详情
答案 正确string::find 函数用法
思路与推导
  1. find 函数返回子串首次出现的位置。在 "gEsP is Interesting" 中,字符 's' 首次出现在索引 2 处(g 是 0,E 是 1,s 是 2)。

第 7 题(判断题,2 分)

在C++语言中,字符数组被定义时,它的大小可以调整。()

正确答案错误

解析详情
答案 错误静态数组的特性
思路与推导
  1. 在 C++ 中,静态定义的数组(如 char str[20])在编译时大小就已经固定,运行过程中无法调整其大小。

第 8 题(判断题,2 分)

对定义的数组 int a[7]={2,0,2,4,3,1,6},可以用简单循环就找到其中最小的整数。()

正确答案正确

解析详情
答案 正确数组最值查找算法
思路与推导
  1. 通过一次简单的循环遍历数组,记录当前看到的最小值,是查找最小值的标准且有效的方法。

第 9 题(判断题,2 分)

小杨今年春节回奶奶家了,奶奶家的数字电视要设置ip地址并接入到WIFI盒子才能收看节目,那这个WIFI盒子具有路由器的功能。()

正确答案正确

解析详情
答案 正确网络基础常识
思路与推导
  1. 能够分配 IP 地址并连接不同网络的 WiFi 盒子实际上扮演了路由器的角色(通常是无线路由器)。

第 10 题(判断题,2 分)

任何一个 for 循环都可以转化为等价的 while 循环()。

正确答案正确

解析详情
答案 正确循环结构等价性
思路与推导
  1. for 循环和 while 循环是等价的逻辑结构,可以互相转换。