2023年06月CCF-GESP编程能力等级认证C++编程四级真题

2024年03月02日

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

第1题 高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执行代码。

A. 编辑
B. 保存
C. 调试
D. 编译

答案:D

第2题 排序算法是稳定的(Stable Sorting),就是指排序算法可以保证,在待排序数据中有两个相等记录的关键字 R 和 S(R 出现在 S 之前),在排序后的列表中 R 也一定在 S 前。下面关于排序稳定性的描述,正确的是( )。

A. 冒泡排序是不稳定的。
B. 插入排序是不稳定的。
C. 选择排序是不稳定的。
D. 以上都不正确。

答案:C

第3题 下列关于 C++语言中指针的叙述,不正确的是( )。

A. 指针变量中存储的是内存地址。
B. 定义指针变量时必须指定其指向的类型。
C. 指针变量只能指向基本类型变量,不能指向指针变量。
D. 指针变量指向的内存地址不一定能够合法访问。

答案:C

第4题 下列关于 C++语言中数组的叙述,不正确的是( )。

A. 一维数组在内存中一定是连续存放的。
B. 二维数组是一维数组的一维数组。
C. 二维数组中的每个一维数组在内存中都是连续存放的。
D. 二维数组在内存中可以不是连续存放的。

答案:D

第5题 下列关于 C++语言中函数的叙述,正确的是( )。

A. 函数必须有名字。
B. 函数必须有参数。
C. 函数必须有返回值。
D. 函数定义必须写在函数调用前。

答案:A

第6题 下列关于 C++语言中变量的叙述,正确的是( )。

A. 变量定义后可以一直使用。
B. 两个变量的变量名不能是相同的。
C. 两个变量的变量名可以相同,但它们的类型必须是不同的。
D. 两个变量的变量名可以相同,但它们的作用域必须是不同的。

答案:D

第7题 一个二维数组定义为 double array[3][10];,则这个二维数组占用内存的大小为( )。

A. 30
B. 60
C. 120
D. 240

答案:D

第8题 一个变量定义为 int *p = nullptr;,则下列说法正确的是( )。

A. 该指针变量的类型为 int。
B. 该指针变量指向的类型为 int。
C. 该指针变量指向的内存地址是随机的。
D. 访问该指针变量指向的内存会出现编译错误。

答案:B

第9题 一个二维数组定义为 int array[5][3];,则 array[1][2] array[2][1]在内存中的位置相差多少字节?( )

A. 2 字节。
B. 4 字节。
C. 8 字节。
D. 无法确定。

答案:C

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

A. 3
B. 9
C. 2
D. 7

答案:C

第11题 一个数组定义为 int a[5] = {1, 2, 3, 4, 5};,一个指针定义为 int * p = &a[2];,则执行 a[1] = *p;后,数组 a 中的值会变为( )。

A. {1, 3, 3, 4, 5}
B. {2, 2, 3, 4, 5}
C. {1, 2, 2, 4, 5}
D. {1, 2, 3, 4, 5}

答案:A

第12题 以下哪个函数声明在调用时可以传递二维数组的名字作为参数?( )

A. void BubbleSort(int a[][4]);
B. void BubbleSort(int a[3][]);
C. void BubbleSort(int a[][]);
D. void BubbleSort(int ** a);

答案:A

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

A. int x, int y
B. int * x, int * y
C. int a, int b
D. int & a, int & b

答案:B

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

A. 3
B. 30
C. 33
D. 无法确定。

答案:D

第15题 在下列代码的横线处填写( ),完成对有 n 个 int 类型元素的数组 array 由小到大排序。

A. array[min] > array[j]
B. array[min] > array[i]
C. min > array[j]
D. min > array[i]

答案:A

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

第16题 域名是由一串用点分隔的名字来标识互联网上一个计算机或计算机组的名称,CCF 编程能力等级认证官方网站的域名是 gesp.ccf.org.cn,其中顶级域名是 gesp。

答案:错误

第17题 数列 1, 1, 2, 3, 5, 8 … 是以意大利数学家列昂纳多·斐波那契命名的数列,从第三个数开始,每个数是前面两项之和。如果计算该数列的第 n 项(其中 n>3)fib(n),我们采用如下方法:① 令 fib(1)=fib(2)=1 ②用循环 for i=3 to n 分别计算 f(i) ③输出 fib(n)。这体现了递推的编程思想。

答案:正确

第18题 在 C++语言中,函数的参数默认以引用传递方式进行传递。

答案:错误

第19题 在 C++语言中,可以定义四维数组,但在解决实际问题时不可能用到,因为世界是三维的。

答案:错误

第20题 在 C++语言中,一个函数没有被调用时,它的参数不占用内存。

答案:正确

第21题 在 C++语言中,如果一个函数可能抛出异常,那么一定要在 try 子句里调用这个函数。

答案:错误

第22题 如果希望记录 10 个最长为 99 字节的字符串,可以将字符串数组定义为 char s[100][10];。

答案:错误

第23题 字符常量’0’和’\0’是等价的。

答案:错误

第24题 >=>>= 都是 C++语言的运算符。

答案:正确

第25题 由于文件重定向操作,程序员在使用 C++语言编写程序时无法确定通过 cout 输出的内容是否会被输出到屏幕上。

答案:正确

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

第26题幸运数

第27题图像压缩