选择题 共15道

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15


判断题 共10道

16 17 18 19 20 21 22 23 24 25


编程题 共2道

26 27

820 202509GESP C++四级试卷-练习
选择题 共15道
01

运行下面程序后变量 a 的值是( )。

int a = 42;
int* p = &a;
*p = *p + 1;
2分
登录后查看选项
02

以下关于数组的描述中,( )是错误的。

2分
登录后查看选项
03

给定如下定义的数组 arr ,则 *(*(arr + 1) + 2) 的值是( )。

int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
2分
登录后查看选项
04

下面这段代码会输出( )。

int add(int a, int b = 1); // 函数声明
int main() {
	cout << add(2) << " " << add(2, 3);
	return 0;
}
int add(int a, int b) { // 函数定义
	return a + b;
}
2分
登录后查看选项
05

下面这段代码会输出( )。

int x = 5;
void foo() {
	int x = 10;
	cout << x << " ";
}
void bar() {
	cout << x << " ";
}
int main() {
	foo();
	bar();
}
2分
登录后查看选项
06

下面程序运行的结果是( )。

void increaseA(int x) {
	x++;
}
void increaseB(int* p) {
	(*p)++;
}
int main() {
	int a = 5;
	increaseA(a);
	cout << a << " ";
	increaseB(&a);
	cout << a;
}
2分
登录后查看选项
07

关于结构体初始化,以下哪个选项中正确的是( )。

struct Point {int x,y;};
2分
登录后查看选项
08

运行如下代码会输出( )。

struct Cat {
	string name;
	int age;
};
void birthday(Cat& c) {
	c.age++;
}
int main() {
	Cat kitty {"Mimi", 2};
	birthday(kitty);
	cout << kitty.name << " " << kitty.age;
}
2分
登录后查看选项
09

关于排序算法的稳定性,以下说法错误的是( )。

2分
登录后查看选项
10

下面代码试图实现选择排序,使其能对数组 nums 排序为升序,则横线上应分别填写( )。

void selectionSort(vector<int>& nums) {
	int n = nums.size();
	for (int i = 0; i < n - 1; ++i) {
		int minIndex = i;
		for (int j = i + 1; j < n; ++j) {
			if ( __________ ) { // 在此处填入代码
				minIndex = j;
			}
		}
		____________________; // 在此处填入代码
	}
}
2分
登录后查看选项
11

下面程序实现插入排序(升序排序),则横线上应分别填写( )。

void insertionSort(int arr[], int n) {
	for (int i = 1; i < n; i++) {
		int key = arr[i];
		int j = i - 1;
		while ( j >= 0 && ____________________ ) { // ÔÚ´Ë´¦ÌîÈë´úÂë
			arr[j + 1] = arr[j];
			j--;
		}
		____________________; // ÔÚ´Ë´¦ÌîÈë´úÂë
	}
}
2分
登录后查看选项
12

关于插入排序的时间复杂度,下列说法正确的是( )。

2分
登录后查看选项
13

小杨正在爬楼梯,需要 阶才能到达楼顶,每次可以爬 阶或 阶,求小杨有多少种不同的方法可以爬到楼顶,横线上应填写( )。

int climbStairs(int n) {
	if (n <= 2) return n;
	int prev2 = 1;
	int prev1 = 2;
	int current = 0;
	for (int i = 3; i <= n; ++i) {
		________________ // ÔÚ´Ë´¦ÌîÈë´úÂë
	}
	return current;
}
2分
登录后查看选项
14

假设有一个班级的成绩单,存储在一个长度为 n 的数组 scores 中,每个元素是一个学生的分数。老师想要找出 所有满足 scores[i] + scores[j] + scores[k] == 300 的三元组,其中 i < j < k。下面代码实现该功能,请问其时间复杂度是( )。

int cnt = 0;
for (int i = 0; i < n; i++) {
	for (int j = i + 1; j < n; j++) {
		for (int k = j + 1; k < n; k++) {
			if (scores[i] + scores[j] + scores[k] == 300) {
				cnt++;
			}
		}
	}
}
2分
登录后查看选项
15

关于异常处理,以下说法错误的是( )。

2分
登录后查看选项
判断题 共10道
16

以下代码能正确初始化指针。

int a = 5;
int *p = a;
2分
登录后查看选项
17

执行下面C++代码将输出 11 。

