2023年3月GESPC++一级真题解析
一、单选题(每题2分,共30分)
题目 | 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 |
1.以下不属于计算机输入设备的有( )。
A .键盘
B .音箱
C .鼠标
D .传感器
【答案】 B
【考纲知识点】计算机基础(一级)
【解析】本题属于考察计算机基础知识中的 “ 输入 ” 和 “ 输出 ” 概念; “ 输入 ” 指外界
向机器内部传递信息, “ 输出 ” 指计算机内部信息向外界展示。此题中, “ 音箱 ” 属
于向外部播放声音,故属于输出概念,所以本题正确答案为 B 。
2. 计算机系统中存储的基本单位用 B来表示,它代表的是( )。
A.Byte
B.Block
C.Bulk
D.Bit
【答案】 A
【考纲知识点】计算机基础(一级)
【解析】本题属于考察计算机基础知识中,关于存储的基本单位;计算机中,表
示存储大小的最小单位为 “ 字节 ” ,英文为 “Byte” ,表示一个字节存储空间大小的
单位,用大写字母 B 表示,所以本题正确答案为 A 。
3. 常量 7.0 的数据类型是()。
A.double
B.float
C.void
D.int
【答案】 A
【考纲知识点】基本数据类型(一级)
【解析】本题考察考生对于 C++ 基本数据类型的了解:关于基本数据类型,有整
型 int ,浮点型 double 、 float ,字符型 char ,布尔型 bool ,本题中 7.0 是小数形
式,属于浮点型, C++ 中浮点型默认是 double ,所以本题正确答案为 A 。
4. 下列关于 C++ 语言的叙述,不正确的是()。
A. 变量定义时可以不初始化
B. 变量被赋值之后的类型不变
C. 变量没有定义也能够使用
D. 变量名必须是合法的标识符
【答案】 C
【考纲知识点】变量的定义与使用(一级)
【解析】本题考察 C++ 语言中变量的定义与使用;关于变量的定义与使用,变量
在定义时可以不初始化,变量名必须是合法的标识符,并且变量被赋值之后的类
型不变,均不符合题意,故 A 、 B 、 D 排除;选项 C 变量必须定义才能使用,没
有定义变量就使用会造成编译错误,所以本题正确答案为 C 。
5. 以下不可以作为 C++ 标识符的是()。
A.x321
B.0x321
C.x321_
D._x321
【答案】 B
【考纲知识点】变量的定义与使用(一级)
【解析】本题察 C++ 语言中变量的定义与使用;根据变量的命名规则: 1. 只能包
含大小写字母、数字、下划线; 2. 必须以大小写字母或者下划线开头; 3. 不能使
用 C++ 的指令或关键字。选项 B 为 0x321 ,以数字开头,违反变量的命名规则,
所以本题正确答案为 B 。
6. 以下哪个不是 C++ 语言的关键字?
A.int
B.for
C.do
D.cout
【答案】 D
【考纲知识点】计算机基础与编程环境(一级)
【解析】本题考察输入输出语句及变量的定义与使用两部分内容;输入输出的
cin 和 cout 都是 C++ 的常对象,但不是关键字。 C++ 的关键字如下图所示:

