image

编辑人: 人逝花落空

calendar2025-05-02

message5

visits399

2023年6月CCF-GESP编程能力等级认证C++编程一级真题答案及解析

一、单选题

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

A 麦克风

B 音箱

C 打印机

D 显示器

解析:【喵呜刷题小喵解析】计算机的输出设备是指将计算机处理后的信息以人们能够识别的形式表现出来的设备。常见的计算机输出设备包括显示器、打印机、音箱等。麦克风是一种输入设备,用于将声音信号转换为电信号输入到计算机中,不属于输出设备。因此,选项A“麦克风”是不属于计算机输出设备的。

2、ChatGPT 是 OpenAI 研发的聊天机器人程序,它能通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,完成很多工作。请你猜猜看,下面任务中,ChatGPT 不能完成的是()。

A 改邮件

B 编剧本

C 擦地板

D 写代码

解析:【喵呜刷题小喵解析】:ChatGPT是一款聊天机器人程序,它可以通过理解和学习人类的语言来进行对话,并根据聊天的上下文进行互动。然而,擦地板是一项物理任务,需要实际的操作和体力,而ChatGPT作为一个聊天机器人程序,无法进行这样的物理操作。因此,ChatGPT不能完成的是擦地板。

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

A double

B float

C char

D int

解析:【喵呜刷题小喵解析】:常量'3'是一个整数,因此它的数据类型是int。在C语言中,字符型数据(char)通常用于存储ASCII字符,而不是整数。虽然字符型数据也可以存储数字,但它通常用于存储单个字符,如字母、数字或符号。因此,选项C不正确。double和float都是浮点型数据类型,用于存储带有小数点的数值,它们也不适用于存储整数常量'3'。因此,选项A和B也不正确。

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

A 变量可以没有定义

B 对一个没有定义的变量赋值,相当于定义了一个新变量

C 执行赋值语句后,变量的类型可能会变化

D 执行赋值语句后,变量的值可能不会变化

解析:【喵呜刷题小喵解析】:在C++语言中,使用变量之前,需要先声明变量。所以选项A中的"变量可以没有定义"是不正确的。对于选项B,对一个没有定义的变量赋值并不能使其变为已定义的变量,所以选项B是错误的。在C++语言中,变量的类型在声明时已经确定,无法改变。所以选项C中的"执行赋值语句后,变量的类型可能会变化"是不正确的。选项D中的"执行赋值语句后,变量的值可能会变化"是正确的,因为赋值语句可以改变变量的值。因此,正确答案是D。

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

A number_of_Chinese_people_in_millions

B 360AntiVirus

C Man&Woman

D break

解析:【喵呜刷题小喵解析】在C++中,标识符是用来标识变量名、函数名、类名等名称的。合法的C++标识符必须满足以下规则:

1. 必须以字母(a~z,A~Z)或下划线(_)开头,不能以数字开头。
2. 可以由字母、数字和下划线组成。
3. 不能是C++的保留关键字。

根据以上规则,我们来分析每个选项:

A. "number_of_Chinese_people_in_millions":这是一个合法的C++标识符,因为它以字母开头,只包含字母、数字和下划线,且不是C++的保留关键字。

B. "360AntiVirus":这不是一个合法的C++标识符,因为它以数字开头。

C. "Man&Woman":这不是一个合法的C++标识符,因为它包含了特殊字符"&"。

D. "break":这不是一个合法的C++标识符,因为它是C++的保留关键字。

因此,只有选项A可以作为C++的标识符。

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

A double

B else

C while

D endl

解析:【喵呜刷题小喵解析】C++语言的关键字是一些预先定义的,具有特定含义的单词,这些单词在编写C++程序时必须使用。在给定的选项中,double、else和while都是C++语言的关键字。然而,endl并不是C++的关键字,它是C++标准库中的一个操作符,用于输出流中,表示“end line”,用于在输出中插入一个新行。因此,选项D "endl"不是C++语言的关键字。

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

A a = (b == c);

B b = 5.5;

C c = a + b + c;

