GESP 客观题评测系统

2024-09-Level-2

2024-09-Level-2

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

单选题(每题 2 分)

1 题(单选题

据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成,设计存贮周期为2μs2\mu s(微秒)。那么该磁心存储元件相当于现代计算机的()。

A.
内存
B.
磁盘
C.
CPU
D.
显示器

正确答案A

解析详情

【答案】A 【考点】计算机基础与存储器 【解析】磁心存储元件是早期计算机中用于存储数据 and 指令的主要部件,其作用相当于现代计算机中的内存(RAM)。 【易错点】不要误认为是外存(如磁盘)。

2 题(单选题

IPv4 版本的因特网总共有()个 A 类地址网络。

A.
65000
B.
200万
C.
126
D.
128

正确答案C

解析详情

【答案】C 【考点】网络基础(IP 地址分类) 【解析】在 IPv4 地址分类中,A 类地址的第一字节范围是 1 到 126。0 和 127 有特殊用途。因此 A 类地址的网络数总共有 126 个。 【易错点】注意排除 0 和 127。

3 题(单选题

在C++中,下列不可做变量的是()。

A.
ccf-gesp
B.
ccf_gesp
C.
ccfGesp
D.
_ccfGesp

正确答案A

解析详情

【答案】A 【考点】标识符命名规则 【解析】C++ 变量名只能由字母、数字和下划线组成,不能包含减号 `-`(它是减法运算符)。因此 `ccf-gesp` 不合法。 【易错点】区分下划线 `_` 和减号 `-`。

4 题(单选题

在C++中,与 for (int i = 1; i < 10; i++) 效果相同的是()。

A.
for (int i = 0; i < 10; i++)
B.
for (int i = 0; i < 11; i++)
C.
for (int i = 1; i < 10; ++i)
D.
for (int i = 0; i < 11; ++i)

正确答案C

解析详情

【答案】C 【考点】循环等价性 【解析】题目要求找出与原代码 `for (int i = 1; i < 10; i++)` 效果相同的代码。选项 C 与原代码完全一致,效果相同。 【易错点】仔细观察循环的起始值和终止条件。

5 题(单选题

在C++中,cout << (5 / 2 + 5 % 3) 的输出是()。

A.
1
B.
2
C.
4
D.
5

正确答案C

解析详情

【答案】C 【考点】算术运算 【解析】`5 / 2` 是整数除法,结果为 2。`5 % 3` 是取余,结果为 2。`2 + 2 = 4`。 【易错点】注意整数除法不含小数部分。

6 题(单选题

假定变量a和b可能是整型、字符型或浮点型,则下面C++代码执行时先后输入-2和3.14后,其输出不可能是()。[已知字符 '+'、'-'、'=' 的ASCII码值分别是43、45和61]

A.
1
B.
1.14
C.
47
D.
将触发异常

正确答案D

解析详情

【答案】D 【考点】变量类型与输入处理 【解析】C++ 中输入类型不匹配时,`cin` 会设置错误状态,但通常不会“触发异常”(除非专门配置)。输入 `-2` 和 `3.14` 对整型或浮点型变量都是合法的读取操作(会发生截断或正常存储)。 【易错点】区分运行时错误和异常处理机制。

7 题(单选题

在 C++ 代码中假设 N 为正整数,则下面代码能获得个位数的是()。

A.
N % 10
B.
N / 10
C.
N && 10
D.
以上选项均不正确

正确答案A

解析详情

【答案】A 【考点】算术运算(取个位数) 【解析】获得一个正整数个位数的标准做法是对 10 取余,即 `N % 10`。 【易错点】不要混淆取余 `%` 和除法 `/`。

8 题(单选题

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

int i;
for (i = 0; i < 10; i++) {
    if (i % 2)
        break;
    cout << "0#";
}
if (i == 10) cout << "1#";
A.
0#
B.
1#
C.
0#0#1
D.
没有输出

正确答案A

解析详情

【答案】A 【考点】循环控制与 `break` 【解析】`i` 从 0 开始。第一次循环 `i=0`,`i%2` 为 0,不执行 `break`,输出 `0#`。第二次循环 `i=1`,`i%2` 为 1,执行 `break` 跳出。此时 `i=1`,不满足 `i==10` 条件。最终输出仅为 `0#`。 【易错点】准确分析 `break` 的触发时机。

9 题(单选题

执行下面C++代码并输入1和0,有关说法正确的是()。

int a,b;
cin >> a >> b;
if(a&&b)
    cout << ("1");
else if(!(a||b))
    cout << ("2");
else if(a || b)
    cout << ("3");
else
    cout << ("4");
A.
1
B.
2
C.
3
D.
4

正确答案C

解析详情

【答案】C 【考点】逻辑运算符求值 【解析】输入 `a=1, b=0`。`a && b` 为假。`!(a || b)` 为 `!1` 即假。`a || b` 为真。因此执行第三个分支,输出 `3`。 【易错点】掌握逻辑运算符的优先级和真值表。

10 题(单选题

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

int loopCount = 0;
for (int i = 1; i < 5; i += 2)
    loopCount += 1;
cout << (loopCount);
A.
1
B.
2
C.
3
D.
5

正确答案B

解析详情

【答案】B 【考点】循环计数 【解析】循环 `i` 取值 1, 3。当 `i` 变为 5 时不满足 `i < 5`。共执行 2 次,`loopCount` 为 2。 【易错点】注意步长为 2。

11 题(单选题

下图是 C++ 程序执行后的输出。为实现其功能,横线处应填入代码是()。

7
1
2 3
3 4 5
4 5 6 7
5 6 7 8 9
6 7 8 9 10 11
7 8 9 10 11 12 13
int lineNum;
cin >> lineNum;
for (int i = 1; i < lineNum + 1; i++) {
    for (int _____)
        cout << j << " ";
    cout << endl;
}
A.
j = i; j < i; j++
B.
j = 1; j < i; j++
C.
j = i; j < i*2; j++
D.
j = i+1; j < i+i; j++

正确答案C

解析详情

【答案】C 【考点】嵌套循环规律推导 【解析】观察输出规律:每行起始数字为行号 `i`,每行输出 `i` 个连续整数。结束数字为 `2*i-1`。对应的内层循环条件是 `j = i; j < i * 2; j++`。 【易错点】根据输出结果逆向推导循环边界。

12 题(单选题

下面C++代码执行后输出逆序数,如输入 123 则输出 321 。如输入 120 则输出 21 。横线处先后应填入的代码是( )。

int N;
cin >> N;
int rst = 0;
while (N){
    ___;
};
cout << (rst);
A.
rst = rst * 10 + N % 10 N = N / 10
B.
rst += N % 10 N = N / 10
C.
rst = rst * 10 + N / 10 N = N % 10
D.
rst += N / 10 N = N % 10

正确答案A

解析详情

【答案】A 【考点】逆序数提取算法 【解析】求逆序数的标准逻辑是:通过 `%10` 获取当前最低位,通过 `*10` 进位累加,再通过 `/10` 去掉已处理的位。代码应为 `rst = rst * 10 + N % 10; N = N / 10;`。 【易错点】注意累加时的权重处理顺序。

13 题(单选题

下面的C++代码用于输入学生成绩,并根据人数计算出平均成绩,有关说法错误的是()。

float Sum = 0; // 保存总成绩
int cnt = 0; // 保存学生人数
while (1){
    int score;
    cin >> score;
    if (score < 0)
        break;
    cnt += 1;
    Sum += score;
}
cout << "总学生数:" << cnt << "平均分:" << Sum/cnt;
A.
代码 while (1) 写法错误
B.
如果输入负数,将结束输入,并正确输出
C.
如果输入的学生成绩含有小数,程序将无法正常执行
D.
变量 int score 初始值不确定,但不影响程序执行

正确答案A

解析详情

【答案】A 【考点】循环结构分析 【解析】`while (1)` 在 C++ 中是创建无限循环的常用合法写法,通常配合内部的 `break` 使用。因此“写法错误”的说法本身是错误的。符合选错误项的要求。 【易错点】理解无限循环在特定逻辑下的必要性。

14 题(单选题

以下C++代码判断输入的正整数是否为质数,如果该数字是质数,则输出 YES ,否则输出 NO 。质数是指仅能被1和它本身整除的正整数。请在横线上填写代码。()

int num, i;
cin >> num;
for(i = 2; i < num; i++)
    if (____){
        cout << ("NO");
        break;
    }
    if(i == num)
        cout << ("YES");
A.
num % i
B.
num % i == 0
C.
num / i
D.
num / i == 0

正确答案B

解析详情

【答案】B 【考点】质数判断逻辑 【解析】判断质数需要检查 2 到 `num-1` 之间是否有因子。如果 `num % i == 0` 成立,说明找到了因子,该数不是质数。 【易错点】理解取模运算在因子判断中的应用。

15 题(单选题

一个数如果能被某个数(比如7)整除,或者含有该数,则说该数是某个数的相关数。下面C++代码用于判定输入的数与7是否有关。下列说法错误的是()。

int N, M;
bool Flag = false;
cin >> N;
M = N;
if (M % 7 == 0)
    Flag = true;
while (!Flag && M){
    if (M % 10 == 7){
        Flag = true;
        break;
    }
    M /= 10;
}
if (Flag)
    cout << N << "与7有关";
else
    cout << N << "与7无关";
A.
删除break语句不会导致死循环,但有时会导致结果错误
B.
删除 M /= 10 将可能导致死循环
C.
删除 M = N 并将其后代码中的 M 变量改为 N,并调整输出同样能完成相关功能
D.
删除 break 语句不会导致死循环,但有时会影响效率

正确答案A

解析详情

【答案】A 【考点】循环控制逻辑 【解析】代码中 `while (!Flag && M)` 已包含了标志位判断。即使删除 `break`,在当前位找到 7 后 `Flag` 变为真,循环条件也会在下次判断时失效。删除 `break` 只会略微影响效率,不会改变结果。选项 A 说法错误,符合题意。 【易错点】理解标志变量对循环条件的控制作用。

判断题(每题 2 分)

1 题(判断题

小杨最近开始学习C++编程,老师说C++是一门面向对象的编程语言,也是一门高级语言。()

正确答案正确

解析详情

【答案】正确 【考点】C++ 语言基础 【解析】C++ 是一门支持面向对象编程的高级语言。 【易错点】基本概念常识。

2 题(判断题

在C++中,cout <<(3,4,5)可以输出345,且每个输出项之间用空格分开。()

正确答案错误

解析详情

【答案】错误 【考点】逗号表达式输出 【解析】`cout << (3, 4, 5)` 中,`(3, 4, 5)` 是逗号表达式,其值为最后一项 5。因此只会输出 5,不会输出 345。 【易错点】逗号表达式的值是其最后一个子表达式的值。

3 题(判断题

C++表达式12%10%10的值为2。()

正确答案正确

解析详情

【答案】正确 【考点】运算符结合性 【解析】取余运算 `%` 具有左结合性。`12 % 10 % 10` 等价于 `(12 % 10) % 10 = 2 % 10 = 2`。 【易错点】明确同优先级运算符的结合方向。

4 题(判断题

C++语句cout << rand() << ' ' << rand();的第二个输出值较大。()

正确答案错误

解析详情

【答案】错误 【考点】随机数独立性 【解析】`rand()` 生成的伪随机数序列中,连续两次调用的结果之间没有必然的大小关系。第二个值不一定较大。 【易错点】不应主观假定随机数的规律。

5 题(判断题

定义C++的int类型的变量ch,而且值为'1',则语句cout << int(ch);的输出为1。()

正确答案错误

解析详情

【答案】错误 【考点】字符与 ASCII 码转换 【解析】字符 `'1'` 的 ASCII 码是 49。将整型变量(存储了 49)强制转换为 `int` 输出,结果是 49 而不是 1。 【易错点】区分字符本身及其在编码表中的数值。

6 题(判断题

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

int i;
for (i = 0; i < 10; i++)
  continue;
if(i == 10)
  cout << i;

正确答案正确

解析详情

【答案】正确 【考点】循环终止状态分析 【解析】循环执行 10 次(i 从 0 到 9)。最后一次循环体执行完后,`i++` 使 `i` 变为 10,此时不满足 `i < 10` 退出循环。因此 `if (i == 10)` 成立,输出 10。 【易错点】注意循环结束时计数变量的值。

7 题(判断题

下面C++代码能求整数N和M之间所有整数之和,包含N和M。()

int N, M, Sum;
cin >> N >> M;
if (N > M){
    int tmp = N;
    N = M, M = tmp;
}
for (int i = N; i < M + 1; i++)
    Sum += i;
cout << Sum;

正确答案错误

解析详情

【答案】错误 【考点】变量初始化原则 【解析】变量 `Sum` 未进行初始化赋值 0。在 C++ 中,未初始化的局部变量初值是不确定的,直接进行累加操作会导致不可控的结果。 【易错点】所有累加器变量在使用前必须清零。

8 题(判断题

将下面C++代码中的 L3 标记的代码行调整为 for (int i = 0; i < 5; i++) 后输出结果相同。()

int loopCount = 0;
for (int i = 1; i < 5; i++) // L3
    for (int j = 0; j < i; j++)
        loopCount += 1;
cout << loopCount;

正确答案正确

解析详情

【答案】正确 【考点】嵌套循环执行次数分析 【解析】原代码总执行次数为 1+2+3+4=10。修改后 `i` 从 0 开始,但当 `i=0` 时内层循环不执行,总次数仍为 0+1+2+3+4=10。结果相同。 【易错点】仔细分析循环起始值对总次数的影响。

9 题(判断题

某一系列数据的规律是从第3个数值开始是前两个数之和。下面的代码求第N个数的值,N限定为大于2。()

int start1; // 第1个数
int start2; // 第2个数
int N; // 求N个数的值
int tmp;
cin >> start1 >> start2 >> N;

for (int i = 2; i < N; i++) {
    tmp = start1 + start2;
    start1 = start2;
    start2 = tmp;
}
cout << start2;

正确答案正确

解析详情

【答案】正确 【考点】数列规律模拟 【解析】代码通过迭代方式,每轮将前两个数之和赋给新值,并更新前两个数。这符合从第三项开始为前两项之和的规律。 【易错点】理清变量更新的先后顺序,避免覆盖掉还需使用的值。

10 题(判断题

下面 C++ 代码执行时如果输入 2024,则输出是 4202。()

int N, flag=0;
cin >> N;
while (N){
    if(!flag) cout << N % 10;
    N /= 10;
    flag = (flag + 1)%2;
}

正确答案错误

解析详情

【答案】错误 【考点】代码逻辑追踪 【解析】输入 2024。第一轮输出 `4`(flag=0),第二轮不输出(flag=1),第三轮输出 `0`(flag=0),第四轮不输出。最终输出 40。不是 4202。 【易错点】手动模拟循环过程,注意 `flag` 的状态切换逻辑。