GESP 2024年12月_C++四级试卷
从PDF导入:GESP 2024年12月_C++四级试卷
试卷题目预览
下面的语句中,( )正确定义了一个计算浮点数的平方(x² = x × x)的函数,并成功调用该函数。
下面代码的描述中,正确的是( )。

给定以下代码:

运行下面代码,屏幕上输出是( )。

运行下面代码片段后,x和*p的结果分别是( )。
int x = 20;
int* p = &x;
*p = *p + 2;
下面的描述中,( )不能正确定义一个名为Student的结构体以及一个包含20个元素的结构数组。
假定整型是32位,对一个 行 列的二维整数数组 array ,假设数组第一个元素在内存中的地址为0x7ffee4065820 ,则第2行第2个元素的地址 &array[1][1] 为( )。
int array[2][3] = {
{0, 1, 2},
{3, 4, 5}
};
下面( )正确定义二维数组。
下面代码采用递推算法来计算斐波那契数列f(n) = f(n-1) + f(n-2),则横线上应填写( )。

下面关于排序算法(冒泡排序、插入排序和选择排序)的描述中,不正确的是( )。
冒泡排序的第一轮操作是从左到右遍历数组,通过两两比较相邻元素,将当前最大的元素移动到末尾。给定数组 arr[]={4, 1, 3, 1, 5, 2} ,执行第一轮冒泡排序后数组 arr 中的内容为( )。
给定如下代码,其时间复杂度为( )。

下面代码实现了插入排序函数,则横线上应填写( )。

下面哪种方式不能实现将字符串"Welcome to GESP!"输出重定向到文件log.txt( )。
运行下面的代码,将出现什么情况?( )
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;
}
在C++中,下面代码可以正确定义指针和初始化指针。
一个函数必须在调用之前既声明又定义。
函数参数可以通过值传递、引用传递和指针传递,这样函数内对参数的修改可以直接修改传入变量的值。
int arr[3][]是一个正确的二维数组的声明。
递推是一种通过已知的初始值和递推公式,逐步求解目标值的算法。
某算法的递推关系式为T(n) = T(n-1) + n(n为正整数)及T(0) = 1,则该算法的时间复杂度为O(n²)。
冒泡排序的平均时间复杂度为O(n²),但最优情况下为O(n)。
冒泡排序和插入排序都是稳定的排序算法。
选择排序是稳定的排序算法。
在C++语言中,如果一个函数可能抛出异常,那么一定要在try子句里调用这个函数。
: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。
字符排序
小杨有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。