D a + c = b + c;

解析:【喵呜刷题小喵解析】在C++中,赋值语句的格式应该是 "变量 = 表达式;",而选项D "a + c = b + c;" 不是一个有效的赋值语句,因为它违反了 "变量 = 表达式;" 的格式,等号左边不是变量,因此不符合C++语法。选项A "a = (b == c);" 是正确的赋值语句,将布尔表达式 "b == c" 的结果(true或false)赋值给变量a。选项B "b = 5.5;" 也是正确的赋值语句,将浮点数5.5赋值给变量b。选项C "c = a + b + c;" 也是正确的赋值语句,将表达式 "a + b + c" 的结果赋值给变量c。

8、如果用一个 int 类型的变量 a 表达正方形的边长,则下列哪个表达式不能用来计算正方形的面积?()

A a * a

B 1 * a * a

C a ^ 2

D a * 2 * a / 2

解析:【喵呜刷题小喵解析】题目要求用一个 int 类型的变量 a 表达正方形的边长,并找出不能用来计算正方形面积的表达式。

A选项:a * a,这是计算正方形面积的正确表达式,因为正方形的面积是边长的平方。

B选项:1 * a * a,这个表达式与 A 选项等价,都是计算正方形面积的正确表达式。

C选项:a ^ 2,这个表达式在大多数编程语言中并不表示乘方运算,而是表示按位异或运算。因此,这个表达式不能用来计算正方形的面积。

D选项:a * 2 * a / 2,这个表达式也可以简化为 a * a,是计算正方形面积的正确表达式。

因此,不能用来计算正方形面积的表达式是 C 选项。

9、表达式(4 * (11 + 12) / 4)的计算结果为()。

A 47

B 20

C 23

D 56

解析:【喵呜刷题小喵解析】首先,我们需要按照运算的优先级,先计算括号内的内容。括号内为11+12=23,所以表达式变为4 * 23 / 4。接下来,我们需要进行乘法和除法运算,4 * 23 = 92,92 / 4 = 23。因此,表达式(4 * (11 + 12) / 4)的计算结果为23,对应选项C。

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

A 1

B 2

C 3

D 4

解析:【喵呜刷题小喵解析】:在Python中,`%=`是取模赋值运算符。对于`a %= 4`,它的意思是将`a`除以`4`的余数赋值给`a`。因为6除以4的余数是2,所以执行`a %= 4;`后,`a`的值会是2。因此,正确答案是C。

11、如果 a 和 b 均为 int 类型的变量,下列表达式能正确判断“a 等于 0 且 b等于 0”的是()。

A (a == b == 0)

B !(a || b)

C (a + b == 0)

D (a == 0) + (b == 0)

解析:【喵呜刷题小喵解析】在C语言中,`(a == b == 0)`的优先级是`(a == b)`先执行,然后再判断结果是否为0,这种写法在逻辑上是有问题的,因此选项A错误。`!(a || b)`这个表达式会判断`a`或`b`中是否有一个非0的值,如果有,结果为`true`,只有当`a`和`b`都为0时,结果为`false`,这种逻辑和题目要求不符,因此选项B错误。`(a + b == 0)`这个表达式只有当`a`和`b`的和为0时,才能判断`a`和`b`都为0,但是有可能`a`和`b`一正一负,和为0,这并不能判断`a`和`b`都为0,因此选项C错误。`(a == 0) + (b == 0)`这个表达式只有当`a`和`b`都为0时,结果才为2,其余情况结果都为1或0,这正好符合题目要求,因此选项D正确。

12、如果 a 和 b 为 int 类型的变量,且值分别为 7 和 2,则下列哪个表达式的计算结果不是 3.5?()

A 0.0 + a / b

B (a + 0.0) / b

C (0.0 + a) / b

D a / (0.0 + b)

解析:【喵呜刷题小喵解析】在整数除法中,如果除数和被除数都是整数,那么结果也是整数,小数部分会被舍去。所以,表达式 `a / b` 的结果是 3,而不是 3.5。而在其他三个选项中,至少有一个操作数是小数(0.0),所以它们会进行浮点数除法,结果是 3.5。因此,只有选项D的表达式计算结果不是3.5。

