#5289. YCL五级 C++ 理论题(整理版)

YCL五级 C++ 理论题(整理版)

YCL 五级 C++ 理论题

一、单选题(每题 2 分,共 15 题,合计 30 分)

1. 已知 int m = 0;,若下面各表达式分别在 m 初始值均为 0 的情况下单独计算,则与其他三个表达式结果不同的是( )

{{ select(1) }}

  • m++
  • m += 1
  • ++m
  • m + 1

2. 关于 C++ 函数中的形参和实参,下列说法正确的是( )

{{ select(2) }}

  • 函数定义时参数列表中的参数称为形式参数,简称形参
  • 函数调用时传入的参数称为形式参数,简称形参
  • 函数调用时,是把形参复制给实参
  • 函数定义时参数列表中的参数称为实际参数,简称实参

3. 对于一个 C++ 程序,以下叙述中正确的是( )

{{ select(3) }}

  • 程序的执行通常从 main 函数开始
  • 程序的执行总是从源文件中出现的第一个函数开始
  • 程序的执行总是从源文件中最后一个函数开始
  • main 函数只能写在源文件的第一行

4. 关于哈希(Hash)函数,下面说法正确的是( )

{{ select(4) }}

  • 哈希函数一定可以还原出原始数据
  • 哈希函数与文件校验无关
  • 哈希值可以用于辅助校验文件内容是否发生变化
  • 任意两个不同的数据经过哈希后都绝不会得到相同结果

5. 箱子里有 16 张牌:红桃 A、Q、4;黑桃 J、8、4、2、7、3;草花 K、Q、4、5、6;方块 A、5。

无名从中取出一张牌,只把点数告诉有名,把花色告诉真名。随后发生如下对话:

有名:“我不知道这张牌。”
真名:“我知道你不知道这张牌。”
有名:“现在我知道了。”
真名:“我也知道了。”

那么无名拿到的牌是( )

{{ select(5) }}

  • 红桃 A
  • 红桃 4
  • 方块 5
  • 方块 A

6. 算法的时间复杂度主要用于描述( )

{{ select(6) }}

  • 程序在某一台电脑上实际运行了多少秒
  • 源代码一共有多少行
  • 随输入规模增长,算法基本操作次数的增长趋势
  • 程序中一共有多少条 C++ 语句

7. 若二维数组 a 有 m 行 n 列,并按 C++ 的行优先方式存储,则在 a[i][j] 之前共有多少个数组元素(下标从 0 开始)?

{{ select(7) }}

  • i * n + j
  • i * m + j
  • i * n + n + j
  • i * n + n + j + 1

8. 关于算法的描述,以下选项中错误的是( )

{{ select(8) }}

  • 算法是解决问题的一组明确、有限的步骤
  • 算法复杂度主要包括时间复杂度和“数据复杂度”
  • 算法通常具有确定性、可行性和有穷性等特征
  • 设计算法时需要考虑数据的操作方式和控制结构

9. 若有定义:

int a[10], *p = a;

则 p + 5 表示( )

{{ select(9) }}

  • 数组元素 a[5] 的值
  • 数组元素 a[5] 的地址
  • 数组元素 a[6] 的地址
  • 数组元素 a[0] 的值加上 5

10. 已知:

int a = 20, b = 1;

那么表达式 a >> b 的结果是( )

{{ select(10) }}

  • 40
  • 20
  • 10
  • 1

11. 关于 C++ 函数的描述,以下选项中错误的是( )

{{ select(11) }}

  • 函数可以接收参数,也可以没有参数
  • 函数定义只写出函数名即可,不需要说明返回类型和函数体
  • 一个函数可以被其他函数调用
  • 函数可以通过 return 返回结果(void 函数也可以不返回数值)

12. 按照“FILO(先进后出)”原则组织数据的数据结构是( )

{{ select(12) }}

  • 堆
  • 栈
  • 队列
  • 链表

13. 已知数组定义如下:

int a[10][10];

若按行优先、下标从 0 开始计数,则数组中的第 10 个元素是( )

{{ select(13) }}

  • a[0][10]
  • a[1][0]
  • a[0][9]
  • a[1][9]

14. 下列字符数组初始化方式中,错误的是( )

{{ select(14) }}

  • char s[] = "goodluck";
  • char s[20] = "GoodLuck";
  • char s[] = {'g', 'o', 'o', 'd'};
  • char s[4] = "good";

15. 在常见 ASCII 编码环境下,若字符变量 c 中存放的是小写英文字母,下列可以将其转换为对应大写字母的是( )

{{ select(15) }}

  • c = c - 'A'
  • c = c - 26
  • c = c - 32
  • c = c + 'a' - 'Z'

二、多选题(每题 3 分,共 5 题,合计 15 分)

16. 关于表达式 '9' - '0',下面说法错误的有( )

{{ multiselect(16) }}

  • 其结果是整数 9
  • 其结果是字符 '9'
  • 该表达式不合法
  • 其结果是字符 '0'

17. 阅读下面程序,选择正确的说法( )

#include <iostream>
using namespace std;

int func(int a, int b)
{
    int c;
    c = a * b;
    b = a;
    return c;
}

int main()
{
    int a, b, c;

    a = 10;
    b = 100;

    c = func(a, b) + a;

    cout << c << endl;
    return 0;
}

{{ multiselect(17) }}

  • 程序执行后,main 函数中的变量 a 的值仍为 10
  • 该函数名称为 func
  • 程序执行后,变量 c 的值为 200
  • 程序执行后,main 函数中的变量 b 的值仍为 100

18. 甲、乙、丙三个人在一起做一道数学题。三个人都给出答案后:

  • 甲说:“我做错了。”
  • 乙说:“甲做对了。”
  • 丙说:“我做错了。”

丁看过三人的答案后说:

“你们三个人中,恰好有一个人做对了,并且恰好有一个人说对了。”

下面说法正确的有( )

{{ multiselect(18) }}

  • 甲说得对
  • 乙说得对
  • 丙做得对
  • 甲做得对

19. 以下关于 C++ 程序的叙述中,错误的有( )

{{ multiselect(19) }}

  • 在允许的数据范围内,所有整数和实数都能被计算机准确无误地表示
  • 一个 C++ 程序只能由 main 函数组成
  • 一个 C++ 程序可以由多个函数组成
  • 一个 C++ 程序中只允许出现一个函数

20. 无名、有名、真名三个人是好朋友。他们三人中恰好有一人经商、一人是大学生、一人是士兵,并且三人的身份互不相同。

已知:

  • 无名的年龄比士兵大;
  • 大学生的年龄比有名小;
  • 真名的年龄与大学生的年龄不同。

下面说法可能正确的有( )

{{ multiselect(20) }}

  • 无名是大学生
  • 有名是商人
  • 有名是士兵
  • 真名是商人

可以唯一确定三人的身份:

  • 无名:大学生
  • 有名:商人
  • 真名:士兵 推理过程:
  1. “大学生的年龄比有名小”,说明有名不可能是大学生。
  2. “真名的年龄与大学生的年龄不同”,如果真名本人是大学生,那么“真名年龄=大学生年龄”,与条件矛盾,所以真名也不是大学生。
  3. 因此大学生只能是无名。
  4. 又因为“无名的年龄比士兵大”,所以士兵不可能是无名。
  5. 如果有名是士兵,那么:
    • 无名 > 有名(无名比士兵大)
    • 无名 < 有名(大学生比有名小,而无名就是大学生) 两者矛盾。
  6. 所以士兵只能是真名,剩下的有名就是商人。 年龄关系也能确定为: 有名 > 无名 > 真名。