2024年03月CCF-GESP编程能力等级认证C++编程一级真题

2024年05月13日

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

第 1 题

C++表达式 (3 - 2) * 3 + 5 的值是( )。

A. -13
B. 8
C. 2
D. 0

答案:B 要计算表达式 (3 - 2) * 3 + 5 的值,我们按照运算顺序(也称为PEMDAS)进行计算:

首先,我们计算括号内的减法:(3 - 2) = 1。 接下来,我们进行乘法运算:1 * 3 = 3。 最后,我们进行加法运算:3 + 5 = 8。 因此,该表达式的值是8。

第 2 题

C++语句 cout << “5%2=” << 5 % 2 执行后的输出是( )。

A. 2 2
B. 1 1
C. 5%2=2
D. 5%2=1

答案:D 在这个语句中,cout 是 C++ 中的输出流对象,<< 是插入运算符,用于将内容插入到输出流中。首先,字符串 “5%2=” 被插入到输出流中,然后 5 % 2 的结果(1)也被插入到输出流中。因此,最终的输出是 “5%2=1”。

第 3 题

执行C++语句 cin >> a 时如果输入5+2,下述说法正确的是( )。

A. 变量a将被赋值为整数7
B. 变量a将被赋值为字符串,字符串内容为5+2
C. 语句执行将报错,不能输入表达式
D. 依赖于变量a的类型。如果没有定义,会有编译错误

答案:D 执行语句 cin >> a 用于从标准输入中读取用户输入并将其赋值给变量 a。

当用户输入 “5+2” 时,cin 将会将整个输入视为一个字符串。然后,根据变量 a 的类型进行处理:

如果变量 a 的类型是整数类型(例如 int),则输入的字符串将被解析为整数值。在这种情况下,变量 a 将被赋值为整数 7。

如果变量 a 的类型是字符串类型(例如 string),则输入的字符串将被直接赋值给变量 a。在这种情况下,变量 a 将被赋值为字符串 “5+2”。

如果变量 a 的类型没有定义或者不符合预期的输入类型,会导致编译错误。

因此,正确答案是 D

第 4 题

下面C++代码执行后的输出是( )。

int a = 1; cout << "a+1= " << a+1 << endl;

A. a+1= 2
B. a+1=2
C. 2=2
D. 2= 2

答案:A 在这段代码中,变量 a 被初始化为整数值 1。然后,输出语句使用 cout 输出字符串 "a+1= ",接着使用表达式 a+1 计算并输出变量 a 加 1 的结果。因此,最终的输出将是 “a+1= 2”。

第 5 题

下面C++代码执行后的输出是( )。

int a = 1; printf("a+1=%d\n", a+1);

A. a+1= 2
B. a+1=2
C. 2=2
D. 2= 2

答案:B 在这段代码中,变量 a 被初始化为整数值 1。然后,使用 printf 函数进行格式化输出,格式字符串 “a+1=%d\n” 中的 %d 表示将要输出一个整数。接着,在逗号后的参数中,使用表达式 a+1 计算变量 a 加 1 的结果,并将该结果作为整数传递给 printf 函数。因此,最终的输出将是 “a+1=2”。

第 6 题

下面C++代码执行时输入21后,有关描述正确的是( )。

int N;
cin >> N;
if(N% 3 == 0)
	cout << "能被3整除";
else if (N % 7 == 0)
	cout << "能被7整除";
else
	cout << "不能被3和7整除";
cout << endl;
A. 代码第4行被执行
B. 第4和第7行代码都被执行
C. 仅有代码第7行被执行
D. 第8行代码将被执行,因为input()输入为字符串

答案:A 根据给定的代码和输入 “21”,执行过程如下:

变量 N 被声明为整数类型。 cin 语句 cin >> N; 从标准输入读取用户输入,并将其赋值给变量 N。在这种情况下,输入为 “21”,因此变量 N 的值为 21。 执行条件判断语句 if(N % 3 == 0)。由于 21 除以 3 的余数为 0,条件成立,进入该分支。 输出语句 cout << “能被3整除”; 被执行,输出 “能被3整除”。 由于已经执行了一个分支,后续的 else if 分支将被跳过。 执行完条件判断语句后,输出 cout << endl; 用于输出换行符。 因此,代码第4行被执行,输出结果为 “能被3整除”。选项 A 正确。

第 7 题

下面C++代码第2行,总共被执行次数是( )。

for(int i=-10; i<10; i++)
	cout << i << " ";
A. 10
B. 19
C. 20
D. 21

答案:C 根据给定的代码,循环将执行从 i = -10 到 i < 10 的迭代。每次迭代时,会执行循环体中的代码,包括输出语句 cout << i << " ";。

循环体中的代码将被执行的次数等于迭代的次数。在这个例子中,初始值是 i=-10,循环条件是 i < 10,每次迭代 i 递增 1。

因此,循环将执行 20 次,输出 -10 到 9 之间的数值,并在每个数值后面输出一个空格。

所以,正确答案是 C. 20。

第 8 题

下面C++代码执行后的输出是( )。

int tnt = 0;
for(int i=0; i<10; i++)
	if(i%3 && i%7)
		tnt +=i;
cout << tnt << endl;
A. 0
B. 7
C. 18
D. 20

答案:D 根据给定的代码,循环将执行从 i=0 到 i < 10 的迭代。在每次迭代时,首先检查条件 if(i%3 && i%7) 是否为真。条件 i%3 表示 i 对 3 求余的结果非零,条件 i%7 表示 i 对 7 求余的结果非零。只有当两个条件都为真时,才会执行 tnt += i;。

在这个例子中,只有 i=0 不满足条件,其他迭代都满足条件。因此,会将满足条件的 i 的值累加到变量 tnt 中。

循环结束后,输出变量 tnt 的值。

计算过程如下: tnt = 0 + 1 + 2 + 4 + 5 + 8 + 10

因此,tnt 的最终值为 30。

所以,正确答案是 D. 30。

第 9 题

下面C++代码执行后的输出是( )。

int N = 10;
while(N){
	N -= 1;
	if(N%3 == 0)
		cout << N << "#";
}
A. 9#6#3#
B. 9#6#3#0#
C. 8#7#5#4#2#1#
D. 10#8#7#5#4#2#1#

答案:B 根据给定的代码,初始值为 N=10。在每次循环迭代时,首先执行 N -= 1; 将变量 N 减去 1。然后,检查条件 if(N%3 == 0) 是否为真。如果 N 对 3 求余的结果为 0,那么将输出 N 的值,后面加上一个井号符号 “#”。

在这个例子中,循环将执行 11 次,每次减去 1,直到 N 变为 0 为止。

循环迭代的过程如下:

N=10,不满足条件,继续下一次迭代。 N=9,满足条件,输出 9,结果为 “9#” N=8,不满足条件,继续下一次迭代。 N=7,不满足条件,继续下一次迭代。 N=6,满足条件,输出 6,结果为 “9#6#” N=5,不满足条件,继续下一次迭代。 N=4,不满足条件,继续下一次迭代。 N=3,满足条件,输出 3,结果为 “9#6#3#” N=2,不满足条件,继续下一次迭代。 N=1,不满足条件,继续下一次迭代。 N=0,满足条件,输出 0,结果为 “9#6#3#0#” 因此,最终的输出结果为 “9#6#3#0#”。

第 10 题

下面C++代码用于判断键盘输入的整数是否为质数。质数是只能被1和它本身整除的数。在横线处应填入代码是( )。

int N;
cin >> N;
int cnt = 0; // 记录N被整除的次数
for(int i=1; i<N+1; i++)
	if(________________)
		cnt +=1;
if(cnt == 2)
	cout << N << "是质数";
else
	cout << N << "不是质数";

A. N % i
B. N % i == 0
C. N / i == 0
D. N / i

