202603 GESP认证 C++编程 四级真题试卷
剩余时间 --:--:--
单选题 共 15 题
1.

执行下面程序后,输出为( )。

1 int f(int x = 2){
2  return x * 3;
3 }
4
5 int main(){
6  cout << f() << " " << f(4);
7 }


2.

执行下面代码后,输出为( )。

1 int main() {
2  int a = 5;
3  int* p = &a;
4  int** q = &p;
5  **q += 7;
6  cout << a << " " << *p;
7 }


3.

已知:

1 int a[3][4] = {
2  {1,2,3,4},
3  {5,6,7,8},
4  {9,10,11,12}
5 };
6 int (*p)[4] = a;

则表达式 *(*(p + 2) + 1) 的值为( )。

4.

执行下面程序后,输出为( )。

1 void fun(int a, int &b, int *c){
2  a += 1;
3  b += 2;
4  *c += 3;
5 }
6
7 int main(){
8  int x = 1, y = 1, z = 1;
9  fun(x, y, &z);
10  cout << x << " " << y << " " << z;
11 }
5.

执行下面程序后输出为( )。

1 int x = 3;
2 void f(int& x){
3  x += 2;
4 }
5 int main(){
6  int x = 10;
7  f(x);
8  cout << x << " " << ::x;
9 }


6.

下列关于结构体初始化的写法,正确的是( )。

7.

执行下面代码后输出为( )。

1 struct S { int a; int b; };
2
3 void g(S s){ s.a += 10; }
4 void h(S& s){ s.b += 10; }
5
6 int main(){
7  S s{1,2};
8  g(s);
9  h(s);
10  cout << s.a << " " << s.b;
11 }
8.

关于递推算法的描述,正确的是( )。

9.

执行 climb(6) 的返回值为( )。

1 int climb(int n){
2  if(n <= 2) return n;
3  int a = 1, b = 2, c = 0;
4  for(int i = 3; i <= n; i++){
5   c = a + b;
6   a = b;
7   b = c;
8  }
9  return c;
10 }


10.

某排序算法对如下数据排序(按 score 升序),则下面关于该排序算法稳定性的描述中,说法正确的是( )。

初始: (90,'A'), (90,'B'), (80,'C'), (90,'D') 

排序后: (80,'C'), (90,'A'), (90,'B'), (90,'D')

11.

下面代码试图把数组按升序进行插入排序,横线处应填写( )。

1 void ins(int a[], int n){
2  for(int i = 1; i < n; i++){
3   int key = a[i];
4   int j = i-1;
5   while(j >= 0 && __________){
6    a[j+1] = a[j];
7    j--;
8   }
9   a[j+1] = key;
10  }
11 }


12.

下列代码段的时间复杂度为( )。

1 int cnt=0;
2 for(int i=0; i<n; i++){
3  for(int j=0; j<n; j++){
4   if( (i+j) % 3 == 0) cnt++;
5  }
6 }


13.

下面哪种方式不能实现将字符串 Welcome to 2026! 输出重定向到文件 log.txt ( )。

14.

执行下面程序,输出结果是( )。

1 int divi(int a,int b){
2  if(b==0) throw 0;
3  return a/b;
4 }
5
6 int main(){
7  try{
8   cout << divi(10,0);
9  }catch(const char* msg){
10   cout << "A";
11  }catch(int){
12   cout << "B";
13  }
14 }
15.

下列函数实现排行榜中单个元素的位置调整(类似插入排序的相邻搬移)。当某玩家分数增加,需将其向前移动时, while 循环的条件应为( )。

1 struct Player{ int score; };
2 void up(Player players[], int n, int idx){
3  Player cur = players[idx];
4  int i = idx;
5  while( ____________________ ){
6   players[i] = players[i-1];
7   i--;
8  }
9  players[i] = cur;
10 }


判断题 共 10 题
1.

下面代码执行结束时,变量 a 的值变成 15

1 void add10(int &x) { x += 10; }
2
3 int main() {
4  int a = 5;
5  add10(a);
6 }
2.

引用一旦绑定某个变量,就不能再绑定其他变量。( )

3.

执行下面代码,输出结果为 5

1 int main() {
2  int a[2][3];
3  cout << &a[1][2] - &a[0][1] << endl;
4  return 0;
5 }
4.

