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++的关键字如下图所示:

2023 年 3 月 GESP 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”。

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

 

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”。

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

 

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++语言程序后,输出结果是() 。

2023 年 3 月 GESP 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 = 0, m = 0;
    cin >> y >> m;
    bool leap = false; // 判断闰年变量 ,初始值为false,意思为是平年
    if (y % 400 == 0)  // 是 400 的倍数为闰年
        leap = true;
    if (y % 4 == 0 && y % 100 != 0) // 是 4 的倍数但不是 100 的倍数为闰年
        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;
}

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;		   // 输入面积
	for (int w = 1; w * w <= area; w++)
	{					   // 宽从 1 开始到宽*宽<=面积
		if (area % w == 0) // 如果面积是宽的倍数,说明满足题意 , cnt++
			cnt++;
	}
	cout << cnt << endl; // 输出 cnt return 0;
}

免责声明

资源均源于互联网收集整理,不保证资源的可用及完整性,仅供个人学习研究,请勿商用。喜欢记得支持正版,若侵犯第三方权益,请及时联系站长删除!

原创文章,作者:青少儿编程网,如若转载,请注明出处:https://www.azmcode.com/4237.html

(0)
青少儿编程网的头像青少儿编程网网站会员
上一篇 2024年12月19日 下午12:01
下一篇 2024年12月29日 上午11:36

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注