GESP 2024年9月_C++四级试卷
从PDF导入:GESP 2024年9月_C++四级试卷
试卷题目预览
在C++中,( )正确定义了一个返回整数值并接受两个整数参数的函数。
在C++中,形参与实参的关系描述正确的是( )。
运行以下代码,屏幕上将输出( )。
int x = 20;
int y = 24;
int* p = &x;
int* q = &y;
p = q;
运行下面代码,屏幕上输出是( )。
int arr[3] = {24, 9, 7};
int* p = arr;
p++;
cout << *p << endl;
运行下面代码片段的结果是( )。
int x = 20;
int y = 24;
int* p = &x;
int* q = &y;
p = q;
在C++中,( )正确定义一个名为student的结构体,其中包含一个name字符数组和一个age整数?
在C++中,( )正确声明了一个3行4列的二维数组。
一个二维数组定义为int arr[3][4];(假设一个int变量占4个字节),则arr[0]占用( )个字节的内存。
下面代码采用递推算法来实现整数n的阶乘,则横线上应填写( )。
int factorial(int n) {
int result = 1;
for (int i = 2; i <= n; i++) {
// 在此处填入代码
}
return result;
}
在排序算法中,稳定性指的是( )。
下面代码实现了冒泡排序函数,则横线上应填写( )。
for (int i = 0; i < arr.size() - 1; i++) {
bool flag = false;
________________ {
if (arr[j] > arr[j + 1]) {
swap(arr, i, j);
flag = true;
}
}
if (!flag) break;
}
上一题算法的时间复杂度为( )。
下面代码实现了插入排序函数(升序),则横线上应填写( )。
void insertion_sort(vector
for (int i = 1; i < nums.size(); i++) {
int base = nums[i], j = i - 1;
______________ {
nums[j + 1] = nums[j];
j--;
}
nums[j + 1] = base;
}
}
小杨用文件重定向实现在log.txt文件中输出日志,则下面横线上应填写( )。
#include
#include
#include
using namespace std;
int main() {
ofstream log_file("log.txt");
streambuf* original_cout = cout.rdbuf();
cout.rdbuf(log_file.rdbuf());
// 在此处填入代码
cout.rdbuf(original_cout);
return 0;
}
运行下面的代码,屏幕上将输出( )。
int divide(int a, int b) {
if (b == 0) {
throw runtime_error("division by zero error ");
}
return a / b;
}
int main() {
int x = 10;
int y = 0;
try {
int result = divide(x, y);
cout << "result: " << result << endl;
} catch (const runtime_error& e) {
cout << "caught an exception: " << e.what() << endl;
}
return 0;
}
代码int a = 10; int* p = &a;可以正确定义指针和初始化指针。
在C++中,引用传递允许函数修改传递给它的参数的值。
指针的大小与其所指向的变量的数据类型的大小相同。
二维数组的行的大小必须在定义时确定,列的大小可以动态变化。
递推算法通过逐步求解当前状态和前一个或几个状态之间的关系来解决问题。
选择排序是稳定的排序算法。
插入排序的时间复杂度总是比冒泡排序低。
在C++中,如果没有捕获到异常(没有匹配的catch块),程序会继续执行而不会终止。
以下代码用递推法求斐波那契数列的第n项,时间复杂度为指数级。
int fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
int f0 = 0; // F(0)
int f1 = 1; // F(1)
int current;
for (int i = 2; i <= n; i++) {
return current
current = f0+ f1; // F(n) = F(n-1) + F(n-2)
f0 = f1;
f1 = current;
}
;
}
执行下面C++代码后,输出的是20。
int point(int* p){
return *p * 2;
}
int main() {
int a = 10;
int* p = &a;
*p = point(p);
cout << *p << endl;
}
黑白方块
时间限制:1.0s 内存限制:512.0MB
小杨有一个n行m列的网格图,其中每个格子要么是白色,要么是黑色。小杨想知道网格图中是否存在一个满足如下条件的子矩形:
• 子矩形由4行4列组成
• 子矩形的第1行和第4行只包含白色格子
• 对于子矩形的第2行和第3行,只有第1个和第4个格子是白色的,其余格子都是黑色的
第一行包含一个正整数t,代表测试用例组数。对于每组测试用例:第一行包含两个正整数n,m。之后n行,每行一个长度为m的01串,0代表白色,1代表黑色。
对于每组测试用例,如果存在,输出Yes,否则输出No。
【样例输入】 3 1 4 0110 5 5 00000 01100 01100 00001 01100 5 5 00000 01100 01110 00001 01100 【样例输出】 No Yes No 对于全部数据,保证有1≤t≤10,1≤n,m≤100。
区间排序
时间限制:1.0s 内存限制:512.0MB
小杨有一个包含n个正整数的序列a₁,a₂,...,an。小杨计划对序列进行多次升序排序,每次选择一个区间[lᵢ,rᵢ]并对区间内所有数字进行升序排序。每次升序排序会在上一次升序排序的结果基础上进行。请你输出多次升序排序后的序列。
第一行包含一个正整数n。第二行包含n个正整数a₁,a₂,...,an。第三行包含一个正整数q。之后q行,每行包含两个正整数lᵢ,rᵢ。
输出一行包含n个正整数,代表多次升序排序后的序列。
【样例输入】 5 3 4 5 2 1 3 4 5 3 4 1 3 【样例输出】 1 3 4 5 2 对于全部数据,保证有1≤n≤100,1≤q≤100,1≤lᵢ≤rᵢ≤n。