下面程序可以正常编译并输出 10

1 int calc(int x, int y = 10);
2 int calc(int x) { return x * 2; }
3 int calc(int x, int y) { return x * y; }
4 
5 int main() {
6  cout << calc(5);
7 }


5.

下面程序执行后输出 2010

1 int x = 10;
2 void f() { int x = 20; cout << x; }
3
4 int main() {
5  f();
6  cout << x;
7 }
6.

C++ 中,如果声明了一个指针变量但没有显式初始化,该指针会自动被初始化为 nullptr

7.

下面代码没有语法错误。

1 struct GameCharacter {
2  string name;
3  int level;
4  float position_x;
5  float position_y;
6
7  struct Equipment {
8   string weapon;
9   int attack_bonus;
10   int defense_bonus;
11  } equipment;
12
13  struct Skill {
14   string name;
15   int damage;
16  } skills[8];
17  int skill_count;
18 };


8.

下面程序能够把 Hello 写入 data.txt 文件中。

1 ofstream fout("data.txt");
2 cout << "Hello";
3 fout.close();
9.

由于选择排序和插入排序的时间复杂度均为 ,在任何实际场景下两者的性能表现几乎相同,可以互相替代。

10.

下面用递推方式计算斐波那契数列第 n 项的程序,时间复杂度是O(2n)

1 int fib(int n) {
2  if (n <= 1) return n;
3  int f0 = 0, f1 = 1, cur = 0;
4  for (int i = 2; i <= n; i++) {
5   cur = f0 + f1;
6   f0 = f1;
7   f1 = cur;
8  }
9  return cur;
10 }


问答题 共 2 题
1.

试题名称:山之谷 

时间限制1.0 s 

内存限制512.0 MB 

3.1.1 题目描述 

现有一片山地,可以视为一个N行M列的网格图,第i行j列的海拔为hij。 

如果一个单元格的海拔不高于其所有相邻单元格(相邻包括上、下、左、右、左上、右上、左下、右下,最多8个方向)的海拔,则称该单元格为山谷。 

请你数一数该片山地中有多少山谷。

3.1.2 输入格式 

第一行包含2个整数N,M,表示山地的大小。 

之后N行,每行包含 M个整数hi,1,hi,2…,hi,M,表示海拔。 

3.1.3 输出格式 

输出 1 行,包含 1 个整数C,表示山谷的数量。 

3.1.4 样例 

3.1.4.1 输入样例 

3.1.4.2 输出样例

3.1.5 样例解释 

样例 1 如图所示,绿色单元格代表山谷:

3.1.6 数据范围 

保证1≤N,M≤100,1≤hij≤105

2.

试题名称:礼盒排序 

时间限制1.0 s 

内存限制512.0 MB 

3.2.1 题目描述 

商店推出了许多礼盒,每个礼盒中包含 k 件商品,每件商品都有一个价格。 

现在需要对这些礼盒进行排序,排序规则如下: 

1. 先按礼盒总价格从小到大排序; 

2. 如果总价格相同,按礼盒中最贵商品的价格从小到大排序; 

3. 如果仍然相同,按礼盒中最便宜商品的价格从小到大排序; 

4. 如果仍然相同,按礼盒编号从小到大排序。 

请输出排序后的礼盒编号。 

3.2.2 输入格式 

第一行包含两个整数n和k,分别表示礼盒数量和每个礼盒中商品的数量。 

接下来 行,每行包含k个整数,第i行表示第i个礼盒中各商品的价格。

3.2.3 输出格式 

输出一行,包含排序后的礼盒编号(编号从1开始),用空格分隔。 

3.2.4 样例 

3.2.4.1 输入样例 

3.2.4.2 输出样例 

3.2.5 样例解释 

4 个礼盒分别为:

 

排序过程: 

1. 按总价排序,3号礼盒总价最小; 

2. 其余总价均为 10,再按最大值排序,4号最大值更小; 

3. 1号和2号最大值相同,再按最小值排序,2号更小。 

最终顺序为:3 4 2 1 

3.2.6 数据范围 

保证1≤n≤103,1≤k≤10,商品价格≤104

C++ 编辑器
输入
输出