13、在下列代码的横线处填写(C),使得输出是“20 10”。

A a + b

B b

C a - b

D b - a

解析:【喵呜刷题小喵解析】:根据题目,我们需要找到一个表达式,使得当a=20,b=10时,输出结果为“20 10”。

A选项:a + b = 20 + 10 = 30,与题目要求不符。

B选项:b = 10,与题目要求不符。

C选项:a - b = 20 - 10 = 10,不符合题目要求。

D选项:b - a = 10 - 20 = -10,与题目要求不符。

由上述分析可知,没有一个选项能直接得到“20 10”的结果。但如果我们将C选项的表达式a - b的结果取反,即-(a - b),当a=20,b=10时,结果为-(20 - 10) = -10,再取反得到10,与题目要求的第二个数字相符。因此,可能是题目描述有误,正确答案应为C,但在使用时需要对结果取反才能得到“20 10”。

注意:上述解析仅是基于题目的现有信息进行的推测,题目描述可能存在问题,因此请以实际情况为准。如果题目描述有误或存在歧义,请向出题者反馈。

14、在下列代码的横线处填写(),可以使得输出是“147”。

A i % 2 == 1

B i % 3 == 1

C i = i + 3

D i + 3

解析:【喵呜刷题小喵解析】:根据题目,我们需要找到一个表达式,使得当i从1开始,依次执行这个表达式后,最后得到的结果是147。

A选项:i % 2 == 1,这是一个判断表达式,返回的是True或False,无法改变i的值。

B选项:i % 3 == 1,这个表达式表示i除以3的余数为1,当i从1开始,依次执行这个表达式,可以得到1,4,7,10,13,16,...,每次增加3。

C选项:i = i + 3,这个表达式将i的值增加3,但题目要求的是依次执行一个表达式,这个选项并不满足。

D选项:i + 3,这个表达式只是返回i+3的值,并没有改变i的值。

因此,只有B选项满足题目要求,当i从1开始,依次执行i % 3 == 1,可以得到1,4,7,10,13,16,...,最后得到的结果是147。

15、执行以下 C++语言程序后,输出结果是()。

A 63

B 98

C 113

D 无法确定

解析:【喵呜刷题小喵解析】

该程序涉及到指针和数组的操作,主要考察的是指针和数组的关系。

首先,程序定义了一个整型数组`a`,并初始化了它的前三个元素。然后,定义了一个指向整型数组的指针`p`,并将`p`指向数组`a`的第二个元素。

接着,程序执行了`*p += 10;`这行代码,这行代码的意思是将指针`p`所指向的元素的值加10。由于`p`指向的是数组`a`的第二个元素,所以这行代码实际上是将数组`a`的第二个元素的值加10。

最后,程序输出了数组`a`的所有元素。由于数组`a`的前三个元素分别被初始化为1、2、3,所以输出应该是1、12、3。因此,输出的结果并不是固定的数值,而是依赖于数组`a`的初始值,所以答案是“无法确定”。

二、判断题

16、计算机硬件主要包括运算器、控制器、存储器、输入设备和输出设备。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:计算机硬件主要包括运算器、控制器、存储器、输入设备和输出设备。这是计算机硬件的基本组成部分,这些部分共同协作,使得计算机能够执行各种任务。因此,该题目的陈述是正确的。

17、诞生于 1958 年的 103 机是中国第一台通用数字电子计算机,比 1946 年在美国诞生的第一台通用电子计算机 ENIAC 晚了十多年。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:题目中提到“诞生于 1958 年的 103 机是中国第一台通用数字电子计算机”,而“比 1946 年在美国诞生的第一台通用电子计算机 ENIAC 晚了十多年”这一描述也是正确的。因此,这个判断题是正确的,即选项 A 是正确的。