所以本题正确答案为 D 。
7. 如果 a 、 b 和 c 都是 int 类型的变量,下列哪个语句不符合 C++ 语法?
A.c=a+b;
B.c+=a+b;
C.c=a=b;
D.c=a++b;
【答案】 D
【考纲知识点】基本运算(一级)
【解析】本题属于考察 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 。
8. 如果用两个 int 类型的变量 a 和 b 分别表达长方形的长和宽,则下列哪个表达
式不能用来计算长方形的周长?
A.a+b*2
B.2*a+2*b
C.a+b+a+b
D.b+a*2+b
【答案】 A
【考纲知识点】基本运算(一级)
【解析】本题主要考察基本运算中的算术运算;长方形的周长公式是(长 + 宽)
*2 或者长 *2+ 宽 *2 或四条边相加;选项 A 根据运算规则,先算乘法 b*2 ,后算加
法 a+b*2 ,不能用来计算长方形的周长,所以本题正确答案为 A 。
9. 表达式 ((3==0)+'A'+1+3.0) 的结果类型为()。
A.double
B.int
C.char
D.bool
【答案】 A
【考纲知识点】基本运算(一级)
【解析】本题考察 C++ 基本运算过程中的隐式类型转换;算式中, (3==0) 的计算
结果为 bool 类型、 ’A’ 为 char 类型常量、 1 为 int 类型常量、 3.0 为 double 类型常
量,将它们相加时会从低精度的高精度的进行类型转换,最终结果为 double 类
型,所以本题正确答案为 A 。
10. 如果 a 为 int 类型的变量,且 a 的值为 6 ,则执行 a*=3; 之后, a 的值会是()。
A.3
B.6
C.9
D.18
【答案】 D
【考纲知识点】基本运算(一级)
【解析】本题考察 C++ 基本运算; a*=3 相当于 a=a*3 , a 的值一开始是 6 ,所以
6*3=18 ,将这个结果再赋给 a , a 的值变为 18 ,所以本题正确答案为 D 。
11. 如果 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
【答案】 B
【考纲知识点】基本运算(一级)
【解析】本题主要考察 C++ 基本运算中的逻辑运算;
选项 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 ;
所以本题正确答案为 B 。
12. 如果 a 为 int 类型的变量,下列哪个表达式可以正确求出满足 “ 大于等于 a 且
是 4 的倍数 ” 的整数中最小的?
A.a*4
B.a/4*4
C.(a+3)/4*4
D.a-a%4+4
【答案】 C
【考纲知识点】基本运算(一级)
【解析】本题考察 C++ 基本运算中的算术运算;
选项 A ,假设 a 为 3 , a*4 即为 3*4=12,12 虽然满足大于等于 a 且是 4 的倍数,但
不是满足条件的整数中最小的,排除 A ;
选项 B ,假设 a 为 3 , a/3 结果为 0 ,因为 a 为 int 类型, int 类型进行计算,结果
还是 int ,会把小数部分舍去,故 a/3*4 结果为 0 ,不满足条件,排除 B ;
选项 C ,令 a=4k+t , k 是一个整数, 0<=t<=3 ,则 (a+3)/4=(4k+t+3)/4=k+(t+3)/4 。如
果 a 是 4 的倍数,则 t=0,(a+3)/4*4=k*4=a ,等于 a 且是 4 的倍数;否则 t>=1 ,
(4k+4)/4*4<=(a+3)/4*4<=(4k+6)/4*4 ,即 (4k+4)<=(a+3)/4*4<=(4k+4) ,结果为
4k+4 ,大于 a 且是 4 的倍数的整数中最小的,满足题意;
选项 D ,假设 a 为 4,4%4=0 , a-a%4+4=8 , 8 虽然满足大于等于 a 且是 4 的倍数,
但不是满足条件的整数中最小的,排除 D ;
所以本题正确答案为 C 。
13. 在下列代码的横线处填写(),可以使得输出是 “2010” 。

A.a+b
B.(a+b)*100
C.b*100+a
D.a*100+b
【答案】 D
【考纲知识点】基本运算(一级)
【解析】由于题目中没有分支、循环语句,可以尝试由结果反推。已知在第 8
行,输出“ 2010 ”,因此此时 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 。
14. 在下列代码的横线处填写(),可以使得输出是 “1248” 。

A.i++
B.i*=2
C.i+=2
D.i*2
【答案】 B
【考纲知识点】控制语句结构(一级)
【解析】本题考察控制语句结构中的循环结构。变量 i 的初始值是 1 ,循环条件
是 i 小于等于 8 ,循环范围是从 1 到 8 ,循环体中输出 i ,得到的输出是 1248 ,规
律是在前一个的基础上乘 2 ,每次 i*2 之后赋给 i ,所以本题正确答案为 B 。
15. 执行以下 C++ 语言程序后,输出结果是()。

