GESP 客观题评测系统

2024-03-Level-3

2024-03-Level-3

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

单选题(每题 2 分)

1 题(单选题

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

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

正确答案D

解析详情

【答案】D 【考点】有符号整数的补码表示 【解析】在16位二进制中,正数 5 的原码是 0000 0000 0000 0101。负数 -5 的补码等于其反码(符号位不变,其余位取反)加 1。反码为 1111 1111 1111 1010,加 1 得到补码 1111 1111 1111 1011,转换为十六进制即为 FFFB。 【易错点】混淆反码与补码的计算规则。

2 题(单选题

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

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

正确答案C

解析详情

【答案】C 【考点】进制转换与补码运算 【解析】-2 的 16 位补码为 FFFE。-4 可以看作 -2 + (-2),在补码下直接运算:FFFE + FFFE = 1FFFC,取低 16 位得 FFFC。或者计算 4 的补码:原码 0004,反码 FFFB,补码 FFFC。 【易错点】对负数的十六进制补码表示不熟悉。

3 题(单选题

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

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

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

正确答案C

解析详情

【答案】C 【考点】位运算(按位或) 【解析】3 的二进制是 00011,16 的二进制是 10000。执行按位或运算 3 | 16: 00011 | 10000 --------- 10011 二进制 10011 转换为十进制为 16 + 2 + 1 = 19。 【易错点】将按位或(|)误认为逻辑或(||)或相加运算。

4 题(单选题

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

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

正确答案B

解析详情

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

5 题(单选题

已知字符 '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 码累加 【解析】字符串 s = "316"。循环遍历每个字符并将其 ASCII 值累加到 x: 1. i=0, x = 0 + '3'(51) = 51 2. i=1, x = 51 + '1'(49) = 100 3. i=2, x = 100 + '6'(54) = 154 最终输出 154。 【易错点】误以为 s[i] 取到的是数值 3, 1, 6 而非它们的 ASCII 码。

6 题(单选题

下面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 【考点】逻辑运算与数组处理 【解析】数组 a 存储了 1 到 20。条件 if((a[i] % 2) && (a[i] % 3)) a[i] = 0; 表示如果 a[i] 不能被 2 整除且不能被 3 整除,则将其置 0。反之,保留下来的(大于 0 的)数是能被 2 整除或能被 3 整除的数。 【易错点】将逻辑与(&&)在 if 条件中的否定含义理解反。

7 题(单选题

执行下面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 【考点】循环边界与数组访问 【解析】第一个循环后 i 的值为 20。第二个循环初始为空,直接执行 i > 0 判断。第一次输出 a[i-1] 即 a[19],其值为 20。 【易错点】忽略了第一个 for 循环结束后 i 的最终状态。

8 题(单选题

在下列代码的横线处填写(),可以使得输出是 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 【考点】字符大小写转换 【解析】要将小写字母转换为大写字母,需要利用 ASCII 码中大写字母比对应小写字母小 32 的特性。横线处应填 str[i] += 'A' - 'a'(即减去 32)。 【易错点】记反了大写字母和小写字母 ASCII 码的大小关系。

9 题(单选题

假设英文句子由若干词构成。下面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 【考点】字符串处理与计数 【解析】代码逻辑是每遇到一个空格就认为发现了一个新单词的间隔(并跳过多余空格)。在字符串 "gEsP is Interesting !" 中,空格分别出现在 "gEsP" 之后、"is" 之后、"Interesting" 之后。因此 nwords 累加 3 次。 【易错点】未注意代码中对连续空格的处理以及循环内的 i 自增。

10 题(单选题

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

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

正确答案C

解析详情

【答案】C 【考点】进制表示与数值比较 【解析】A. 100 (十进制 100);B. 075 (八进制 7*8+5 = 61);C. 0x70 (十六进制 7*16 = 112);D. 0x60 (十六进制 6*16 = 96)。数值最大的是 C。 【易错点】不熟悉八进制(0开头)和十六进制(0x开头)的转换。

11 题(单选题

下面 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 【考点】循环模拟与逻辑判断 【解析】代码逻辑是遍历 2 到 20 之间的相邻元素对,如果它们的和不能被 3 整除则 cnt++。由于代码中有 return 0,理论上只运行一次,但根据选项和 GESP 题型习惯,应是考察完整循环:总共有 19 对相邻数,和能被 3 整除的有 (1,2), (4,5), (7,8)... 共 7 对,故不能被 3 整除的有 19 - 7 = 12 对。 【易错点】被代码中可能存在的 return 0 位置干扰。

12 题(单选题

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

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

正确答案A

解析详情

【答案】A 【考点】字符数组与字符串长度 【解析】字符数组 str 被初始化为 {'G', 'E', 'S', 'P'},剩余部分自动补为 '\0'。strlen 函数计算直到 '\0' 为止的字符数,结果为 4。 【易错点】混淆数组大小(20)与字符串长度(4)。

13 题(单选题

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

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

正确答案B

解析详情

【答案】B 【考点】按位或与加法运算的联系 【解析】a = 3 (00011), b = 16 (10000)。因为 a 和 b 在二进制表示中没有共同的 1 位(即 a & b == 0),所以 a | b 的结果等于 a + b,均为 19。 【易错点】误认为按位或运算结果总是大于加法。

14 题(单选题

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

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

正确答案C

解析详情

【答案】C 【考点】计算机基础常识 【解析】鸿蒙(HarmonyOS)是华为公司开发的操作系统。 【易错点】对操作系统概念理解模糊。

15 题(单选题

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

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

正确答案C

解析详情

【答案】C 【考点】计算机历史人物贡献 【解析】王选先生的重大贡献是发明了汉字激光照排系统。 【易错点】常识储备不足。

判断题(每题 2 分)

1 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】反码与补码的概念 【解析】对于正整数,其原码、反码、补码完全相同,不存在任何位的差异。题干说“任意整数”都有差异是错误的。 【易错点】忽略了正数这一特殊且普遍的情况。

2 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】位运算的副作用 【解析】a << 2 是一个表达式,它计算 a 左移两位后的值,但并不会改变变量 a 本身的值(除非写成 a <<= 2)。 【易错点】混淆表达式求值与变量赋值。

3 题(判断题

下面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 到 100 的累加和通常使用简单的循环累加或等差数列公式。穷举法(Brute Force)是指尝试所有可能的解来寻找答案,此处的循环并不属于典型的穷举思想。 【易错点】对穷举法、递推法等算法名称定义不清。

4 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】位移运算的溢出风险 【解析】对于 int 类型,左移操作可能导致最高位(符号位)被覆盖或有效位丢失。当发生溢出时,a << 2 >> 2 无法还原回原值 a。 【易错点】认为位移操作总是可逆的。

5 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】八进制表示与位移运算 【解析】010 是八进制数,等于十进制的 8。8 << 1 的结果是 16,而不是 100。100 只有在某些误解下才可能得出。 【易错点】将八进制数误认为十进制数。

6 题(判断题

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

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

    cout << x << endl;

    cout << endl;
    return 0;
}

正确答案正确

解析详情

【答案】正确 【考点】string::find 函数用法 【解析】find 函数返回子串首次出现的位置。在 "gEsP is Interesting" 中,字符 's' 首次出现在索引 2 处(g 是 0,E 是 1,s 是 2)。 【易错点】字符索引从 0 开始计算,且大小写敏感。

7 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】静态数组的特性 【解析】在 C++ 中,静态定义的数组(如 char str[20])在编译时大小就已经固定,运行过程中无法调整其大小。 【易错点】混淆静态数组与动态数组(如 vector)。

8 题(判断题

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

正确答案正确

解析详情

【答案】正确 【考点】数组最值查找算法 【解析】通过一次简单的循环遍历数组,记录当前看到的最小值,是查找最小值的标准且有效的方法。 【易错点】认为查找最值需要更复杂的算法。

9 题(判断题

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

正确答案正确

解析详情

【答案】正确 【考点】网络基础常识 【解析】能够分配 IP 地址并连接不同网络的 WiFi 盒子实际上扮演了路由器的角色(通常是无线路由器)。 【易错点】对网络设备功能不熟悉。

10 题(判断题

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

正确答案正确

解析详情

【答案】正确 【考点】循环结构等价性 【解析】for 循环和 while 循环是等价的逻辑结构,可以互相转换。 【易错点】对循环语法的深层逻辑理解不够。