C++ 一级 2023 年 03 月 GESP 认证试题及解析
C++ 一级 2023 年 03 月 GESP 认证考试真题,包含单选题、判断题和编程题。内容涵盖计算机基础知识、C++ 基本数据类型、变量命名规则、运算符优先级、条件判断与循环结构等核心考点。题目提供详细解析与参考程序,适合初学者复习巩固 C++ 基础语法与逻辑思维能力。

C++ 一级 2023 年 03 月 GESP 认证考试真题,包含单选题、判断题和编程题。内容涵盖计算机基础知识、C++ 基本数据类型、变量命名规则、运算符优先级、条件判断与循环结构等核心考点。题目提供详细解析与参考程序,适合初学者复习巩固 C++ 基础语法与逻辑思维能力。

| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | B | A | A | C | B | D | D | A | A | D | B | C | D | B | C |
以下不属于计算机输入设备的有( )。 A. 键盘 B. 音箱 C. 鼠标 D. 传感器
【解析】本题属于考察计算机基础知识中的'输入'和'输出'概念。'输入'指外界向机器内部传递信息,'输出'指计算机内部信息向外界展示。此题中,'音箱'属于向外部播放声音,故属于输出概念,所以本题正确答案为 B。
计算机系统中存储的基本单位用 B 来表示,它代表的是( )。 A. Byte B. Block C. Bulk D. Bit
【解析】本题属于考察计算机基础知识中,关于存储的基本单位。计算机中,表示存储大小的最小单位为'字节',英文为'Byte',表示一个字节存储空间大小的单位,用大写字母 B 表示,所以本题正确答案为 A。
常量 7.0 的数据类型是( )。 A. double B. float C. void D. int
【解析】本题考察考生对于 C++ 基本数据类型的了解:关于基本数据类型,有整型 int,浮点型 double、float,字符型 char,布尔型 bool。本题中 7.0 是小数形式,属于浮点型,C++ 中浮点型默认是 double,所以本题正确答案为 A。
下列关于 C++ 语言的叙述,不正确的是( )。 A. 变量定义时可以不初始化 B. 变量被赋值之后的类型不变 C. 变量没有定义也能够使用 D. 变量名必须是合法的标识符
【解析】本题考察 C++ 语言中变量的定义与使用。关于变量的定义与使用,变量在定义时可以不初始化,变量名必须是合法的标识符,并且变量被赋值之后的类型不变,均不符合题意,故 A、B、D 排除;选项 C 变量必须定义才能使用,没有定义变量就使用会造成编译错误,所以本题正确答案为 C。
以下不可以作为 C++ 标识符的是( )。 A. x321 B. 0x321 C. x321_ D. _x321
【解析】本题考察 C++ 语言中变量的定义与使用。根据变量的命名规则:1. 只能包含大小写字母、数字、下划线;2. 必须以大小写字母或者下划线开头;3. 不能使用 C++ 的指令或关键字。选项 B 为 0x321,以数字开头,违反变量的命名规则,所以本题正确答案为 B。
以下哪个不是 C++ 语言的关键字?( ) A. int B. for C. do D. cout
【解析】本题考察输入输出语句及变量的定义与使用两部分内容。输入输出的 cin 和 cout 都是 C++ 的常对象,但不是关键字。C++ 的关键字如下表所示:
| auto | false | static | using | if | goto | static_cast |
|---|---|---|---|---|---|---|
| bool | true | public | namespace | else | and | const_cast |
| char | enum | protected | inline | for | not | dynamic_cast |
| int | union | private | new | while | or | reinterpret_cast |
| short | struct | virtual | delete | do | xor | static_assert |
| long | class | override | this | switch | return | register |
| float | wchar_t | final | nullptr | case | try | explicit |
| double | sizeof | operator | void | default | catch | extern |
| signed | typeid | const | friend | break | throw | |
| unsigned | typedef | constexpr | template | continue | noexcept |
所以本题正确答案为 D。
如果 a、b 和 c 都是 int 类型的变量,下列哪个语句不符合 C++ 语法?( )
A. c = a + b;
B. c += a + b;
C. c = a = b;
D. c = a++b;
【解析】本题属于考察 C++ 基本运算中的算术运算。选项 A 是将 a 加 b 的和赋值给 c;选项 B 等价于 (c=c+(a+b)),将 a 和 b 的值相加,再加上 c 的值之后,赋给 c;选项 C 是将 b 赋给 a,再将 a 赋给 c;选项 D 中 ++ 是自增运算符,a++ 表示的是 a 在原本的值上自增 1,后面跟上 b 不符合 C++ 语法,所以本题正确答案为 D。
如果用两个 int 类型的变量 a 和 b 分别表达长方形的长和宽,则下列哪个表达式不能用来计算长方形的周长?( )
A. 2 * (a + b)
B. 2 * a + 2 * b
C. a + b + a + b
D. b + a * 2 + b
【解析】本题主要考察基本运算中的算术运算。长方形的周长公式是 (长 + 宽) * 2 或者长2+宽2 或四条边相加。选项 A 根据运算规则,先算乘法 (b2),后算加法 a+b2,不能用来计算长方形的周长,所以本题正确答案为 A。
表达式 (((3 == 0) + 'A' + 1 + 3.0)) 的结果类型为( )。
A. double
B. int
C. char
D. bool
【解析】本题考察 C++ 基本运算过程中的隐式类型转换。算式中,((3==0)) 的计算结果为 bool 类型、''A''为 char 类型常量、1 为 int 类型常量、3.0 为 double 类型常量,将它们相加时会从低精度的高精度的进行类型转换,最终结果为 double 类型,所以本题正确答案为 A。
如果 a 为 int 类型的变量,且 a 的值为 6,则执行 a *= 3; 之后,a 的值会是( )。
A. 3
B. 6
C. 9
D. 18
【解析】本题考察 C++ 基本运算。(a*=3) 相当于 (a=a * 3),a 的值一开始是 6,所以 (6*3=18),将这个结果再赋给 a,a 的值变为 18,所以本题正确答案为 D。
如果 a 和 b 均为 int 类型的变量,下列表达式不能正确判断'a 等于 0 且 b 等于 0'的是( )。
A. (a == 0) && (b == 0)
B. (a == b == 0)
C. (!a) && (!b)
D. (a == 0) + (b == 0) == 2
【解析】 选项 A 条件 1 是 (a==0),条件 2 是 (b==0),两个条件之间用逻辑与&&,两个条件都满足,整个条件就满足,符合 a 等于 0 且 b 等于 0; 选项 B 是先判断 a 和 b 是否相等,若相等表达式 (a==b) 的值为 1,若不相等 (a==b) 的值为 0,再判断表达式 (a==b) 的值是否等于 0,只有 a 和 b 不相等时,整个表达式成立; 选项 C 条件 1 是!a,a 为 0 时,!a 为 1,条件成立,条件 2 是!b,b 为 0 时,!b 为 1,条件成立,两个条件之间是逻辑与&&关系,两个条件都满足,整个条件就满足,符合 a 等于 0 且 b 等于 0; 选项 D 中 (a==0) 条件满足为 1,(b==0) 条件满足也为 1,两个都满足相加结果为 2,两个条件有任意不满足则相加结果可能为 0 或 1。因此,判断相加结果是否等于 2,符合 a 等于 0 且 b 等于 0;
如果 a 为 int 类型的变量,下列哪个表达式可以正确求出满足'大于等于 a 且是 4 的倍数'的整数中最小的?( )
A. a * 4
B. a / 4 * 4
C. (a + 3) / 4 * 4
D. a - a % 4 + 4
【解析】 选项 A,假设 a 为 3,a4 即为 (34=12,12) 虽然满足大于等于 a 且是 4 的倍数,但不是满足条件的整数中最小的,排除 A; 选项 B,假设 a 为 3,a/3 结果为 0,因为 a 为 int 类型,int 类型进行计算,结果还是 int,会把小数部分舍去,故 (a/34) 结果为 0,不满足条件,排除 B; 选项 C,令 (a=4k+t),k 是一个整数,(0<=t<=3),则 ((a+3) / 4=(4 k+t+3) / 4=k+(t+3) / 4)。如果 a 是 4 的倍数,则 (t=0),((a+3) / 4 * 4=k 4=a),等于 a 且是 4 的倍数;否则 (t>=1),((4 k+4) / 4* 4<=(a+3) / 4* 4<=(4 k+6) / 4* 4),即 ((4 k+4)<=(a+3) / 4* 4<=(4 k+4)),结果为 4k+4,大于 a 且是 4 的倍数的整数中最小的,满足题意; 选项 D,假设 a 为 (4,4%4=0) (a-a%4+4=8),8 虽然满足大于等于 a 且是 4 的倍数,但不是满足条件的整数中最小的,排除 D;
在下列代码的横线处填写( ),可以使得输出是'20 10'。
#include<iostream>
using namespace std;
int main(){
int a = 10, b = 20;
a = // 在此处填入代码
b = a / 100;
a = a % 100;
cout << a << " " << b << endl;
return 0;
}
A. a + b
B. (a + b) * 100
C. b * 100 + a
D. a * 100 + b
【解析】由于题目中没有分支、循环语句,可以尝试由结果反推。已知在第 8 行,输出'20 10',因此此时 a 为 20、b 为 10。第 7 行对 a 赋值后得到的就是第 8 行时 a 的值 20,可知第 7 行语句执行前 a 除以 100 的余数为 20。由于第 7 行未改变 b 的值,第 6 行对 b 赋值后得到的就是第 8 行时 b 的值 10,可知第 6 行语句执行前 a 除以 100 的商为 10。由于第 6 行未改变 a 的值,综合第 7 行得到的线索,可知第 6 行语句执行前,a 应为 1020。第 5 行语句执行前,a 为 10、b 为 20,四个选项中,只有选项 D 的表达式的计算结果为 1020。所以本题正确答案为 D。
在下列代码的横线处填写( ),可以使得输出是'1248'。
#include<iostream>
using namespace std;
int main(){
for(int i = 1; i <= 8; ) // 在此处填入代码
cout << i;
return 0;
}
A. i++
B. i *= 2
C. i += 2
D. i * 2
【解析】本题考察控制语句结构中的循环结构。变量 i 的初始值是 1,循环条件是 i 小于等于 8,循环范围是从 1 到 8,循环体中输出 i,得到的输出是 1248,规律是在前一个的基础上乘 2,每次 i*2 之后赋给 i,所以本题正确答案为 B。
执行以下 C++ 语言程序后,输出结果是( )。
#include<iostream>
using namespace std;
int main(){
int sum = 0;
for(int i = 1; i <= 20; i++)
if(i % 3 == 0 || i % 5 == 0)
sum += i;
cout << sum << endl;
return 0;
}
A. 210 B. 113 C. 98 D. 15
【解析】本题考察循环结构与条件判断。程序遍历 1 到 20,若 i 能被 3 或 5 整除则累加至 sum。满足条件的数为 3, 5, 6, 9, 10, 12, 15, 18, 20,总和为 98,所以本题正确答案为 C。
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | × | × | √ | × | × | × | × | √ | √ |
在 Windows 系统中通过键盘完成对选定文本移动的按键组合是先 Ctrl+X,移动到目标位置后按 Ctrl+V。(√) 【解析】本题考察计算机基础中快捷键的使用。Ctrl+X 表示剪切文件(复制并从原位置删除),Ctrl+V 表示粘贴所剪切的文件。所以本题正确。
程序员用 C、C++、Python、Scratch 等编写的程序能在 CPU 上直接执行。(×) 【解析】本题属于对编程语言特点的考察。题目中所列举的编程语言,均无法在 CPU 上直接执行,而是需要通过各自的方式,转换成机器语言后才能被 CPU 识别和执行,所以本题错误。
在 C++ 语言中,注释不宜写得过多,否则会使得程序运行速度变慢。(×) 【解析】本题考察计算机的编程环境。注释信息是写在代码当中方便程序阅读者理解代码的,养成书写注释的好习惯能够为编写更大规模的程序及团队合作打好基础。注释信息会在编译过程中被去掉,不会产生机器指令,也就不会影响程序运行速度,所以本题错误。
在 C++ 语言中,标识符中可以有数字,但不能以数字开头。(√) 【解析】本题考察 C++ 语言中变量的定义与使用。根据变量的命名规则:1. 只能包含大小写字母、数字、下划线;2. 必须以大小写字母或者下划线开头;3. 不能使用 C++ 的关键字。故标识符中可以有数字,但不能以数字开头,所以本题正确。
'3'是一个 int 类型常量。(×) 【解析】本题主要考察基本数据类型。int 是整型,例如 3 是一个 int 类型常量。但 3 加上单引号之后'3'在 C++ 语言中表示字符,它是 char 类型常量。所以本题错误。
if 语句中的条件表达式的结果必须为 bool 类型。(×) 【解析】本题主要考察控制语句结构。if 语句的条件表达式不一定是 bool 类型,也可能是其他类型,任何非零值都会被视为真,而零值会被视为假。例如,如果 a 为 int 类型变量,则 if (a) ; 是否符合 C++ 语法的 if 语句,表示判断 a 是否为 0:a 不等于 0 时,则视为真,if 条件成立;反之,如果 a 等于 0,则视为假,if 条件不成立。但 a 的类型为 int 类型,并不是 bool 类型,所以本题错误。
for 语句的循环体至少会执行一次。(×) 【解析】本题主要考察 for 循环结构,for 循环分四步走:1. 执行第一个分号前的初始表达式;2. 判断两个分号之间的循环条件表达式结果是否为真;3. 执行循环体;4. 执行第二个分号后的步进表达式,并回到第 2 步重新判断。其中第 2 步,如果执行初始表达式后的状态循环条件表达式为假,则不会执行循环体。此时循环体一次也没有执行就结束了循环,所以本题错误。
如果 a 为 int 类型的变量,则赋值语句 a = a + 3; 是错误的,因为这条语句会导致 a 无意义。(×)
【解析】本题主要考察变量的定义与使用。尽管数学上 a=a+3 是无解的,但在 C++ 语言中 a=a+3 并不表示方程或恒等式。a 为 int 类型的变量,执行 (a=a+3) ;,会让 a 的值变为在原值的基础上增加 3,不会导致 a 无意义。所以本题错误。
如果 a 为 int 类型的变量,则表达式 (a / 4 == 2) 和表达式 (a >= 8 && a <= 11) 的结果总是相同的。(√)
【解析】本题考察基本运算。由于 a 为 int 类型,表达式 a/4 中的除号/为整除运算。因此表达式 ((a/4==2)) 表示 a 除以 4 的商为 2,于是 a 的值从 8 到 11 时表达式结果为真,否则为假。这与表达式 (a >= 8 && a <= 11) 的结果总是相同的,所以本题正确。
表达式 (3.5 * 2) 的计算结果为 7.0,且结果类型为 double。(√) 【解析】本题考察了基本运算中的算术运算,在 C++ 语言中,3.5 为 double 类型常量,2 为 int 类型的常量,double 类型与 int 类型做乘法运算的结果是 double 类型,结果为 7.0,所以本题正确。
小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编程方法求出给定的月份有多少天。你能做到吗?
输入一行,包含两个整数,分别表示一个日期的年、月。
输出一行,包含一个整数,表示输入月份有多少天。
2022 1
31
2020 2
29
【题目大意】条件判断问题,主要分清平年和闰年,平年 2 月 28 天,闰年 2 月 29 天,其余按照大小月取分,输出对应的天数。
#include <iostream>
using namespace std;
int main(){
int y = 0, m = 0;
cin >> y >> m;
bool leap = false; // 判断闰年
if(y % 400 == 0) leap = true;
if(y % 4 == 0 && y % 100 != 0) leap = true;
if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
cout << 31 << endl; // 大月
else if(m == 4 || m == 6 || m == 9 || m == 11)
cout << 30 << endl; // 小月
else if(leap)
cout << 29 << endl; // 闰年 2 月
else
cout << 28 << endl; // 平年 2 月
return 0;
}
小明刚刚学习了如何计算长方形面积。他发现,如果一个长方形的长和宽都是整数,它的面积一定也是整数。现在,小明想知道如果给定长方形的面积,有多少种可能的长方形,满足长和宽都是整数? 如果两个长方形的长相等、宽也相等,则认为是同一种长方形。约定长方形的长大于等于宽。正方形是长方形的特例,即长方形的长和宽可以相等。
输入一行,包含一个整数 A,表示长方形的面积。约定 2 ≤ A ≤ 1000。
输出一行,包含一个整数 c,表示有 c 种可能的长方形。
4
2
2 种长方形面积为 4,它们的长宽分别为 2×2、4×1。
6
2
2 种长方形面积为 6,它们的长宽分别为 3×2、6×1。
【题目大意】统计长方形的个数。两个长方形的长和宽相等算一种情况,所以规定长大于宽;长和宽相等是正方形,是长方形的特例,算一种情况。统计完个数之后输出。
#include <iostream>
using namespace std;
int main() {
int area = 0, cnt = 0; // 面积 area、计数变量 cnt
cin >> area; // 输入面积
for (int w = 1; w * w <= area; w++) { // 宽从 1 开始到宽*宽<=面积
if (area % w == 0) // 如果面积是宽的倍数,说明满足题意,cnt++
cnt++;
}
cout << cnt << endl; // 输出 cnt
return 0;
}

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online