GESP C++ 2023年12月一级真题卷

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

1 以下 C++ 不可以作为变量的名称的是 ( )
A. CCF GESP
B. ccfGESP
C. CCFgesp
D. CCF_GESP

答案:A

解析:变量名命名规则:由字母、数字和下划线组成,首字符不能是数字

2 C++ 表达式 10 - 3 * (2 + 1) % 10 的值是 ( )
A. 0
B. 1
C. 2
D. 3

答案:B

解析:略

3 假设现在是上午十点,求出 N 小时(正整数)后是第几天几时,如输入 20 小时则为第 2 6 点,如 N 输入 4 则为今天14 点。为实现相应功能,应在横线处填写代码是 ( )
GESP C++ 2023年12月一级真题卷_第1张图片
A. (10 + N) % 24 , (10 + N) / 24
B. (10 + N) / 24 , (10 + N) % 24
C. N % 24 , N / 24
D. 10 / 24 , 10 % 24

答案:B

解析:一天是24小时,求第几天,那么(10 + N) / 24取整,求是几点那么取模,(10 + N) % 24

4 下面的程序用于判断 N 是否为偶数,横线处应填写代码是(  )。
GESP C++ 2023年12月一级真题卷_第2张图片
A. N % 2 == 0
B. N % 2 = 0
C. N % 2
D. N % 2 != 0

答案:A

解析:偶数是能被2整除的数,那么判断N除以2余数等于0

5 下面对 C++ 代码执行后输出的描述,正确的是( )。
GESP C++ 2023年12月一级真题卷_第3张图片
A. 如果输⼊的 N ⼩于 等于 2 整数,第 5 ⾏将输出 0
B. 如果输⼊的 N 是⼤于等于 2 整数,第 5 ⾏将输出 N-1
C. 如果输⼊的 N 是⼤于等于 2 整数,第 5 ⾏将输出 N
D. 以上说法均不正确。

答案:B

解析:

根据这段代码,我们可以看到:

  • 如果输入的N小于等于2,如果N=2,所以cnt的值是1,第5行将输出1。
  • 如果输入的N大于等于2,那么for循环将执行,并且cnt将增加到N-1,所以第5行将输出N-1
6 下面 C++ 代码执行后的输出是( )。
GESP C++ 2023年12月一级真题卷_第4张图片
A. 10
B. 9
C. 3
D. 1

答案:C

解析:当i=1,i<10,cnt=1;当i=4,i<10,cnt=2;当i=7,i<10,cnt=3;当i=11,i>10,退出循环

7 下面 C++ 代码执行后的输出是( )。
GESP C++ 2023年12月一级真题卷_第5张图片
A. 90
B. 44
C. 20
D. 10

答案:A

解析:GESP C++ 2023年12月一级真题卷_第6张图片

注意:当 i 等于15时,i%2 的结果是1,因此 continue; 被执行,导致跳过了后续的 cnt += i;break;
8 下面 C++ 代码执行后的输出是( )。
GESP C++ 2023年12月一级真题卷_第7张图片
A. 11
B. 10
C. 5
D. 4

答案:C

解析:if(N==0)break,退出循环

当N=10,cnt=1;当N=8,cnt=2;当N=6,cnt=3;当N=4,cnt=4;当N=2,cnt=5;当N=0,退出循环,cnt=5;

9 下面 C++ 代码用于判断一个数是否为质数(素数),在横线处应填入代码是( )。
GESP C++ 2023年12月一级真题卷_第8张图片
A. cnt = 1
B. cnt = 2
C. cnt =+ 1
D. cnt += 1

答案:D

解析:素数:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除

N等于2,那么就是质数(素数),cnt用来计算N有多少个约数,所以选D

10 对下面的代码,描述正确的是( )。
GESP C++ 2023年12月一级真题卷_第9张图片
A. 输出 2 6 3 5 4 8 1 0 9 10 10
B. 输出 2 6 3 5 4 8 1 0 9 9
C. 输出 2 6 3 5 4 8 1 0 9 10
D. 提示有编译错误

答案:D

解析:1、使用cout语句,那么需要#include 来包含输出流相关的头文件

2、还有 i 的作用域问题。在 C++ 中,for 循环内部声明的变量 i 的作用域仅限于该循环体内。因此,在循环外部访问 i 会导致编译错误。

