CCF编程能力等级认证GESP—C++1级—20230318

2023-12-13 18:09:57

单选题(每题 2 分,共 30 分)

1、以下不属于计算机输入设备的有( )。

A.键盘
B.音箱
C.鼠标
D.传感器

2、计算机系统中存储的基本单位用 B 来表示,它代表的是( )。

A. Byte
B. Block
C. Bulk
D. Bit

3、常量 7.0 的数据类型是( )。

A. double
B. float
C. void
D. int

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

A. 变量定义时可以不初始化
B. 变量被赋值之后的类型不变
C. 变量没有定义也能够使用
D. 变量名必须是合法的标识符

5、以下不可以作为 C++标识符的是()。以下不可以作为 C++标识符的是( )。

A. x321
B. 0x321
C. x321_ 
D. _x321

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

A. int
B. for
C. do
D. cout

7、如果 a、b 和 c 都是 int 类型的变量,下列哪个语句不符合C++语法?( )

A. c = a + b;
B. c += a + b;
C. c = a = b;
D. c = a ++ b;

8、如果用两个 int 类型的变量 a 和 b 分别表达长方形的长和宽,则下列哪个表达式不能用来计算长方形的周长?( )

A. a + b * 2
B. 2 * a + 2 * b
C. a + b + a + b
D. b + a * 2 + b

9、表达式((3 == 0) + ‘A’ + 1 + 3.0)的结果类型为( )。

A. double
B. int
C. char
D. bool

10、如果 a 为 int 类型的变量,且 a 的值为 6,则执行 a *= 3;之后,a 的值会是( )。

A. 3
B. 6
C. 9
D. 18

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

12、如果 a 为 int 类型的变量,下列哪个表达式可以正确求出满足"大于等于a且是 4 的倍数"的整数中最小的?( )

A. a * 4
B. a / 4 * 4
C. (a + 3) / 4 * 4
D. a - a % 4 + 4

13、在下列代码的横线处填写( ),可以使得输出是"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

14、在下列代码的横线处填写( ),可以使得输出是"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

15、执行以下 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

判断题(每题 2 分,共 20 分)

1、在 Windows 系统中通过键盘完成对选定文本移动的按键组合是先Ctrl+X,移动到目标位置后按 Ctrl+V。( )

2、程序员用 C、C++、Python、Scratch 等编写的程序能在CPU 上直接执行。( )

3、在 C++语言中,注释不宜写得过多,否则会使得程序运行速度变慢。( )

4、在 C++语言中,标识符中可以有数字,但不能以数字开头。( )

5、'3’是一个 int 类型常量。( )

6、if 语句中的条件表达式的结果必须为 bool 类型。( )

7、for 语句的循环体至少会执行一次。( )

8、如果 a 为 int 类型的变量,则赋值语句 a = a + 3;是错误的,因为这条语句会导致 a 无意义。( )

9、如果 a 为 int 类型的变量,则表达式(a / 4 == 2)和表达式(a >= 8 &&a <= 11)的结果总是相同的。( )

10、表达式(3.5 * 2)的计算结果为 7.0,且结果类型为 double。( )

编程题 (每题 25 分,共 50 分)

每月天数

【问题描述】
小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编程方法求出给定的月份有多少天。你能做到吗?
【输入描述】
输入一行,包含两个整数,分别表示一个日期的年、月。
【输出描述】
输出一行,包含一个整数,表示输入月份有多少天。
【样例输入 1】
2022 1
【样例输出 1】
31
【样例输入 2】
2020 2
【样例输出 2】
29

长方形面积

【问题描述】
小明刚刚学习了如何计算长方形面积。他发现,如果一个长方形的长和宽都是整数,它的面积一定也是整数。现在,小明想知道如果给定长方形的面积,有多少种可能的长方形,满足长和宽都是整数?
如果两个长方形的长相等、宽也相等,则认为是同一种长方形。约定长方形的长大于等于宽。正方形是长方形的特例,即长方形的长和宽可以相等。
【输入描述】
输入一行,包含一个整数,表示长方形的面积。约定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、
【答案】B
【考纲知识点】计算机基础(一级)
【解析】本题属于考察计算机基础知识中的“输入”和“输出”概念;“输入”指外界向机器内部传递信息,“输出”指计算机内部信息向外界展示。此题中,“音箱”属于向外部播放声音,故属于输出概念,所以本题正确答案为B。

