GESP Level 2 · 2023-06

客观题逐题讲义

15 道单选 + 10 道判断。每题按“题干 → 自己想 → 答案 → 知识点 → 分步推导 → 易错点”组织,适合课堂讲评和课后复习。

25客观题总数
15单选题
10判断题
50总分

一、单选题逐题讲评

单选题 · 1

第 1 题(单选题)

#
高级语言程序的编译过程

高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。

A.编辑
B.保存
C.调试
D.编译
展开:答案、思考步骤与易错点
正确答案D

知识点讲解

高级语言程序的编译过程

先这样想

先圈关键词,再排除与题意不匹配的选项。

分步推导

  1. 高级语言编写的源代码不能直接被计算机执行,需要经过编译器编译,将源代码翻译成机器语言(可执行代码)。
  2. 编辑只是修改代码文本,保存只是将文件写入磁盘,调试是查找程序错误的过程,它们都不会生成可执行代码。
  3. 只有编译才能将高级语言程序转换为可执行代码。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易将"调试"误认为能生成可执行代码,调试是在编译之后进行的排错过程。

单选题 · 2

第 2 题(单选题)

#
流程图与循环结构伪代码

能够实现下面流程图功能的伪代码是()。

A.if 条件判断 then 语句块
B.if 条件判断 then 什么也不做 else 语句块
C.while 条件判断 do 语句块
D.while not 条件判断 do 语句块
展开:答案、思考步骤与易错点
正确答案D

知识点讲解

流程图与循环结构伪代码

先这样想

先列变量每轮变化,再看输出语句是否真的执行。

分步推导

  1. 流程图中先进行条件判断,条件不满足时执行语句块并回到判断处,条件满足时退出循环。
  2. 这是一种"当条件不成立时循环"的结构,对应 while not 条件判断 do 语句块。
  3. A 和 B 是分支结构(if),不会循环回去。
  4. C 是"当条件成立时循环",与流程图中的逻辑方向相反。

计算 / 追踪提示

建议在草稿纸画三列:当前变量、条件真假、本轮输出。遇到 continue 直接跳到下一轮,遇到 break 只跳出当前循环。

易错点

容易混淆 while 条件判断 和 while not 条件判断 的区别,关键看流程图中"条件满足"走的是退出还是执行。

单选题 · 3

第 3 题(单选题)

#
C++ 基本数据类型与算术运算规则

下列关于 C++语言的叙述,正确的是()。

A.char 类型变量不能赋值给 int 类型的变量。
B.两个 int 类型变量相乘,计算结果还是 int 类型。
C.计算两个 int 类型变量相乘时,如果乘积超出了 int 类型的取值范围,程序会报错崩溃。
D.计算两个 double 类型变量相除时,如果除数的值为 0.0,程序会报错崩溃。
展开:答案、思考步骤与易错点
正确答案B

知识点讲解

C++ 基本数据类型与算术运算规则

先这样想

先圈关键词,再排除与题意不匹配的选项。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易误认为整数溢出会导致程序崩溃,实际上 C++ 中整数溢出属于未定义行为,通常表现为数值回绕。

单选题 · 4

第 4 题(单选题)

#
C++ 语法规则代码块与花括号

下列关于 C++语言的叙述,不正确的是()。

A.if 语句中的判断条件必须用小括号 '(' 和 ')' 括起来。
B.for 语句中两个 ';' 之间的循环条件可以省略,表示循环继续执行的条件一直满足。
C.循环体包含多条语句时,可以用缩进消除二义性。
D.除了 "先乘除、后加减",还有很多运算符优先级。
展开:答案、思考步骤与易错点
正确答案C

知识点讲解

C++ 语法规则;代码块与花括号

先这样想

先圈关键词,再排除与题意不匹配的选项。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

学过 Python 的同学容易把"缩进决定代码块"的概念迁移到 C++,但 C++ 依赖花括号而非缩进。

单选题 · 5

第 5 题(单选题)

#
C++ 关键字与标识符

以下哪个是 C++语言的关键字?()

A.main
B.max
C.double
D.sqrt
展开:答案、思考步骤与易错点
正确答案C

知识点讲解

C++ 关键字与标识符

先这样想

先圈关键词,再排除与题意不匹配的选项。

分步推导

  1. double 是 C++ 的内置浮点类型关键字,属于语言保留字。
  2. main 是程序入口函数名但不是关键字,可以用作变量名(虽然不推荐)。
  3. max 是标准库中的函数名。
  4. sqrt 是 <cmath> 中的数学函数名。
  5. 只有 double 是 C++ 语言规范规定的关键字。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易误认为 main 是关键字,实际上 main 只是约定的入口函数名,不是 C++ 保留关键字。