答案:B 在横线处需要填入一个条件表达式,用于判断 N 是否能被 i 整除。只有当 N 能被 i 整除时,才会增加计数器 cnt 的值。

根据质数的定义,我们需要使用取余运算符 % 来判断 N 是否能被 i 整除。当 N 能被 i 整除时,余数为 0。

因此,正确的填入代码是 B. N % i == 0。

第 11 题

下面关于整型变量int x的赋值语句不正确是( )。 A. x=(3.16); B. x=3.16; C. x=int(3.16); D. x=3.16 int;

答案:D 整型变量 int 只能存储整数值,不能存储小数或浮点数值。

在给整型变量 x 赋值时,需要使用整数值或进行类型转换以获得整数值。

根据选项进行逐个分析:

A. x = (3.16); 这个赋值语句使用了括号,但由于括号内的值为浮点数,它将被截断为整数。因此,这个赋值语句是有效的,将 3 赋值给 x。

B. x = 3.16; 这个赋值语句将浮点数值 3.16 直接赋给整型变量 x,它会被截断为整数。因此,这个赋值语句是有效的,将 3 赋值给 x。

C. x = int(3.16); 这个赋值语句使用了类型转换函数 int(),将浮点数值 3.16 转换为整数。因此,这个赋值语句是有效的,将 3 赋值给 x。

D. x = 3.16 int; 这个赋值语句中的语法是错误的,没有有效的类型转换或其他操作符。因此,这个赋值语句是不正确的。

所以,不正确的赋值语句是 D. x = 3.16 int。

第 12 题

C++语言中下面可以完成数据输入的语句是( )。

A. printf语句
B. scanf语句
C. default语句
D. cout语句

答案:B 根据选项进行逐个分析:

A. printf语句 printf 是C语言中用于格式化输出的函数,不是用于数据输入的语句。

B. scanf语句 scanf 是C语言中用于格式化输入的函数,可以用于数据输入。但在C++中,更常用的是使用输入流对象 cin 进行数据输入。

C. default语句 default 是用于 switch 语句中的默认情况的标签,不是用于数据输入的语句。

D. cout语句 cout 是C++中用于标准输出的流对象,用于输出数据。它并不用于数据输入。

因此,可以完成数据输入的语句是 B

第 13 题

在Dev C++中对一个写好的C++源文件要生成一个可执行程序需要执行下面哪个处理步骤?( )

A. 创建
B. 编辑
C. 编译
D. 调试

答案:C 在 Dev C++ 中,编译是将源代码翻译成机器可执行的指令的过程。在编译过程中,源代码将被编译器转换为可执行的目标文件。

第 14 题

小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( )

A. 小程序
B. 计时器
C. 操作系统
D. 神话人物

答案:C 鸿蒙是华为开发的一款操作系统,旨在支持多种设备的分布式应用场景。

第 15 题

中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是( )。

A. 制造自动驾驶汽车
B. 创立培训学校
C. 发明汉字激光照排系统
D. 成立方正公司

答案:C

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

第 16 题

在C++代码中变量n被赋值为27,则 cout << n%10 执行后输出的是7。( )

答案:正确 在C++中,% 运算符用于求取两个数相除的余数。当变量n被赋值为27时,表达式 n%10 的值是 7,因为 27 除以 10 的余数是 7。

第 17 题