int x = 10;
void f() {
	int x = x + 1;
	cout << x << endl;
}
int main() {
	f();
}
2分
登录后查看选项
18

以下C++代码合法。

struct Student {
	string name;
	int age;
	float score;
};
Student* students = new Student[20];
2分
登录后查看选项
19

执行下面C++代码将输出 10 。

void func(int* p) {
	*p = 10;
}
int main() {
	int a = 5;
	func(&a);
	cout << a << endl;
	return 0;
}
2分
登录后查看选项
20

下面代码将二维数组 arr 传递给函数 f ,函数内部用 arr[i][j] 访问元素,函数参数声明为 int arr[][4] 是错误的。

void f(int arr[][4], int rows) {
	// 访问 arr[i][j]
}
int main() {
	int arr[3][4] = { /* 初始化 */ };
	f(arr, 3);
}
2分
登录后查看选项
21

递推是在给定初始条件下,已知前一项(或前几项)求后一项的过程。

2分
登录后查看选项
22

虽然插入排序的时间复杂度为 O(n2),但由于单元操作相对较少,因此在小数据量的排序任务中非常受欢迎。

2分
登录后查看选项
23

对整数数组 {4, 1, 3, 1, 5, 2} 进行冒泡排序(将最大元素放到最后),执行一轮之后是 {4, 1, 3, 1, 2, 5} 。

2分
登录后查看选项
24

以下代码只能捕获 int 类型异常。

int main() {
	try {
		throw 42;
	} catch (...) {
		cout << "Caught" << endl;
	}
	return 0;
}
2分
登录后查看选项
25

以下代码将 Hello 写入文件 data.txt 。

ofstream file("data.txt");
cout<<"Hello"<< endl;
file.close();
2分
登录后查看选项
编程题 共2道
26

排兵布阵

时间限制:1.0 s

内存限制:512.0 MB

题目描述

作为将军,你自然需要合理地排兵布阵。地图可以视为 n 行 m 列的网格,适合排兵的网格以 1 标注,不适合排兵的网格以 0 标注。现在你需要在地图上选择一个矩形区域排兵,这个矩形区域内不能包含不适合排兵的网格。请问可选择的矩形区域最多能包含多少网格?


输入格式

第一行,两个正整数 n,m,分别表示地图网格的行数与列数,接下来 n 行,每行 m 个整数 ai,1,ai,2,...,ai,m,表示各行中的网格是否适合排兵。

输出格式

一行,一个整数,表示适合排兵的矩形区域包含的最大网格数。


样例

输入样例 1

4 3

0 1 1

1 0 1

0 1 1

1 1 1

输出样例1

4

输入样例 2

3 5

1 0 1 0 1

0 1 0 1 0

0 1 1 1 0

输出样例2

3



数据范围

对于所有测试点,保证 1≤n,m ≤ 12,0 ≤ a(i,j)≤1。

25分
登录后作答
27

最长连续段

时间限制:1.0 s

内存限制:512.0 MB

题目描述

对于 k 个整数构成的数组[b1, b2, ..., bk],如果对1≤i<k都有 bi+1=bi+1,那么称数组 b 是一个连续段。

给定由 n 个整数构成的数组 [a1, a2, ..., an],你可以任意重排数组 a 中元素顺序。请问在重排顺序之后,a 所有是连续段的子数组中,最长的子数组长度是多少?

例如,对于数组 [1,0,2,4],可以将其重排为[4,0,1,2],有以下 10个子数组:

[4],[0],[1],[2],[4,0],[0,1],[1,2],[4,0,1],[0,1,2],[4,0,1,2]

其中除 [4,0],[4,0,1],[4,0,1,2] 以外的子数组均是连续段,因此是连续段的子数组中,最长子数组长度为 3。


输入格式

第一行,一个正整数 n,表示数组长度。

第二行,n个整数 a1,a2,...,an,表示数组中的整数。

输出格式

一行,一个整数,表示数组 a 重排顺序后,所有是连续段的子数组的最长长度。


样例

输入样例 1

4

1 0 2 4

输出样例1

3

输入样例 2

9

9 9 8 2 4 4 3 5 3

输出样例2

4


数据范围

对于 40% 的测试点,保证 1≤n≤8。

对于所有测试点,保证 1≤n≤ 10^5,-10^9≤ ai≤ 10^9。

25分
登录后作答