单选题 · 6

第 6 题(单选题)

#
C++ 运算符

以下哪个不是 C++语言的运算符?()

A.>=
B./=
C.||
D.<>
展开:答案、思考步骤与易错点
正确答案D

知识点讲解

C++ 运算符

先这样想

先圈关键词,再排除与题意不匹配的选项。

分步推导

  1. >= 是大于等于关系运算符,/= 是除法赋值运算符,|| 是逻辑或运算符,这三个都是合法的 C++ 运算符。
  2. <> 在 C++ 中不是运算符(它在 Pascal 等语言中表示不等于)。
  3. C++ 中不等于应写作 !=。

计算 / 追踪提示

计算时分清 `/` 是商,`%` 是余数;如果题目要求第 N 个位置,常要先改成从 0 开始的下标。

易错点

容易混淆不同语言的运算符,<> 在某些语言中是"不等于",但 C++ 中不存在这个运算符。

单选题 · 7

第 7 题(单选题)

#
C++ 类型转换与左值

如果 a 为 int 类型的变量,b 为 char 类型的变量,则下列哪个语句不符合 C++语法?()

A.a = a + 1.0;
B.a = (int)(b - '0');
C.b = (char)(a + '0');
D.(int)b = a;
展开:答案、思考步骤与易错点
正确答案D

知识点讲解

C++ 类型转换与左值

先这样想

先圈关键词,再排除与题意不匹配的选项。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易忽略"类型转换表达式的结果是右值"这一规则,误以为 (int)b 仍然代表变量 b。

单选题 · 8

第 8 题(单选题)

#
整数除法截断与浮点类型提升

如果用两个 int 类型的变量 a 和 b 分别表达平行四边形的两条边长,用 int 类型的变量 h 表达 a 边对应的高,则下列哪个表达式不能用来计算 b 边对应的高?()

A.a / b * (0.0 + h)
B.(0.0 + a * h) / b
C.a * h / (b + 0.0)
D.(a + 0.0) * h / b
展开:答案、思考步骤与易错点
正确答案A

知识点讲解

整数除法截断与浮点类型提升

先这样想

先圈关键词,再排除与题意不匹配的选项。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易忽略 a / b 在 a < b 时整数除法直接截断为 0,导致后续乘法结果也为 0。

单选题 · 9

第 9 题(单选题)

#
bool 类型自增行为与循环终止条件

以下哪个循环语句会无限次执行?( )

A.for (int a = 0; a; a++) ;
B.for (bool b = false; b <= true; b++) ;
C.for (char c = 'A'; c < 'z'; c++) ;
D.for (double d = 0.0; d < 10.0; d += 0.001) ;
展开:答案、思考步骤与易错点
正确答案B

知识点讲解

bool 类型自增行为与循环终止条件

先这样想

先列变量每轮变化,再看输出语句是否真的执行。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易忽略 bool 类型自增的特殊行为——true++ 在 C++ 中结果仍为 true,导致循环条件永远成立。

单选题 · 10

第 10 题(单选题)

#
char 与 int 的隐式类型提升cout 输出行为

如果 a 为 char 类型的变量,且 a 的值为 'C'(已知 'C' 的 ASCII 码为 67),则执行 cout << (a + 2); 会输出( )。

A.E
B.C+2
C.C2
D.69
展开:答案、思考步骤与易错点
正确答案D

知识点讲解

char 与 int 的隐式类型提升;cout 输出行为

先这样想

先圈关键词,再排除与题意不匹配的选项。

分步推导

  1. a 的值为 'C',ASCII 码为 67。
  2. 表达式 a + 2 中,char 类型的 a 会被隐式提升为 int,计算结果为 int 类型的 69。
  3. cout << 69 输出整数 69。
  4. 注意如果写成 cout << (char)(a + 2),才会输出字符 'E'。
  5. 但题目中 (a + 2) 的结果 is int,所以输出数字 69。

计算 / 追踪提示

输出题不要只算值,还要看格式控制、空格、换行和输出语句的位置。

易错点

容易误选 A('E'),认为 char + int 的结果仍是 char 并输出对应字符,实际上 char 参与算术运算后提升为 int。

单选题 · 11

第 11 题(单选题)

#
逻辑运算符与关系运算符的正确使用

如果 a 和 b 均为 int 类型的变量,下列表达式能正确判断 "a 等于 1 且 b 等于 1" 的是()。

A.(a == b) && (b == 1)
B.(a && b)
C.(a == b == 1)
D.(a * b == 1)
展开:答案、思考步骤与易错点
正确答案A

