2023 年 3 月 GESP C++ 一级真题解析

一、单选题(每题 2 分,共 30 分)
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. 在下列代码的横线处填写(),可以使得输出是 “20 10”
A. a + b
B. (a + b) * 100
C. b * 100 + a
D. a * 100 + b
【答案】 D
【考纲知识点】基本运算(一级)
【解析】由于题目中没有分支、循环语句,可以尝试由结果反推。已知在第 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。
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 ,满足条件的数有 3 5 6 9 10 12 15 18 20 ,相加结果为 98,所以 本题正确答案为 C
二、判断题(每题 2 分,共 20 分)
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
【参考程序】
#include<iostream>
using namespace std;
int main(){
	int y,m;
    cin>>y>>m;
    if(m==2){
        if(y%4==0&&y%100!=0||y%400==0){ //闰年
        	cout<<29;
		}else{
			cout<<28;
		}
    }else if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
        cout<<31;
    }else {
         cout<<30;
    }
	return 0;
}

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
【参考程序】
#include <iostream>
using namespace std;
int main() {
	int area = 0, cnt = 0; //面积 area、计数变量 cnt
	cin >> area; 
    //枚举所有可能的宽度,宽从 1 开始到宽*宽<=面积
	for (int w = 1; w * w <= area; w++) { 
		if (area % w == 0) //验证宽度是否可行
			cnt++;
	}
	cout << cnt << endl; //输出 cnt
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值