A.210
B.113
C.98
D.15
【答案】 C
【考纲知识点】控制语句结构(一级)
【解析】本题考察循环结构和选择结构。循环范围是从 1 到 20 ,每次循环结束
后 i++ , i 自增 1 ;循环内判断当前数是 3 或者是 5 的倍数,就将 i 累加到 sum 当
中,故从 1 到 20 ,满足条件的数有 35691012151820 ,相加结果为 98 ,所以
本题正确答案为 C 。
二、判断题(每题2分,共20分)
题目 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | √ | × | × | √ | × | × | × | × | √ | √ |
1. 在 Windows 系统中通过键盘完成对选定文本移动的按键组合是先 Ctrl+X ,移动
到目标位置后按 Ctrl+V 。
【答案】 √
【考纲知识点】计算机基础(一级)
【解析】本题考察计算机基础中快捷键的使用。 Ctrl+X 表示剪切文件 ( 复制并从原
位置删除 ) , Ctrl+V 表示粘贴所剪切的文件。所以本题正确。
2. 程序员用 C 、 C++ 、 Python 、 Scratch 等编写的程序能在 CPU 上直接执行。
【答案】 ×
【考纲知识点】计算机基础(一级)
【解析】本题属于对编程语言特点的考察。题目中所列举的编程语言,均无法在
CPU 上直接执行,而是需要通过各自的方式,转换成机器语言后才能被 CPU 识
别和执行,所以本题错误。
3. 在 C++ 语言中,注释不宜写得过多,否则会使得程序运行速度变慢。
【答案】 ×
【考纲知识点】计算机编程环境(一级)
【解析】本题考察计算机的编程环境。注释信息是写在代码当中方便程序阅读者
理解代码的,养成书写注释的好习惯能够为编写更大规模的程序及团队合作打好
基础。注释信息会在编译过程中被去掉,不会产生机器指令,也就不会影响程序
运行速度,所以本题错误。
4. 在 C++ 语言中,标识符中可以有数字,但不能以数字开头。
【答案】 √
【考纲知识点】变量的定义与使用(一级)
【解析】本题考察 C++ 语言中变量的定义与使用。根据变量的命名规则: 1. 只能
包含大小写字母、数字、下划线; 2. 必须以大小写字母或者下划线开头; 3. 不能
使用 C++ 的关键字。故标识符中可以有数字,但不能以数字开头,所以本题正确。
5.'3' 是一个 int 类型常量。
【答案】 ×
【考纲知识点】基本数据类型(一级)
【解析】本题主要考察基本数据类型。 int 是整型,例如 3 是一个 int 类型常量。
但 3 加上单引号之后 '3' 在 C++ 语言中表示字符,它是 char 类型常量。所以本题错
误。
6.if 语句中的条件表达式的结果必须为 bool 类型。
【答案】 ×
【考纲知识点】控制语句结构(一级)
【解析】本题主要考察控制语句结构。 if 语句的条件表达式不一定是 bool 类型,
也可能是其他类型,任何非零值都会被视为真,而零值会被视为假。例如,如果
a 为 int 类型变量,则 if(a); 是否符合 C++ 语法的 if 语句,表示判断 a 是否为 0 :
a 不等于 0 时,则视为真, if 条件成立;反之,如果 a 等于 0 ,则视为假, if 条件
不成立。但 a 的类型为 int 类型,并不是 bool 类型,所以本题错误。
7.for 语句的循环体至少会执行一次。
【答案】 ×
【考纲知识点】控制语句结构(一级)
【解析】本题主要考察 for 循环结构, for 循环分四步走: 1. 执行第一个分号前
的初始表达式; 2. 判断两个分号之间的循环条件表达式结果是否为真; 3. 执行
循环体; 4. 执行第二个分号后的步进表达式,并回到第 2 步重新判断。其中第 2
步,如果执行初始表达式后的状态循环条件表达式为假,则不会执行循环体。此
时循环体一次也没有执行就结束了循环,所以本题错误。
8. 如果 a 为 int 类型的变量,则赋值语句 a=a+3; 是错误的,因为这条语句会导
致 a 无意义。
【答案】 ×
【考纲知识点】变量的定义与使用(一级)
【解析】本题主要考察变量的定义与使用。尽管数学上 a=a+3 是无解的,但在
C++ 语言中 a=a+3 并不表示方程或恒等式。 a 为 int 类型的变量,执行 a=a+3; ,会
让 a 的值变为在原值的基础上增加 3 ,不会导致 a 无意义。所以本题错误。
9. 如果 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) 的结果总是相同的,所以本
题正确。
10. 表达式 (3.5*2) 的计算结果为 7.0 ,且结果类型为 double 。
【答案】 √
【考纲知识点】基本运算(一级)
【解析】本题考察了基本运算中的算术运算,在 C++ 语言中, 3.5 为 double 类型
常量, 2 为 int 类型的常量, double 类型与 int 类型做乘法运算的结果是 double
类型,结果为 7.0 ,所以本题正确。
三、编程题(每题25分,共50分)
1.每月天数
【问题描述】
小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编
程方法求出给定的月份有多少天。你能做到吗?
【 输入描述】
输入一行,包含两个整数,分别表示一个日期的年、月。
【 输出描述】
输出一行,包含一个整数,表示输入月份有多少天。
【 样例输入1 】
2022 1
【 样例输出1 】
31
【样例输入 2 】
2020 2
【样例输出 2 】
29
【题目大意】条件判断问题,主要分清平年和闰年,平年 2 月 28 天,闰年 2 月
29 天,其余按照大小月取分,输出对应的天数。
【考纲知识点】基本数据类型、控制语句结构、输入输出语句、变量的定义与使
用(一级)
【解题思路】
1. 定义变量:年份 y 、月份 m 为 int 类型、判断是否为闰年的 bool 类型 leap 并赋
值为 false (一开始让它为平年);
2. 输入年份、月份;
3. 判断是否为闰年,如果是 400 的倍数,或者是 4 的倍数但不是 100 的倍数,就
是闰年,将 leap 改为 true ;
4. 判断是否为大月: 1 、 3 、 5 、 7 、 8 、 10 、 12 月为大月,输出 31 ;小月: 4 、 6 、
9 、 11 月为小月,输出 30 ;如果不是大月也不是小月,看下是否为闰年,闰年输
出 29 ,否则输出 28 。
【参考程序】