知识点讲解

逻辑运算符与关系运算符的正确使用

先这样想

先圈关键词,再排除与题意不匹配的选项。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易误选 C,认为 a == b == 1 等价于 a == 1 且 b == 1,但实际上 == 是左结合的,(a == b) 的结果是 bool 再与 1 比较。

单选题 · 12

第 12 题(单选题)

#
字符比较与逻辑运算范围判断的正确写法

如果 a 为 char 类型的变量,下列哪个表达式可以正确判断 “a 是数字”?

( )
A.'0' <= a && a <= '9'
B.'1' <= a && a <= '0'
C.'0' <= a <= '9'
D.'1' <= a <= '0'
展开:答案、思考步骤与易错点
正确答案A

知识点讲解

字符比较与逻辑运算;范围判断的正确写法

先这样想

把字符先换成编码或相对差值,再比较大小。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易误选 C,以为 '0' <= a <= '9' 是合法的区间判断,但 C++ 不支持连续比较,必须拆成两个条件用 && 连接。

单选题 · 13

第 13 题(单选题)

#
字符 ASCII 码运算与类型转换

在下列代码的横线处填写(___),使得输出是 9。

#include <iostream>
using namespace std;
int main() {
    char a = '3', b = '6';
    cout << _____; // 在此处填入代码
    return 0;
}
A.(a + b)
B.(a + b - '0')
C.(char)(a + b)
D.(char)(a + b - '0')
展开:答案、思考步骤与易错点
正确答案D

知识点讲解

字符 ASCII 码运算与类型转换

先这样想

把字符先换成编码或相对差值,再比较大小。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

计算时分清 `/` 是商,`%` 是余数;如果题目要求第 N 个位置,常要先改成从 0 开始的下标。

易错点

容易混淆输出整数和输出字符的区别。(char) 转换后 cout 输出的是字符本身,不是 ASCII 码值。

单选题 · 14

第 14 题(单选题)

#
循环与条件判断整除(因数)

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

#include <iostream>
using namespace std;
int main() {
    int sum = 0;
    for (int i = 1; i <= 20; i++)
        if (____) // 在此处填入代码
            sum += i;
        cout << sum << endl;
        return 0;
}
A.i % 3 == 0
B.20 % i == 0
C.i <= 8
D.i >= 18
展开:答案、思考步骤与易错点
正确答案B

知识点讲解

循环与条件判断;整除(因数)

先这样想

先列变量每轮变化,再看输出语句是否真的执行。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

建议在草稿纸画三列:当前变量、条件真假、本轮输出。遇到 continue 直接跳到下一轮,遇到 break 只跳出当前循环。

易错点

容易在心算求和时出错,建议逐一列出满足条件的 i 值再求和验证。

单选题 · 15

第 15 题(单选题)

#
布尔表达式求值字符遍历

执行以下 C++ 语言程序后,输出结果是()。

#include <iostream>
using namespace std;
int main() {
    for (char x = 'A'; x <= 'D'; x++)
        if ((x != 'A') + (x == 'C') + (x == 'D') + (x != 'D') == 3)
            cout << x;
    return 0;
}
A.A
B.B
C.C
D.D
展开:答案、思考步骤与易错点
正确答案C

知识点讲解

布尔表达式求值;字符遍历

先这样想

把字符先换成编码或相对差值,再比较大小。

分步推导

  1. 先根据题干关键词定位知识点。
  2. 再逐项核对选项或判断题结论。

计算 / 追踪提示

建议在草稿纸画三列:当前变量、条件真假、本轮输出。遇到 continue 直接跳到下一轮,遇到 break 只跳出当前循环。

易错点

容易在计算各布尔子表达式时弄混 != 和 == 的结果,建议列表逐项核算。

二、判断题逐题讲评

判断题 · 1

第 1 题(判断题)

#
计算机存储容量计算字节与KB换算

诞生于1986年的中华学习机CEC-I入选了2021年的CCF计算机历史记忆(一类),它的内存只有64KB。当时的汉字编码字符集GB2312中共有6763个汉字,假如每个汉字用2个字节编码,将整个GB2312汉字字符集都放入CEC-I的内存,也只占用了不超过1/5的内存空间。

判断本题结论:先独立判断,再展开答案。正确答案是 错误
展开:答案、思考步骤与易错点
正确答案错误

知识点讲解

计算机存储容量计算;字节与KB换算

先这样想

把题干拆成两半:事实是否正确,结论是否被事实支持。

