5619:[GESP202609四级] 客观题

文件提交:无需freopen 内存限制:128 MB 时间限制:1.000 S
评测方式:文本裁判
金币值:
命题人:
提交:0 解决:0

题目描述

## 一、单选题(每题 2 分,共 30 分) **第 1 题** 小杨使用指针修改计数器的值。执行下面程序后,输出结果是(  ) ```cpp 01 int count = 8; 02 int *p = &count; 03 *p += 4; 04 cout << count << " " << *p; 05 return 0; ``` - `8 8` - `8 12` - `12 12` - `12 8` **第 2 题** 关于下面指针声明的说法,正确的是(  ) ```cpp 01 int a = 10; 02 int b = 20; 03 const int *p = &a; ``` - 可以通过 $p$ 修改 $a$ 的值 - 可以令 $p = &b$ - $p$ 的指向和所指向的值都不能修改 - $p$ 必须始终指向 $a$ **第 3 题** 小杨用二维数组记录仓库货物数量。执行下面代码后,变量 `x` 的值是(  ) ```cpp 01 int goods[3][4] = {{2, 4, 6, 8}, {10, 12, 14, 16}, {18, 20, 22, 24}}; 02 int (*p)[4] = goods; 03 int x = *(*(p + 1) + 2); ``` - $12$ - $14$ - $20$ - $22$ **第 4 题** 下面函数用于将一个 $3$ 行 $5$ 列二维数组的第 $r$ 行元素全部加 $1$,横线处正确的形参写法是(  ) ```cpp 01 void addOne(________, int r) { 02    for (int j = 0; j < 5; j++) { 03        arr[r][j]++; 04   } 05 } ``` - `int arr[][]` - `int **arr` - `int arr[][5]` - `int arr[5][]` **第 5 题** 执行下面程序后,输出结果是(  ) ```cpp 01 int score = 60; 02 03 void update(int &score) { 04    score += 5; 05 } 06 07 int main() { 08    int score = 80; 09    update(score); 10    cout << score << " " << ::score; 11    return 0; 12 } ``` - `85 60` - `80 65` - `85 65` - `80 60` **第 6 题** 执行下面程序后,输出结果是(  ) ```cpp 01 struct Device { 02    int id; 03    int state; 04 }; 05 06 void reset(Device d) { 07    d.state = 0; 08 } 09 10 void start(Device &d) { 11    d.state += 1; 12 } 13 14 int main() { 15    Device d{7, 2}; 16    reset(d); 17    start(d); 18    cout << d.id << " " << d.state; 19    return 0; 20 } ``` - `7 0` - `7 1` - `7 2` - `7 3` **第 7 题** 小杨定义了结构体数组,并使用指针访问其中的元素。执行下面代码后输出的是(  ) ```cpp 01 struct Book { 02    string name; 03    int pages; 04 }; 05 06 int main() { 07    Book books[2] = {{"C++", 120}, {"Math", 150}}; 08    Book *p = books + 1; 09    p->pages += 10; 10    cout << books[1].name << " " << books[1].pages; 11    return 0; 12 } ``` - `C++ 120` - `Math 150` - `Math 160` - `C++ 160` **第 8 题** 关于冒泡排序、插入排序和选择排序,下列说法正确的是(  ) - 三种排序算法的最坏时间复杂度都是 $O(n)$ - 冒泡排序只能从小到大排序,不能从大到小排序 - 插入排序每次将一个待排序元素插入前面已经有序的序列中 - 选择排序每轮只需要比较一次就能确定最小元素 **第 9 题** 某机器人每次可以向前移动 $1$ 格或 $2$ 格,到达第 $n$ 格的方法数由下面函数计算。`ways(6)` 的返回值是(  ) ```cpp 01 int ways(int n) { 02    if (n <= 2) 03        return n; 04    int a = 1, b = 2, c = 0; 05    for (int i = 3; i <= n; i++) { 06        c = a + b; 07        a = b; 08        b = c; 09   } 10    return b; 11 } ``` - $8$ - $10$ - $13$ - $21$ **第 10 题** 对一组 `struct student` 的学生按成绩(`score`)升序排序。排序前后的数据如下。关于该排序的稳定性,判断正确的是(  ) ```cpp 01 struct student { 02 int score; 03 char id; 04 }; ``` ```text 排序前: (90, 'A'), (80, 'B'), (90, 'C'), (80, 'D') ``` 排序后: ``` (80, 'B'), (80, 'D'), (90, 'C'), (90, 'A') ``` - 稳定,因为所有成绩已经按升序排列 - 稳定,因为分数相同不会影响排序结果 - 不稳定,因为相同成绩的 ($90$, $'A'$) 和 ($90$, $'C'$) 的相对顺序发生了改变 - 无法判断,因为没有给出排序算法的代码 **第 11 题** 下面代码使用插入排序将数组按升序排列,横线处应填写(  ) ```cpp 01 void insertionSort(int a[], int n) { 02    for (int i = 1; i < n; i++) { 03        int key = a[i]; 04        int j = i - 1; 05        while (j >= 0 && __________) { 06            a[j + 1] = a[j]; 07            j--; 08       } 09        a[j + 1] = key; 10   } 11 } ``` - `a[j] < key` - `a[j] > key` - `a[j] == key` - `a[j + 1] > key` **第 12 题** 下面代码的时间复杂度是(  )。 ```cpp 01 int countPairs(int a[], int n) { 02 int cnt = 0; 03 for (int i = 0; i < n; i++) { 04 for (int j = i + 1; j < n; j++) { 05 if (a[i] + a[j] == 100) { 06 cnt++; 07 } 08 } 09 } 10 return cnt; 11 } ``` - $O(1)$ - $O(n^3)$ - $O(n)$ - $O(n^2)$ **第 13 题** 假设文件 `data.txt` 的内容如下: ```text Blue Sky ``` 执行下面程序后,输出结果是(  ) ```cpp 01 int main() { 02    ifstream fin("data.txt"); 03    string a, b; 04    fin >> a >> b; 05    cout << b << "-" << a; 06    fin.close(); 07    return 0; 08 } ``` - `Blue-Sky` - `Sky-Blue` - `Blue Sky` - `Sky Blue` **第 14 题** 执行下面程序后,输出结果是(  ) ```cpp 01 int main() { 02    try { 03        int age = -1; 04        if (age < 0) 05            throw age; 06        cout << "A"; 07   } catch (const char *msg) { 08        cout << "B"; 09   } catch (int value) { 10        cout << "C" << value; 11   } 12    return 0; 13 } ``` - `A` - `B` - `C-1` - 程序崩溃 **第 15 题** 下面函数使用冒泡排序将数组按升序排列。为了在数组已经有序时提前结束,两处横线应分别填写(  ) ```cpp 01 void bubbleSort(int a[], int n) { 02    for (int i = n - 1; i > 0; i--) { 03        bool changed = __________; 04        for (int j = 0; j < i; j++) { 05            if (a[j] > a[j + 1]) { 06                int t = a[j]; 07                a[j] = a[j + 1]; 08                a[j + 1] = t; 09                changed = __________; 10           } 11       } 12        if (!changed) 13            break; 14   } 15 } ``` - `false ,true` - `true ,false` - `false ,false` - `true ,true` ## 二、判断题(每题 2 分,共 20 分) **第 1 题** 执行下面程序后,变量 `a` 的值为 $15$。 ```cpp 01 int a = 10; 02 int *p = &a; 03 *p += 5; ``` - 正确 - 错误 **第 2 题** 一个函数必须在调用之前既声明又定义。 - 正确 - 错误 **第 3 题** 下面二维数组在内存中按行优先连续存储,因此 `*(*(a + 1) + 0)` 的值为 $5$ 。 ```cpp 01 int a[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}}; ``` - 正确 - 错误 **第 4 题** 执行下面程序后会输出 $20$。 ```cpp 01 void change(int x) { 02    x = 20; 03 } 04 05 int main() { 06    int x = 10; 07    change(x); 08    cout << x; 09    return 0; 10 } ``` - 正确 - 错误 **第 5 题** 下面结构体初始化语句是合法的。 ```cpp 01 struct Point { 02    int x; 03    int y; 04 }; 05 06 Point p{3, 4}; ``` - 正确 - 错误 **第 6 题** 对于按升序实现的稳定插入排序,移动元素的条件通常应为 `a[j] >= key`,这样能够保证相等元素的相对顺序不变。 ```cpp 01 while (j >= 0 && a[j] >= key) { 02    a[j + 1] = a[j]; 03    j--; 04 } ``` - 正确 - 错误 **第 7 题** 下面递推程序计算。当 `n = 4` 时,返回值为 $24$。 ```cpp 01 int factorial(int n) { 02    int result = 1; 03    for (int i = 1; i <= n; i++) { 04        result *= i; 05   } 06    return result; 07 } ``` - 正确 - 错误 **第 8 题** 下面两层循环的时间复杂度是 $O(n^2)$。 ```cpp 01 for (int i = 0; i < n; i++) { 02    for (int j = 1; j < n; j *= 2) { 03        cout << i + j; 04   } 05 } ``` - 正确 - 错误 **第 9 题** 假设文件能够正常打开,下面程序会把 `Welcome` 写入 `log.txt`。 ```cpp 01 int main() { 02    ofstream fout("log.txt"); 03    fout << "Welcome"; 04    fout.close(); 05    return 0; 06 } ``` - 正确 - 错误 **第 10 题** 执行下面程序时,`catch (int e)` 能够捕获由 `throw "Error"` 抛出的异常,因此程序输出 `Caught`。 ```cpp 01 int main() { 02    try { 03        throw "Error"; 04   } catch (int e) { 05        cout << "Caught"; 06   } 07    return 0; 08 } ``` - 正确 - 错误

来源/分类