2.长方形面积
【问题描述】
小明刚刚学习了如何计算长方形面积。他发现,如果一个长方形的长和宽都
是整数,它的面积一定也是整数。现在,小明想知道如果给定长方形的面积,有
多少种可能的长方形,满足长和宽都是整数?
如果两个长方形的长相等、宽也相等,则认为是同一种长方形。约定长方形
的长大于等于宽。正方形是长方形的特例,即长方形的长和宽可以相等。
【输入描述】
输入一行,包含一个整数,表示长方形的面积。约定 2 ≤ A ≤ 1000 。
【输出描述】
输出一行,包含一个整数,表示有种可能的长方形。
【样例输入1 】
4
【样例输出1】
2
【样例解释1 】
2 种长方形面积为 4 ,它们的长宽分别为 2 x 2 , 4 x 1 。
【样例输入2】
6
【样例输出2】
2
【样例解释 2 】
2 种长方形面积为 6 ,它们的长宽分别为 3 x 2 , 6 x 1 。
【题目大意】统计长方形的个数。两个长方形的长和宽相等算一种情况,所以规
定长大于宽;长和宽相等是正方形,是长方形的特例,算一种情况。统计完个数
之后输出。
【考纲知识点】变量的定义与使用、控制语句、基本运算、输入输出语句(一级)
【解题思路】
1. 定义变量:面积 area 、计数变量 cnt 、宽 w ;
2. 利用循环列举所有宽的可能性,从 1 开始,到宽 * 宽小于等于面积即可,后面
大于宽的就是长了,和前面统计过的算一种情况,所以不用往后遍历。
3. 每次循环判断面积对宽取余是不是为 0 ,如果为 0 ,说明长、宽都是整数,满
足题意,计数变量 cnt++ ;
4.for 循环结束后输出计数变量 cnt 。
【参考程序】