分步推导

  1. 64KB = 64 × 1024 = 65536 字节。
  2. 6763 个汉字 × 2 字节 = 13526 字节。
  3. 13526 / 65536 ≈ 20.6%,即约占 1/5。
  4. 题目说"不超过 1/5",但实际上 20.6% 已经略微超过了 20%(即 1/5),所以该说法错误。

计算 / 追踪提示

计算时分清 `/` 是商,`%` 是余数;如果题目要求第 N 个位置,常要先改成从 0 开始的下标。

易错点

容易粗略估算为"大约 1/5"就判断正确,但精确计算后 13526 > 65536/5 = 13107.2,实际上超过了 1/5。

判断题 · 2

第 2 题(判断题)

#
域名层次结构顶级域名

域名是由一串用点分隔的名字来标识互联网上一个计算机或计算机组的名称,CCF编程能力等级认证官方网站的域名是 gesp.ccf.org.cn,其中顶级域名是 gesp。

判断本题结论:先独立判断,再展开答案。正确答案是 错误
展开:答案、思考步骤与易错点
正确答案错误

知识点讲解

域名层次结构;顶级域名

先这样想

把题干拆成两半:事实是否正确,结论是否被事实支持。

分步推导

  1. 域名 gesp.ccf.org.cn 中,顶级域名(TLD)是最右边的 .cn(中国国家顶级域名),而不是最左边的 gesp。
  2. gesp 是最低级的子域名(四级域名)。
  3. 域名从右到左依次为:顶级域名 cn → 二级域名 org → 三级域名 ccf → 四级域名 gesp。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易混淆域名层级方向,误认为最左边的是顶级域名,实际上最右边的才是顶级域名。

判断题 · 3

第 3 题(判断题)

#
C++ 头文件与数学函数库

在使用 C++语言编写程序时,不能使用 sqrt、abs 等数学函数,包含<cmath>或<math.h>头文件后就能够使用了。

判断本题结论:先独立判断,再展开答案。正确答案是 正确
展开:答案、思考步骤与易错点
正确答案正确

知识点讲解

C++ 头文件与数学函数库

先这样想

把题干拆成两半:事实是否正确,结论是否被事实支持。

分步推导

  1. sqrt、abs 等数学函数定义在 <cmath>(C++ 风格)或 <math.h>(C 风格)头文件中。
  2. 在没有包含这些头文件时,编译器不认识这些函数,不能直接使用。
  3. 包含相应头文件后,函数声明可见,就可以正常调用了。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易误以为这些函数是 C++ 内置的,不需要头文件就能使用,但它们属于标准库函数,必须包含头文件。

判断题 · 4

第 4 题(判断题)

#
C++ 标识符命名规则运算符

在 C++语言中,标识符中可以有下划线 '_'。同时,'_' 也是 C++语言的运算符。

判断本题结论:先独立判断,再展开答案。正确答案是 错误
展开:答案、思考步骤与易错点
正确答案错误

知识点讲解

C++ 标识符命名规则;运算符

先这样想

把题干拆成两半:事实是否正确,结论是否被事实支持。

分步推导

  1. 前半句正确:C++ 标识符可以包含下划线 '_',例如 my_var、_count 都是合法标识符。
  2. 但后半句错误:'_' 不是 C++ 的运算符。
  3. C++ 的运算符包括 +、-、*、/、%、=、==、!=、&&、|| 等,下划线不在其中。
  4. 两个条件必须同时成立命题才为真,所以整体为错误。

计算 / 追踪提示

计算时分清 `/` 是商,`%` 是余数;如果题目要求第 N 个位置,常要先改成从 0 开始的下标。

易错点

前半句是正确的,容易因此整体判断为正确,但要注意后半句关于运算符的说法是错误的。

判断题 · 5

第 5 题(判断题)

#
浮点运算与类型推导

如果 a 是 double 类型的变量,而且值为 3.5,则表达式 𝑎 × 10 a×10的计算结果为 35,且结果类型为 int。

判断本题结论:先独立判断,再展开答案。正确答案是 错误
展开:答案、思考步骤与易错点
正确答案错误

知识点讲解

浮点运算与类型推导

先这样想

把题干拆成两半:事实是否正确,结论是否被事实支持。

分步推导

  1. a 是 double 类型,值为 3.5。
  2. a × 10 中,10 会被隐式提升为 double,计算结果为 35.0,类型仍为 double,而不是 int。
  3. 虽然数值上等于 35,但结果类型是 double 而非 int,所以该说法错误。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易只关注数值结果是 35 就判断正确,忽略了"结果类型为 int"这个条件——double 与 int 运算的结果类型是 double。

判断题 · 6

