3930:2024 CCF 非专业级别软件能力认证第一轮

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

题目描述

<div class="md">
### 2024 CCF 非专业级别软件能力认证第一轮

### 一、单项选择题(共15题, 每题2分, 共计30分; 每题有且仅有一个正确选项)

1.32位 int类型的存储范围是? ( )

- A. -2147483647 ~ +2147483647
- B. -2147483647 ~ +2147483648
- C. -2147483648 ~ +2147483647
- D. -2147483648 ~ +2147483648

2.计算$(14_8 - 1010_2) * D_{16} - 1101_2$的结果, 并选择答案的十进制值: ()

- A. 13
- B. 14
- C. 15
- D. 16

3.某公司有10名员工,分为3个部门: A部门有4名员工、B部门有3名员工、C部门有3名员工。现需要从这10名员工中选出4名组成一个工作小组,且每个部门至少要有1人。问有多少种选择方式? ()

- A. 120
- B. 126
- C. 132
- D. 238

4.以下哪个序列对应数字0至7的4位二进制格雷码( Gray code)? ( )

- A. 0000&#44; 0001&#44; 0011&#44; 0010&#44; 0110&#44; 0111&#44; 0101&#44; 1000
- B. 0000&#44; 0001&#44; 0011&#44; 0010&#44; 0110&#44; 0111&#44; 0100&#44; 0101
- C. 0000&#44; 0001&#44; 0011&#44; 0010&#44; 0100&#44; 0101&#44; 0111&#44; 0110
- D. 0000&#44; 0001&#44; 0011&#44; 0010&#44; 0110&#44; 0111&#44; 0101&#44; 0100

5.记1KB为1024字节( byte)、1MB 为1024KB&#44; 那么1MB是多少二进制位( bit)? ( )

- A. 1000000
- B. 1048576
- C. 8000000
- D. 8388608

6.以下哪个不是C++中的基本数据类型? ()

- A. int
- B. float
- C. struct
- D. char

7.以下哪个不是C++中的循环语句? ()

- A. for
- B. while
- C. do- while
- D. repeat- until

8.在C/C++中&#44; ( char)('a'+13)与下面的哪一个值相等? ( )

- A. 'm'
- B. 'n'
- C. 'z'
- D. '3'

9.假设有序表中有1000个元素, 则用二分法查找元素X最多需要比较( )次。

- A.25
- B. 10
- C. 7
- D. 1

10.下面的哪一个不是操作系统名字? ()

- A. Notepad
- B. Linux
- C. Windows
- D. macOS

11.在无向图中, 所有顶点的度数之和等于 ( )。

- A. 图的边数
- B. 图的边数的两倍
- C. 图的顶点数
- D. 图的顶点数的两倍