2、
【答案】A
【考纲知识点】计算机基础(一级)
【解析】本题属于考察计算机基础知识中,关于存储的基本单位;计算机中,表示存储大小的最小单位为“字节”,英文为“Byte”,表示一个字节存储空间大小的单位,用大写字母 B 表示,所以本题正确答案为 A。

3、
【答案】A
【考纲知识点】基本数据类型(一级)
【解析】本题考察考生对于 C++基本数据类型的了解:关于基本数据类型,有整型 int,浮点型 double、float,字符型 char,布尔型 bool,本题中7.0 是小数形式,属于浮点型,C++中浮点型默认是 double,所以本题正确答案为A。

4、
【答案】C
【考纲知识点】变量的定义与使用(一级)
【解析】本题考察 C++语言中变量的定义与使用;关于变量的定义与使用,变量在定义时可以不初始化,变量名必须是合法的标识符,并且变量被赋值之后的类型不变,均不符合题意,故 A、B、D 排除;选项 C 变量必须定义才能使用,没有定义变量就使用会造成编译错误,所以本题正确答案为C。

5、
【答案】B
【考纲知识点】变量的定义与使用(一级)
【解析】本题察 C++语言中变量的定义与使用;根据变量的命名规则:1.只能包含大小写字母、数字、下划线;2.必须以大小写字母或者下划线开头;3.不能使用 C++的指令或关键字。选项 B 为 0x321,以数字开头,违反变量的命名规则,所以本题正确答案为 B。

6、
【答案】D
【考纲知识点】计算机基础与编程环境(一级)
【解析】本题考察输入输出语句及变量的定义与使用两部分内容;输入输出的cin 和 cout 都是 C++的常对象,但不是关键字。C++的关键字如下图所示:所以本题正确答案为 D。

在这里插入图片描述

7、
【答案】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、
【答案】A
【考纲知识点】基本运算(一级)
【解析】本题主要考察基本运算中的算术运算;长方形的周长公式是(长+宽) * 2 或者长 * 2 + 宽 * 2 或四条边相加;选项 A 根据运算规则,先算乘法b * 2,后算加法 a + b * 2,不能用来计算长方形的周长,所以本题正确答案为A。

9、
【答案】A
【考纲知识点】基本运算(一级)
【解析】本题考察 C++基本运算过程中的隐式类型转换;算式中,(3==0)的计算结果为 bool 类型、’A’为 char 类型常量、1 为 int 类型常量、3.0 为double 类型常量,将它们相加时会从低精度的高精度的进行类型转换,最终结果为double类型,所以本题正确答案为 A。

10、
【答案】D
【考纲知识点】基本运算(一级)
【解析】本题考察 C++基本运算;a * = 3 相当于 a = a * 3,a 的值一开始是6,所以6 * 3 = 18,将这个结果再赋给 a,a 的值变为 18,所以本题正确答案为D。

11、
【答案】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、
【答案】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、
【答案】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、
【答案】B
【考纲知识点】控制语句结构(一级)
【解析】本题考察控制语句结构中的循环结构。变量 i 的初始值是1,循环条件是 i 小于等于 8,循环范围是从 1 到 8,循环体中输出 i,得到的输出是1248,规律是在前一个的基础上乘 2,每次 i * 2 之后赋给 i,所以本题正确答案为B。

15、
【答案】C
【考纲知识点】控制语句结构(一级)
【解析】本题考察循环结构和选择结构。循环范围是从1 到20,每次循环结束后 i++,i 自增 1;循环内判断当前数是 3 或者是 5 的倍数,就将i 累加到sum当中,故从 1 到 20,满足条件的数有 3 5 6 9 10 12 15 18 20,相加结果为98,所以本题正确答案为 C。

判断题

1、
【答案】√
【考纲知识点】计算机基础(一级)
【解析】本题考察计算机基础中快捷键的使用。Ctrl+X 表示剪切文件(复制并从原位置删除),Ctrl+V 表示粘贴所剪切的文件。所以本题正确。