18、在 C++语言中,计算结果必须存储在变量中才能输出。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在C++语言中,计算结果确实需要存储在变量中才能输出。这是因为在C++中,变量是存储数据的基本单元,而计算结果通常是数据的一种形式。在将计算结果输出到控制台或进行其他操作之前,需要将结果存储在变量中。因此,选项A是正确的。

19、在 C++语言中,标识符的命名不能完全由数字组成,至少有一个字母就可以。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在C++语言中,标识符的命名规则是:标识符可以由字母(a-z,A-Z)、数字(0-9)和下划线(_)组成,但不能以数字开头。因此,标识符的命名不能完全由数字组成,至少需要一个字母。所以,题目的说法是正确的。

20、10 是一个 int 类型常量。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在大多数编程语言中,10 是一个整数(int)类型的常量。整数常量是表示整数的数值,它们不包含小数部分,并且可以直接赋值给整数类型的变量。因此,这个判断题是正确的。

21、if 语句可以没有 else 子句。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在编程语言中,if语句用于基于某个条件进行代码块的选择执行。如果条件为真,那么执行if语句后面的代码块。如果条件为假,那么可以选择执行else子句中的代码块(如果有的话)。然而,else子句并不是if语句的必要部分,也就是说,if语句可以没有else子句。因此,题目的陈述是正确的。

22、do ... while 语句的循环体至少会执行一次。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:do...while语句是一种后测试循环结构,其执行流程是:首先执行循环体,然后判断条件是否满足,如果条件满足则继续执行循环体,否则退出循环。因此,无论条件是否满足,循环体至少会执行一次。所以,题目中的说法是正确的。

23、如果 a 和 b 为 int 类型的变量,则表达式 a = b 可以判断 a 和 b 是否相等。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在大多数编程语言中,赋值语句 `a = b` 的功能是将变量 `b` 的值赋给变量 `a`,而不是比较 `a` 和 `b` 是否相等。要判断 `a` 和 `b` 是否相等,应该使用等于运算符 `==`,如 `a == b`。因此,选项 A 是错误的。

24、如果 a 为 int 类型的变量,则表达式(a % 4 == 2)可以判断 a 的值是否为偶数。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:对于int类型的变量a,表达式(a % 4 == 2)并不能判断a的值是否为偶数。因为当a为偶数时,a除以2的余数才为0,而题目中的表达式是判断a除以4的余数是否等于2,这并不能准确判断a是否为偶数。因此,该表达式不能用来判断a是否为偶数。

25、表达式(37 / 4)的计算结果为 9,且结果类型为 int。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:表达式(37 / 4)的计算结果实际上不是整数9。在Python等编程语言中,当两个操作数都是整数时,除法运算结果也会是整数,且只保留商的整数部分。因此,(37 / 4) 的结果应为 9 余 1,而不是 9。即使忽略余数,结果的整数部分也应该是 9,而不是 9。所以,这个表达式的计算结果并不是整数9,题目的说法是错误的。

三、实操题

26、时间规划

【问题描述】

小明在为自己规划学习时间。现在他想知道两个时刻之间有多少分钟,你能通过编程帮他做到吗?

【输入描述】

输入 4 行,第一行为开始时刻的小时,第二行为开始时刻的分钟,第三行为结束时刻的小时,第四行为结束时刻的分钟。

输入保证两个时刻是同一天,开始时刻一定在结束时刻之前。时刻使用 24小时制,即小时在 0 到 23 之间,分钟在 0 到 59 之间。

【输出描述】

输出一行,包含一个整数,从开始时刻到结束时刻之间有多少分钟。


【样例输入 1】

9
5
9
6

【样例输出 1】

1

【样例输入 2】

9
5
10
0

【样例输出 2】

55


参考答案:根据输入,我们可以先计算开始时刻的总分钟数,再计算结束时刻的总分钟数,然后计算两个时刻之间的分钟数。具体步骤如下:1. 将开始时刻的小时和分钟相加,得到开始时刻的总分钟数 = 开始时刻的小时 * 60 + 开始时刻的分钟。2. 将结束时刻的小时和分钟相加,得到结束时刻的总分钟数 = 结束时刻的小时 * 60 + 结束时刻的分钟。3. 计算两个时刻之间的分钟数 = 结束时刻的总分钟数 - 开始时刻的总分钟数。4. 如果计算出来的分钟数小于0,则说明开始时刻在结束时刻之后,不符合题目要求,应该输出错误信息。5. 否则,输出从开始时刻到结束时刻之间的分钟数。

