GESP 2024年12月_C++四级试卷

从PDF导入:GESP 2024年12月_C++四级试卷

C++ 120分钟 总分 54.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
下面的语句中,( )正确定义了一个计算浮点数的平方(x² = x × x)的函数,并成功调用该函数。
A. float square(float x) { return x * x; }
B. square(float x) { return x * x; }
C. void square(float x) { return x * x; }
D. void square(float x) { x * x; return; }
第2题 中级 2.0分 单选
下面代码的描述中,正确的是( )。

A. 代码执行结束后,times的值为0
B. n是形参,times是实参
C. n是实参,times是形参
D. 代码最后一行换成n_chars(times, my_char);也可以
第3题 中级 2.0分 单选
给定以下代码:

A. 5
B. 10
C. 15
D. 20
第4题 中级 2.0分 单选
运行下面代码,屏幕上输出是( )。

A. 0.2
B. 0.5
C. 1.2
D. 1.5
第5题 中级 2.0分 单选
运行下面代码片段后,x和*p的结果分别是( )。

int x = 20;
int* p = &x;
*p = *p + 2;

A. 20 20
B. 20 22
C. 22 20
D. 22 22
第6题 中级 2.0分 单选
下面的描述中,( )不能正确定义一个名为Student的结构体以及一个包含20个元素的结构数组。
A. struct Student { string name; int age; float score; };
B. struct Student { string name; int age; float score; };
C. struct Student { string name; int age; float score; };
D. struct Student { string name; int age; float score; };
第7题 中级 2.0分 单选

假定整型是32位,对一个 行 列的二维整数数组 array ,假设数组第一个元素在内存中的地址为0x7ffee4065820 ,则第2行第2个元素的地址 &array[1][1] 为( )。
int array[2][3] = {
{0, 1, 2},
{3, 4, 5}
};

A. 0x7ffee4065824
B. 0x7ffee4065828
C. 0x7ffee406582c
D. 0x7ffee4065830
第8题 中级 2.0分 单选
下面( )正确定义二维数组。
A. int a[3][];
B. int a[][];
C. int a[][4];
D. int a[][2] = {{1,2},{1,2},{3,4}};
第9题 中级 2.0分 单选
下面代码采用递推算法来计算斐波那契数列f(n) = f(n-1) + f(n-2),则横线上应填写( )。

A. result = f1 + f2;
B. result += f1 + f2;
C. result += f1 + f2;
D. result = f1;
第10题 中级 2.0分 单选
下面关于排序算法(冒泡排序、插入排序和选择排序)的描述中,不正确的是( )。
A. 冒泡排序基于元素交换实现,需借助临时变量,共涉及3个单元操作;而插入排序基于元素赋值实现,仅需1个单元操作。因此冒泡排序的计算开销通常比插入排序更高。
B. 选择排序在任何情况下的时间复杂度都为O(n²)。
C. 冒泡排序在任何情况下的时间复杂度都为O(n²)。
D. 如果给定数据部分有序,插入排序通常比选择排序效率更高。
第11题 中级 2.0分 单选

冒泡排序的第一轮操作是从左到右遍历数组,通过两两比较相邻元素,将当前最大的元素移动到末尾。给定数组 arr[]={4, 1, 3, 1, 5, 2} ,执行第一轮冒泡排序后数组 arr 中的内容为( )。

A. 1, 4, 3, 1, 5, 2
B. 1, 3, 1, 4, 2, 5
C. 1, 4, 3, 1, 2, 5
D. 4, 1, 3, 1, 5, 2
第12题 中级 2.0分 单选
给定如下代码,其时间复杂度为( )。

A. O(n²)
B. O(2ⁿ)
C. O(1)
D. O(n)
第13题 中级 2.0分 单选
下面代码实现了插入排序函数,则横线上应填写( )。

A. int base = nums[i], j = i - 1;
B. int base = nums[i], j = i;
C. int base = nums[0], j = i - 1;
D. int base = nums[0], j = i;
第14题 中级 2.0分 单选
下面哪种方式不能实现将字符串"Welcome to GESP!"输出重定向到文件log.txt( )。
A. freopen("log.txt", "w", stdout);
B. std::ofstream outFile("log.txt");
C. std::ofstream outFile("log.txt");
D. ofstream log_file("log.txt");
第15题 中级 2.0分 单选
运行下面的代码,将出现什么情况?( )