11 执行下面 C++ 代码后输出是( )。
GESP C++ 2023年12月一级真题卷_第10张图片
A. 3
B. 21
C. 27
D. 49

答案:B

解析:i=10,cnt=10;i=7,cnt=17;i=4,cnt=21;i=1,退出循环,所以cnt=21

12 定义变量 char c ,下面对 c 赋值的语句,不符合语法的是 (  )。
A. c = (char)66;
B. c = (char)(66);
C. c = char(66);
D. c = char 66;

答案:D

解析:

在C++中,我们使用类型转换操作符来将一个数据类型转换为另一个数据类型。对于基本数据类型,我们通常使用C风格的类型转换或者C++风格的类型转换。

  • c = (char)66; 和 c = (char)(66); 是C风格的类型转换,它们都是合法的。
  • c = char(66); 是C++风格的类型转换,也是合法的。

然而,c = char 66; 并不符合C++的语法规则,因为它既不是C风格的类型转换,也不是C++风格的类型转换。所以,选项D是不符合语法的。

13 下图所示 C++ 代码对大写字母 'A' 'Z' 分组,对每个字母输出所属的组号,那么输入 'C' 时将输出的组号是?( )
GESP C++ 2023年12月一级真题卷_第11张图片
A. 3
B. 3 5
C. 3 5 9
D. 以上都不对

答案:B

解析:

  1. 定义一个字符变量 c 并进入一个无限循环,其中它接收用户输入到 c
  2. 如果输入字符是 ‘q’,它将跳出循环。
  3. 它使用一个switch语句,根据 c 的值打印不同的数字。
    • 对于 ‘A’,它打印 “1”。
    • 对于 ‘B’,它打印 “3”。
    • 对于 ‘C’,它打印 “3”,然后没有 break 语句,所以它会继续执行下一个 case,也就是 ‘D’ 的 case,打印 “5”,然后 break
    • 对于 ‘D’,它打印 “5”。
    • 对于 ‘E’,它打印 “5”。
    • 对于任何其他字符,它打印 “9”。

根据这个逻辑,当输入是 ‘C’ 时,它将输出 “3 5”。所以,正确的答案应该是选项B:3 5。

14 某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。( )
A. 麦克风
B. 扬声器
C. 油量表
D. 传感器

答案:C

解析:略

15 现代计算机是指电子计算机,它所基于的是( )体系结构。
A. 艾伦 · 图灵
B. · 诺依曼
C. 阿塔纳索夫
D. 埃克特 - 莫克利

答案:B

解析:略

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

1 C++ 表达式 int(3.14) 的值为 3 ( )

答案:对

解析:浮点数3.14强制转换成int,截断小数点,所以是3

2 C++ 语句 cout << (2 * 3, 3 % 10, 2+3) 的输出为 6,3,5 ( )

答案:错

解析:在 C++ 中,逗号运算符 , 会依次计算它的各个操作数,并返回最后一个操作数的值。所以输出5

3 for(int i = 1; i < 10; i += 3;) ; 表示 i 1 开始到 10 结束间隔为 3 ,相当于 1 4 7 10 。( )

答案:错

解析:for(int i = 1; i < 10; i += 3;) ; 表示i从1开始到9结束间隔为3,相当于1、4、7

4 C++ 表达式 010+100+001 的值为 111 。( )

答案:错

解析:

在 C++ 中,以 0 开头的整数字面值被解释为八进制(octal)。因此,表达式 010 + 100 + 001 会被解释为 8+64+18+64+1,而不是十进制下的 10+100+110+100+1。

计算八进制数 010+100+001010+100+001 的值:

0108=8100108​=810​ 1008=64101008​=6410​ 0018=1100018​=110​

因此,8+64+1=738+64+1=73。

5 if 语句中的条件表达式的结果可以为 int 类型。

答案:对

解析:

在 C++ 中,if 语句的条件表达式的结果必须是一个布尔值,即 truefalse。如果条件表达式的结果为整数类型(int),C++ 会将其隐式地转换为布尔值。通常,任何非零的整数值都会被视为 true,而零会被视为 false
6 在下面的 C++ 代码 while(1) continue; 中,由于循环中的 continue 是无条件被执行,因此将导致死循环。( )

答案:对

解析:

GESP C++ 2023年12月一级真题卷_第12张图片
7 C++ 表达式 ('1'+'1'=='2'? flag=1:flag=2) 的结果值和表达式 (flag==2) 的相同。( )