解析:【喵呜刷题小喵解析】:
这个题目是一个关于时间计算的问题,需要我们根据输入的开始时刻和结束时刻,计算出两个时刻之间的分钟数。

首先,我们需要将输入的开始时刻和结束时刻的小时和分钟分别相加,得到两个时刻的总分钟数。然后,我们计算两个时刻之间的分钟数,即结束时刻的总分钟数减去开始时刻的总分钟数。最后,我们需要检查计算结果是否符合题目要求,如果不符合,应该输出错误信息。

在这个问题中,需要注意的是输入保证两个时刻是同一天,开始时刻一定在结束时刻之前。因此,我们可以直接进行时间计算,不需要考虑日期的问题。另外,题目要求使用24小时制,即小时在0到23之间,分钟在0到59之间,因此我们需要对输入进行合法性检查,确保输入符合题目要求。

在编程实现时,我们可以使用任何编程语言,只需要按照上述步骤进行计算即可。具体实现方式可以参考常见的编程语言教程或者相关的算法书籍。

27、累计相加

【问题描述】

输入一个正整数n,求形如:1+(1+2)+(1+2+3)+(1+2+3+4)+…⋯(1+2+3+4+5+…⋯n)累计相加。

【输入描述】

输入一个正整数。约定 1 ≤n≤ 100。

【输出描述】

输出累计相加的结果。


【样例输入 1】

3

【样例输出 1】

10


【样例输入 2】

4

【样例输出 2】

20


【样例输入 3】

10

【样例输出 3】

220


参考答案:对于输入的正整数n,我们可以使用等差数列求和公式来计算累计相加的结果。首先,我们需要计算前n个自然数的和,即1+2+3+...+n。这可以使用等差数列求和公式S = n*(n+1)/2来计算。然后,我们需要计算前n个自然数的和的前n个和,即(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+n)。这可以通过将每个和看作是一个等差数列的和,然后使用等差数列求和公式来计算。具体来说,对于第i个和,它的首项是i,项数是i,公差是1。因此,第i个和可以使用等差数列求和公式S = i*(i+1)/2来计算。最后,我们需要将前n个这样的和相加,即1*2/2 + 2*3/2 + ... + n*(n+1)/2。这可以使用等差数列求和公式来计算,公式为S = n*(n+1)*(n+2)/6。因此,累计相加的结果为n*(n+1)*(n+2)/6。

解析:【喵呜刷题小喵解析】:
这个题目要求计算形如1+(1+2)+(1+2+3)+(1+2+3+4)+…⋯(1+2+3+4+5+…⋯n)的累计相加的结果。

我们可以将这个问题分解为两个部分:

1. 计算前n个自然数的和,即1+2+3+...+n。这可以使用等差数列求和公式S = n*(n+1)/2来计算。
2. 计算前n个自然数的和的前n个和,即(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+n)。这可以通过将每个和看作是一个等差数列的和,然后使用等差数列求和公式来计算。

具体来说,对于第i个和,它的首项是i,项数是i,公差是1。因此,第i个和可以使用等差数列求和公式S = i*(i+1)/2来计算。

最后,我们需要将前n个这样的和相加,即1*2/2 + 2*3/2 + ... + n*(n+1)/2。这可以使用等差数列求和公式来计算,公式为S = n*(n+1)*(n+2)/6。

因此,累计相加的结果为n*(n+1)*(n+2)/6。

在编程实现时,我们可以直接使用这个公式来计算结果,而不需要使用循环或递归来遍历所有的和。这样可以提高程序的效率和可读性。

喵呜刷题:让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2023年6月CCF-GESP编程能力等级认证C++编程一级真题答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share