第 6 题(判断题)

#
C++ 复合语句(代码块)

在 if 语句中,如果条件成立时需要执行多条语句,可以使用大括号 '{' 和 '}' 将这些语句括起来。

判断本题结论:先独立判断,再展开答案。正确答案是 正确
展开:答案、思考步骤与易错点
正确答案正确

知识点讲解

C++ 复合语句(代码块)

先这样想

把题干拆成两半:事实是否正确,结论是否被事实支持。

分步推导

  1. 在 C++ 中,if 语句默认只控制紧跟其后的一条语句。
  2. 如果需要在条件成立时执行多条语句,必须用花括号 {} 将它们组成一个复合语句(代码块)。
  3. 这是 C++ 的基本语法规则。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

初学者容易忘记加花括号,导致只有第一条语句受 if 控制,后续语句无论条件是否成立都会执行。

判断题 · 7

第 7 题(判断题)

#
死循环(无限循环)

循环语句的循环体有可能无限制地执行下去。

判断本题结论:先独立判断,再展开答案。正确答案是 正确
展开:答案、思考步骤与易错点
正确答案正确

知识点讲解

死循环(无限循环)

先这样想

先列变量每轮变化,再看输出语句是否真的执行。

分步推导

  1. 如果循环条件始终为真且没有 break 等跳出机制,循环体就会无限执行。
  2. 例如 while(true) {} 或 for(;;) {} 都是死循环。
  3. 因此循环语句的循环体"有可能"无限执行下去,这个说法是正确的。

计算 / 追踪提示

建议在草稿纸画三列:当前变量、条件真假、本轮输出。遇到 continue 直接跳到下一轮,遇到 break 只跳出当前循环。

易错点

题目问的是"有可能",不是"一定会"。只要存在这种可能性,命题就成立。

判断题 · 8

第 8 题(判断题)

#
C++ 运算符种类

++和==都是 C++语言的运算符,但+=不是。

判断本题结论:先独立判断,再展开答案。正确答案是 错误
展开:答案、思考步骤与易错点
正确答案错误

知识点讲解

C++ 运算符种类

先这样想

把题干拆成两半:事实是否正确,结论是否被事实支持。

分步推导

  1. ++ 是自增运算符,== 是相等比较运算符,+= 是加法赋值运算符,三者都是合法的 C++ 运算符。
  2. 题目说 += 不是运算符,这是错误的。
  3. 类似地,-=、*=、/=、%= 等复合赋值运算符也都是 C++ 的合法运算符。

计算 / 追踪提示

计算时分清 `/` 是商,`%` 是余数;如果题目要求第 N 个位置,常要先改成从 0 开始的下标。

易错点

容易被"+= 看起来是两个符号组合"所误导,但 += 确实是 C++ 定义的独立运算符。

判断题 · 9

第 9 题(判断题)

#
字符 ASCII 码与算术运算

如果 a 为 char 类型的变量,且取值为大写字母'F',则执行语句 a = a + 1;后,a 的值会变为大写字母'G'。

判断本题结论:先独立判断,再展开答案。正确答案是 正确
展开:答案、思考步骤与易错点
正确答案正确

知识点讲解

字符 ASCII 码与算术运算

先这样想

把字符先换成编码或相对差值,再比较大小。

分步推导

  1. 'F' 的 ASCII 码为 70,a + 1 = 71,对应字符 'G'。
  2. 在 ASCII 码表中,大写字母 A-Z 是连续编码的(65-90),所以 'F' + 1 = 'G' 是正确的。
  3. 赋值回 char 类型的 a 后,a 的值就是 'G'。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

要注意 ASCII 码表中大写字母是连续排列的,这是该运算成立的前提条件。

判断题 · 10

第 10 题(判断题)

#
数学函数返回类型

表达式 9.0 9.0 ​ 的计算结果为 3,且结果类型为 int。

判断本题结论:先独立判断,再展开答案。正确答案是 错误
展开:答案、思考步骤与易错点
正确答案错误

知识点讲解

数学函数返回类型

先这样想

把题干拆成两半:事实是否正确,结论是否被事实支持。

分步推导

  1. sqrt(9.0) 的计算结果在数值上确实是 3.0,但 sqrt 函数的返回类型是 double(当参数为 double 时),不是 int。
  2. 所以结果值为 3.0,类型为 double,题目说"结果类型为 int"是错误的。

计算 / 追踪提示

讲评时可以先让学生口头说出排除理由,再打开解析核对。

易错点

容易只看数值结果是整数 3 就认为类型是 int,但函数的返回类型由函数声明决定,与结果的数值无关。