答案:错

解析:

在 C++ 中,表达式 ('1' + '1' == '2' ? flag = 1 : flag = 2) 中使用了条件运算符(三元运算符)。这个表达式的执行过程如下:

  1. '1' + '1' 对字符进行加法,字符 '1' 的 ASCII 值为 49,所以结果是 98。
  2. 98 == '2' 比较,这里字符 '2' 的 ASCII 值为 50。
  3. 如果比较为真,则将 flag 赋值为 1,否则赋值为 2。

由于 '1' + '1' 的结果不等于字符 '2' 的 ASCII 值,所以比较结果为假,flag 被赋值为 2。

然后,表达式 (flag == 2) 检查 flag 是否等于 2,这个检查的结果是真,因为在前面的条件运算符中 flag 被赋值为 2。

所以,表达式 ('1' + '1' == '2' ? flag = 1 : flag = 2) 的结果值是 2,而表达式 (flag == 2) 的结果是真(1),结果所以不一样。

8 C++ 的程序中,不能用 scanf 作为变量名。( )

答案:错

解析:

在C++的程序中,你可以使用 scanf 作为变量名,但是不推荐这样做。scanf 是C语言标准库中的一个函数,用于从标准输入流中按指定格式读取输入数据。如果你在C++程序中将变量名命名为 scanf,虽然语法上是允许的,但容易造成混淆,因为读者可能会认为这是标准的 scanf 函数而不是一个变量。
9 小杨最近在准备考 GESP ,他用的 Dev C++ 来练习和运行程序,所以 Dev C++ 也是一个小型操作系统。( )

答案:错

解析:

Dev C++ 不是一个操作系统,而是一个集成开发环境(IDE,Integrated Development Environment),用于编写、编译和运行C和C++程序。Dev C++提供了一个用户友好的界面,帮助程序员管理和组织他们的代码,并提供编译器和调试器等工具来执行和调试程序。

操作系统是计算机系统中的核心软件,负责管理硬件资源和提供各种服务,使应用程序能够运行。Windows、Linux、macOS 等都是常见的操作系统。

所以,Dev C++ 不是一个操作系统,而是一个用于开发C和C++程序的集成开发环境。

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

答案:对

解析:略

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

3.1 编程题 1
试题名称 :小杨的考试
时间限制 1.0 s
内存限制 128.0 MB
#include 
using namespace std;
int main() {
    int x,n,t;
    cin>>x;
    cin>>n;
    t=(x+n)%7;
    if(t==0)t=7;
    cout<
3.1.4 特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
3.1.5 样例输入 1
3.1.6 样例输出 1
3.1.7 样例解释 1
今天是星期 1 ,那么 6 天后就是星期日,星期日在本题中用7表示。

 

3.1.8 样例输入 2
3.1.9 样例输出 2

 

3.1.10
样例解释 2
今天是星期 5 ,那么 3 天后就是星期 1
3.1.11 参考程序
#include 
using namespace std;
int main() {
    int x,n,t;
    cin>>x;
    cin>>n;
    t=(x+n)%7;
    if(t==0)t=7;
    cout<
3.2 编程题 2
试题名称 :小杨报数
时间限制 1.0 s
内存限制 128.0 MB
3.2.1 问题描述
小杨需要从1到N报数。在报数过程中,小杨希望跳过M的倍数。例如,如果N=5,M=2,那么小杨就需要依次报出 1、3 、5 。
现在,请你依次输出小杨报的数。
3.2.2 输入描述
输入 2 行,第一行一个整数N (1<=N<=1,000 );第二行一个整数M (2<=M<=100 )。
3.2.3 输出描述
输出若干行,依次表示小杨报的数。
3.2.4 特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任 何提示信息。
3.2.5 样例输入 1
3.2.6 样例输出 1

3.2.7 样例输入 2

 3.2.8 样例输出 2

GESP C++ 2023年12月一级真题卷_第13张图片

3.2.9 参考程序
#include 
using namespace std;
int main() {
    int n,m;
    cin>>n;
    cin>>m;
    for(int i=1;i<=n;i++){
    	if(i%m==0)continue;
	    cout<

 

你可能感兴趣的:(GESP,C++等级考试,GESP,C++一级,c++20,青少年编程)