C++语句 printf(“%d#%d&”,2,3) 执行后输出的是2#3&。 ( )

答案:正确 在C++中,printf 是C语言中用于格式化输出的函数,也可以在C++中使用。在给定的语句 printf(“%d#%d&”,2,3) 中,%d 是格式化输出的占位符,表示输出一个整数。

根据语句中的格式字符串 “%d#%d&”,2 会被替换为 %d 的第一个占位符,而 3 会被替换为 %d 的第二个占位符。因此,执行这个语句后会输出 2#3&。

第 18 题

C++函数scanf()必须含有参数,且其参数为字符串型字面量,其功能是提示输入。( )

答案:错误 C++函数 scanf() 可以不含有参数,并且其参数可以是变量或表达式,而不限于字符串型字面量。scanf() 函数用于从标准输入读取数据,并根据提供的参数进行格式化输入。

第 19 题

C++表达式 “10”*2 执行时将报错,因为 “10” 是字符串类型而2是整数类型,它们数据类型不同,不能在一起运算。( )

答案:正确 在C++中,字符串类型和整数类型是不同的数据类型,它们不能直接进行乘法运算。当我们尝试用乘法运算符 * 对字符串类型 “10” 和整数类型 2 进行运算时,会导致类型不匹配的错误。

如果我们想要将字符串类型的 “10” 转换为整数类型,可以使用适当的函数或方法将其转换为整数,然后进行乘法运算。

所以,判断题的答案是正确的。

第 20 题

在C++中,while可能是死循环,而for循环不可能是死循环。( )

答案:错误

在C++中,无论是 while 循环还是 for 循环,都有可能出现死循环的情况。

死循环指的是循环条件始终为真,导致循环无法终止。这可能是由于编程错误、逻辑错误或意外情况造成的。

以下是可能导致死循环的示例:

while 循环的条件始终为真的情况:

while (true) {
	// 循环体
}

for 循环中没有适当地更新循环变量的情况:
for (int i = 0; i < 10; ) {
	// 循环体
	// 缺少更新循环变量 i 的语句
}

在上述示例中,无论是 while 循环还是 for 循环,都没有明确的终止条件,因此可能导致死循环。

因此,判断题的答案是不正确的。在C++中,无论是 while 循环还是 for 循环,都可能出现死循环的情况。

第 21 题

在C++,break语句用于提前终止当前层次循环,适用于while循环,但不适用于for循环。( )

答案:错误 在C++中,break 语句用于提前终止当前所在层次的循环。它可以用于 while 循环和 for 循环,用于在满足特定条件时立即退出循环。

第 22 题

C++语言中3.0和3的值相等,所以它们占用的存储空间也相同。( )

答案:错误 在C++中,3.0 和 3 是不同的值,并且它们的数据类型也不同。3.0 是一个浮点数(double 类型),而 3 是一个整数(int 类型)。

浮点数和整数在内存中占用的存储空间是不同的。通常情况下,浮点数占用的存储空间比整数要大。

在大多数系统中,浮点数(double 类型)通常占用 8 个字节(64 位),而整数(int 类型)通常占用 4 个字节(32 位)。

虽然 3.0 和 3 在数值上相等,但它们的数据类型和占用的存储空间是不同的。

第 23 题

在C++的程序中,cin是一个合法的变量名。( )

答案:正确 在C++中,cin 是标准输入流对象,用于从用户输入读取数据。它是C++标准库中定义的预定义对象,可以直接在程序中使用。

因此,cin 是一个合法的标识符或变量名,在C++程序中可以用来表示标准输入流对象。

第 24 题

小杨今年春节回奶奶家了,奶奶家的数字电视可以通过遥控器输入电视剧名称来找到想播放的电视剧,所以可以推知里面有交互式程序在运行。( )

答案:正确 奶奶家的数字电视可以通过遥控器输入电视剧名称来找到想播放的电视剧,这意味着电视中有交互式程序在运行。用户可以通过遥控器与电视进行交互,输入电视剧名称作为指令,然后电视会响应并播放对应的电视剧。

第 25 题

任何一个for循环都可以转化为等价的while循环( )。

答案:正确

在编程中,任何一个 for 循环都可以转化为等价的 while 循环。 for 循环和 while 循环都是用于实现循环结构的控制流语句,它们可以互相替代。

下面是一个示例,展示了如何将一个 for 循环转换为等价的 while 循环:

// for 循环示例
for (int i = 0; i < 5; i++) {
	// 循环体
}

// 等价的 while 循环示例
int i = 0;
while (i < 5) {
	// 循环体
	i++;
}

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

第 26 题试题名称:小杨买书

第 27 题试题名称:找因数