2、
【答案】×
【考纲知识点】计算机基础(一级)
【解析】本题属于对编程语言特点的考察。题目中所列举的编程语言,均无法在CPU 上直接执行,而是需要通过各自的方式,转换成机器语言后才能被CPU识别和执行,所以本题错误。

3、
【答案】×
【考纲知识点】计算机编程环境(一级)
【解析】本题考察计算机的编程环境。注释信息是写在代码当中方便程序阅读者理解代码的,养成书写注释的好习惯能够为编写更大规模的程序及团队合作打好基础。注释信息会在编译过程中被去掉,不会产生机器指令,也就不会影响程序运行速度,所以本题错误。

4、
【答案】√
【考纲知识点】变量的定义与使用(一级)
【解析】本题考察 C++语言中变量的定义与使用。根据变量的命名规则:1.只能包含大小写字母、数字、下划线;2.必须以大小写字母或者下划线开头;3.不能使用 C++的关键字。故标识符中可以有数字,但不能以数字开头,所以本题正确。

5、
【答案】×
【考纲知识点】基本数据类型(一级)
【解析】本题主要考察基本数据类型。int 是整型,例如3 是一个int 类型常量。但 3 加上单引号之后’3’在 C++语言中表示字符,它是 char 类型常量。所以本题错误。

6、
【答案】×
【考纲知识点】控制语句结构(一级)
【解析】本题主要考察控制语句结构。if 语句的条件表达式不一定是bool 类型,也可能是其他类型,任何非零值都会被视为真,而零值会被视为假。例如,如果a 为 int 类型变量,则 if (a) ; 是否符合 C++语法的 if 语句,表示判断a 是否为0:a 不等于 0 时,则视为真,if 条件成立;反之,如果 a 等于0,则视为假,if 条件不成立。但 a 的类型为 int 类型,并不是 bool 类型,所以本题错误。

7、
【答案】×
【考纲知识点】控制语句结构(一级)
【解析】本题主要考察 for 循环结构,for 循环分四步走:1. 执行第一个分号前的初始表达式;2. 判断两个分号之间的循环条件表达式结果是否为真;3. 执行循环体;4. 执行第二个分号后的步进表达式,并回到第2 步重新判断。其中第2步,如果执行初始表达式后的状态循环条件表达式为假,则不会执行循环体。此时循环体一次也没有执行就结束了循环,所以本题错误。

8、
【答案】×
【考纲知识点】变量的定义与使用(一级)
【解析】本题主要考察变量的定义与使用。尽管数学上a=a+3 是无解的,但在C++语言中 a=a+3 并不表示方程或恒等式。a 为 int 类型的变量,执行a=a+3;,会让 a 的值变为在原值的基础上增加 3,不会导致 a 无意义。所以本题错误。

9、
【答案】√
【考纲知识点】基本运算(一级)
【解析】本题考察基本运算。由于 a 为 int 类型,表达式a/4 中的除号/为整除运算。因此表达式(a/4==2)表示 a 除以 4 的商为 2,于是a 的值从8 到11 时表达式结果为真,否则为假。这与表达式(a >= 8 && a <= 11)的结果总是相同的,所以本题正确。

10、
【答案】√
【考纲知识点】基本运算(一级)
【解析】本题考察了基本运算中的算术运算,在 C++语言中,3.5 为double 类型常量,2 为 int 类型的常量,double 类型与 int 类型做乘法运算的结果是double类型,结果为 7.0,所以本题正确。

编程题1

【题目大意】条件判断问题,主要分清平年和闰年,平年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;
	bool is_y = false;
	cin >> y >> m;
	if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
		is_y = 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 (is_y)
		cout << 29 << endl;
	else 
		cout << 28 << endl;
	return 0;
}

编程题2

【题目大意】统计长方形的个数。两个长方形的长和宽相等算一种情况,所以规定长大于宽;长和宽相等是正方形,是长方形的特例,算一种情况。统计完个数之后输出。
【考纲知识点】变量的定义与使用、控制语句、基本运算、输入输出语句(一级)
【解题思路】
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;
	return 0;
}

文章来源:https://blog.csdn.net/QD_Jason/article/details/134838373
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。