12.已知二叉树的前序遍历为[A&#44; B&#44; D&#44; E&#44; C&#44; F&#44; G]&#44; 中序遍历为 [D&#44; B&#44; E&#44; A&#44; F&#44;C&#44; G],请问该二叉树的后序遍历结果是? ()

- A. [D&#44; E&#44; B&#44; F&#44; G&#44; C&#44; A]
- B. [D&#44; E&#44; B&#44; F&#44; G&#44; A&#44; C]
- C. [D&#44; B&#44; E&#44; F&#44; G&#44; C&#44; A]
- D.[D&#44; B&#44; E&#44; F&#44; G&#44; A&#44; C]

13.给定一个空栈, 支持入栈和出栈操作。若入栈操作的元素依次是1 2 3 4 5 6, 其中1最先入栈、6最后入栈, 下面哪种出栈顺序是不可能的? ()

- A. 6 5 4 3 2 1
- B. 1 6 5 4 3 2
- C. 2 4 6 5 3 1
- D. 1 3 5 2 4 6

14.有5个男生和3个女生站成一排,规定3个女生必须相邻。问有多少种不同的排列方式? ( )

- A. 4320种
- B. 5040种
- C. 3600种
- D. 2880种

15.编译器的主要作用是什么? ()

- A. 直接执行源代码
- B. 将源代码转换为机器代码
- C. 进行代码调试
- D. 管理程序运行时的内存

二、阅读程序(程序输入不超过数组或字符串定义的范围; 判断题正确填v, 错误填×; 除特殊说明外, 判断题1.5分, 选择题3分, 共计 40分)

```cpp
01  # include < iostream>
02   using namespace std;
03
04   bool isPrime( int n) {
05    if (n <= 1) {
06    return false;
07  }
08    for ( int i =2; i * i <= n; i++) {
09    if (n % i == 0) {
10    return false;
11  }
12  }
13    return true;
14  }
15
16   int countPrimes( int n) {
17    int count = 0;
18    for ( int i = 2; i <= n; i++) {
19    if (isPrime(i)) {
20    count++;
21  }
22  }
23    return count;
24  }
25
26  int sumPrimes( int n) {
27    int sum = 0;
28    for ( int i = 2; i <= n; i++) {
29    if (isPrime(i)) {
30    sum += i;
31  }
32  }
33    return sum;
34  }
35
36   int main() {
37    int x;
38    cin >> x;
39    cout << countPrimes(x) << " " << sumPrimes(x) << endl;
40    return 0;
41  }
```

#### 判断题

16.当输入为“10”时&#44; 程序的第一个输出为“4”&#44; 第二个输出为“17”。( )

- 对
- 错

17.若将isPrime(i)函数中的条件i * i <= n 改为i <= n / 2&#44; 输入“20”时&#44; countPrimes(20)的输出将变为“6”。 ( )

- 对
- 错

18.sumPrimes 函数计算的是从2到n之间的所有素数之和。 ( )

- 对
- 错

#### 单选题

19.当输入为“50”时&#44; sumPrimes(50)的输出为( ) 。

- A. 1060
- B. 328
- C. 381
- D. 275

20.如果将 for ( int i = 2; i * i <= n; i++)改为 for ( int i = 2; i <= n; i++)&#44; 输入“10”时&#44; 程序的输出( ) 。

- A. 将不能正确计算10 以内素数个数及其和
- B. 仍然输出“4”和“17”
- C. 输出“3”和“10”
- D. 输出结果不变, 但运行时间更短

#### 阅读程序2.

```cpp
01  # include < iostream>
02  # include < vector>(
03   using namespace std;
04
05   int compute( vector< int>& cost) {
06    int n = cost. size();
07    vector< int> dp(n+1&#44; 0);
08    dp[1] = cost[0];
09    for ( int i = 2; i <= n; i++) {
10    dp[i] = min( dp[i-1]&#44; dp[i-2]) + cost[i-1];
11  }
12    return min( dp[n]&#44; dp[n-1]);
13  }
14
15   int main() {
16.    int n;
17    cin >> n;
18    vector< int> cost(n);
19    for ( int i = 0; i < n; i++) {
20  cin >> cost[i];
21  }
22    cout << compute( cost) << endl;
23   return 0;
24  )
```

#### 判断题

21.当输入的 cost数组为{10&#44; 15&#44; 20}时&#44; 程序的输出为15。 ( )

- 对
- 错

22.如果将 dp[i-1]改为 dp[i-3]&#44;程序可能会产生编译错误。 ( )

- 对
- 错

23.(2分) 程序总是输出 cost数组中最小的元素。( )

- 对
- 错

### 单选题

24.当输入的 cost数组为{1&#44; 100&#44; 1&#44; 1&#44; 1&#44; 100&#44; 1&#44; 1&#44; 100&#44; 1}时&#44; 程序的输出为 ( )。

- A. "6"
- B.“7”
- C. "8"
- D. "9"

25.(4分) 如果输入的 cost数组为{10&#44; 15&#44; 30&#44; 5&#44; 5&#44; 10&#44; 20}&#44; 程序的输出为( )。

- A. "25"
- B. "30"
- C. "35"
- D. "40"

26.26.若将代码中的 min( dp[i-1]&#44; dp[i-2]) + cost[i-1]修改为 dp[i-1] + cost[i-2]&#44; 输入 cost 数组为{5&#44; 10&#44; 15}时&#44; 程序的输出为( )。

- A. "10"
- B. "15"
- C. "20"
- D."25"

### 阅读程序3.

```c++
01  #include < iostream>
02  #include < cmath>
03  using namespace std;
04
05  int customFunction( int a&#44; int b) {
06    if (b == 0) {
07    return a;
08  }
09    return a + customFunction(a&#44; b-1);
10  }
11
12   int main() {
13    int x&#44; y;
14    cin >> x >> y;
15    int result = customFunction(x&#44; y);
16    cout << pow( result&#44; 2) << endl;
17    return 0;
18  }
```

### 判断题

27.当输入为“2 3”时&#44; customFunction(2&#44; 3)的返回值为“64”。 ( )

- 对
- 错

28.当b为负数时&#44; customFunction(a&#44; b)会陷入无限递归。 ( )

- 对
- 错

29.当b的值越大, 程序的运行时间越长。()

- 对
- 错

### 选择题

30.当输入为“5 4”时&#44; customFunction(5&#44; 4)的返回值为 ( )。

- A.5
- B.25
- C.250
- D.625

31.如果输入x=3 和 y=3&#44; 则程序的最终输出为( ) 。

- A. "27"
- B. "81"
- C. "144"
- D. "256"

32.(4分) 若将customFunction 函数改为“ return a + customFunction(a-1&#44; b-1);”&#44; 并输入“3 3”, 则程序的最终输出为 ( )。

- A. 9
- B. 16
- C. 25
- D. 36

### 三、完善程序(单选题, 每小题3分, 共计 30分)

(1) (判断平方数) 问题: 给定一个正整数n, 希望判断这个数是否为完全平方数,即存在一个正整数x使得x的平方为n。试补全程序。

```cpp
01  # include< iostream>
02  # include< vector>
03   using namespace std;
04
05   bool isSquare( int num) {
06    int i = _①_;
07    int bound = ②_;
08    for (; i <= bound; ++i) {
09    if (_③_) {
10    return _④_;
11  }
12  }
13    return _⑤_;
14  )
15   int main() {
16    int n;
17    cin >> n;
18    if (isSquare(n)) {
19    cout << n << " is a square number"<< endl;
20  } else {
21    cout << n << " is not a square number" << endl;
22.  )
23    return 0;
}
```

33.①处应填( )

- A. 1 
- B. 2 
- C. 3 
- D. 4

34.②处应填( )

- A. ( int) floor( sqrt( num))-1 
- B. ( int) floor( sqrt( num))

- C. floor( sqrt( num/2))-1 
- D. floor( sqrt( num/2))

35.③处应填( )

- A. num = 2 * i 
- B. num==2 * i

- C. num = i * i 
- D. num == i * i

36.④处应填( )

- A. !(num = 2*i)
- B. num == 2 * i 
- C. true 
- D. false

37.⑤处应填( )

- A. num = i * i 
- B. num != i * i 
- C. true 
- D. false

### 完善程序2

(2) (汉诺塔问题)给定三根柱子,分别标记为A、B和C。初始状态下, 柱子A上有若干个圆盘,这些圆盘从上到下按从小到大的顺序排列。任务是将这些圆盘全部移到柱子C上,且必须保持原有顺序不变。在移动过程中, 需要遵守以下规则:

1.只能从一根柱子的顶部取出圆盘, 并将其放入另一根柱子的顶部。

2.每次只能移动一个圆盘。

3.小圆盘必须始终在大圆盘之上。

试补全程序。

```cpp
01  #include < iostream>
02  #include < vector>
03  using namespace std;
04
05  void move( char src&#44; char tgt) {
06    cout << "从柱子" << src << "挪到柱子" << tgt << endl;
07. }
08  void dfs( int i&#44; char src&#44; char tmp&#44; char tgt) {
09    if (i == _①_) {
10    move(_②_);
11    return;
12  }
13    dfs(i -1&#44; ③_);
14    move(src&#44; tgt);
15    dfs(_⑤_&#44; _④_);
16  }
17
18   int main() {
19    int n;
20    cin >> n;
21    dfs(n&#44; 'A'&#44; 'B'&#44; 'C');
22  }
```

38.①处应填( )

- A. 0 
- B. 1 
- C. 2 
- D. 3

39.②处应填( )

- A. src&#44; tmp 
- B. src&#44; tgt 
- C. tmp&#44; tgt 
- D. tgt&#44; tmp

40.③处应填 ( )

- A. src&#44; tmp&#44; tgt 
- B. src&#44; tgt&#44; tmp
- C. tgt&#44; tmp&#44; src 
- D. tgt&#44; src&#44; tmp

41.④处应填( )

- A. src&#44; tmp&#44; tgt 
- B. tmp&#44; src&#44; tgt
- C. src&#44; tgt&#44; tmp 
- D. tgt&#44; src&#44; tmp

42.⑤处应填 ( )

- A. 0 
- B. 1 
- C. i - 1 
- D. i
</div>