double hmean(double a, double b) {
if (a == -b )
throw runtime_error("Runtime error occurred");
return 2.0*a*b/(a + b);
}
int main() {
double x = 10;
double y = -10;
try {
int result = hmean(x, y);
cout << "hmean: " << result << endl;
}
catch (const runtime_error& e) {
cout << "Caught: " << e.what() << endl;
} catch (...) {
cout << "Caught an unknown exception." << endl;
}
return 0;
}

A. 屏幕上输出Caught: Runtime error occurred
B. 屏幕上输出Caught an unknown exception
C. 程序调用std::terminate()
D. 编译错误
第16题 中级 2.0分 判断
在C++中,下面代码可以正确定义指针和初始化指针。
T. 正确
F. 错误
第17题 中级 2.0分 判断
一个函数必须在调用之前既声明又定义。
T. 正确
F. 错误
第18题 中级 2.0分 判断
函数参数可以通过值传递、引用传递和指针传递,这样函数内对参数的修改可以直接修改传入变量的值。
T. 正确
F. 错误
第19题 中级 2.0分 判断
int arr[3][]是一个正确的二维数组的声明。
T. 正确
F. 错误
第20题 中级 2.0分 判断
递推是一种通过已知的初始值和递推公式,逐步求解目标值的算法。
T. 正确
F. 错误
第21题 中级 2.0分 判断
某算法的递推关系式为T(n) = T(n-1) + n(n为正整数)及T(0) = 1,则该算法的时间复杂度为O(n²)。
T. 正确
F. 错误
第22题 中级 2.0分 判断
冒泡排序的平均时间复杂度为O(n²),但最优情况下为O(n)。
T. 正确
F. 错误
第23题 中级 2.0分 判断
冒泡排序和插入排序都是稳定的排序算法。
T. 正确
F. 错误
第24题 中级 2.0分 判断
选择排序是稳定的排序算法。
T. 正确
F. 错误
第25题 中级 2.0分 判断
在C++语言中,如果一个函数可能抛出异常,那么一定要在try子句里调用这个函数。
T. 正确
F. 错误
第26题 中级 2.0分 编程
:Recamán

小杨最近发现了有趣的Recamán数列,这个数列是这样生成的:
• 数列的第一项a₁是1;
• 如果aₖ₋₁ - k是正整数并且没有在数列中出现过,那么数列的第k项aₖ为aₖ₋₁ - k,否则为aₖ₋₁ + k。
小杨想知道Recamán数列的前n项从小到大排序后的结果。手动计算非常困难,小杨希望你能帮他解决这个问题。

【输入格式】
第一行,一个正整数n。
【输出格式】
一行,n个空格分隔的整数,表示Recamán数列的前n项从小到大排序后的结果。
【样例输入1】
5
【样例输出1】
1 2 3 6 7
【样例输入2】
8
【样例输出2】
1 2 3 6 7 12 13 20
【样例解释】
对于样例1,n = 5:
• a₁ = 1;
• a₁ - 2 = -1,不是正整数,因此a₂ = a₁ + 2 = 3;
• a₂ - 3 = 0,不是正整数,因此a₃ = a₂ + 3 = 6;
• a₃ - 4 = 2,是正整数,且没有在数列中出现过,因此a₄ = 2;
• a₄ - 5 = -3,不是正整数,因此a₅ = a₄ + 5 = 7;
a₁, a₂, a₃, a₄, a₅从小到大排序后的结果为1 2 3 6 7。
对于所有数据点,保证1 ≤ n ≤ 3000。
第27题 中级 2.0分 编程
字符排序

小杨有n个仅包含小写字母的字符串s₁, s₂, ..., sₙ,小杨想将这些字符串按一定顺序排列后拼接到一起构成字符串t。小杨希望最后构成的字符串t满足:
假设tᵢ为字符串t的第i个字符,对于所有的j < i均有tⱼ ≤ tᵢ。
两个字符的大小关系与其在字母表中的顺序一致,例如e < g < p < s。
小杨想知道是否存在满足条件的字符串排列顺序。

【输入格式】
第一行包含一个正整数t,代表测试数据组数。对于每组测试数据,第一行包含一个正整数n,含义如题面所示。之后n行,每行包含一个字符串sᵢ。
【输出格式】
对于每组测试数据,如果存在满足条件的排列顺序,输出1,否则输出0。
【样例输入】
3
3
aa
ac
de
2
aac
bc
1
gesp
【样例输出】
1
1
0
【样例解释】
对于第一组测试数据,一种可行的排列顺序为aa+ac+de,构成的字符串t为aaacde,满足条件。
对于全部数据,保证有1 ≤ t, n ≤ 100,每个字符串的长度不超过10。
💬