- 吐吐很快乐
2025CCF-J组 第一轮模拟真卷(6)
- 2025-9-13 9:15:25 @
一、单项选择题 (共15题,每题2分,共计30分) 以下哪个不是计算机的输入设备?
A. 键盘
B. 打印机
C. 鼠标
D. 扫描仪
一个完整的计算机系统应包括( )。
A. 主机和外部设备
B. 硬件系统和软件系统
C. 操作系统和应用程序
D. 运算器、控制器和存储器
在C++语言中,表达式 (12 | 5) & 10 的值是( )。
A. 4
B. 8
C. 12
D. 15
有6个元素的有序数列 [3, 7, 9, 11, 23, 45],用二分查找法查找元素11,需要比较( )次。
A. 1
B. 2
C. 3
D. 4
一棵完全二叉树有2025个结点,则它的叶子结点数是( )。
A. 1012
B. 1013
C. 1012 或 1013
D. 1024
以下关于时间复杂度的说法错误的是( )。
A. 冒泡排序的平均时间复杂度是 O(n²)
B. 快速排序在最坏情况下的时间复杂度是 O(n log n)
C. 二分查找的时间复杂度是 O(log n)
D. 遍历一个二维数组的时间复杂度是 O(n²)
栈的特点是“后进先出”(LIFO)。现有序列 1, 2, 3 依次入栈,则不可能的出栈序列是( )。
A. 3, 2, 1
B. 2, 1, 3
C. 1, 3, 2
D. 3, 1, 2
在C++中,定义 int a[10]; 则数组 a 的下标范围是( )。
A. a[1] 到 a[10]
B. a[0] 到 a[9]
C. a[0] 到 a[10]
D. a[1] 到 a[9]
十进制数 17.625 对应的二进制数是( )。
A. 10001.101
B. 10001.110
C. 10010.101
D. 10010.110
以下代码片段的输出结果是( )。
int cnt = 0;
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= i; j++) {
if (i * j > 15) break;
cnt++;
}
}
cout << cnt;
A. 25
B. 30
C. 35
D. 40
将 7, 2, 5, 4, 1, 9 六个数字依次插入到一个最初为空的最大堆(大顶堆)中,最终堆的层序遍历结果是( )。
A. 9, 7, 5, 2, 4, 1
B. 9, 7, 5, 2, 1, 4
C. 9, 5, 7, 4, 2, 1
D. 9, 7, 4, 5, 2, 1
在C++中,执行以下语句后,变量 x 的值是( )。
int x = 10;
int &y = x;
y = 20;
int z = 30;
y = z;
A. 10
B. 20
C. 30
D. 40
定义 char s[] = "CSP-J";,则 sizeof(s) 和 strlen(s) 的值分别是( )。
A. 5, 5
B. 6, 5
C. 5, 6
D. 6, 6
一个算法的时间复杂度表示为 T(n) = 5T(n/2) + O(n),则该算法的复杂度为( )。
A. O(n log n)
B. O(n²)
C. O(n³)
D. O(n^{log₂5})
有 4 个砝码,重量分别为 1g, 3g, 5g, 7g。利用天平,可以称出( )种不同的重量(要求砝码只能放在天平的一边)。
A. 12
B. 13
C. 14
D. 15
二、阅读程序 (程序输入不超过数组或字符串定义的范围;判断题正确填√,错误填×;除特殊说明外,判断题1.5分,选择题3分,共计40分)
(一)
#include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
int n = s.length();
int ans = 0;
for (int i = 0; i < n; i++) {
if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u') {
ans++;
}
}
cout << ans << endl;
return 0;
}
判断题
该程序的功能是统计输入字符串中大写元音字母的个数。( )
若输入字符串为 "Hello World!",则程序输出为 3。( )
单选题 3. 该程序的时间复杂度是( )。
A. O(n)
B. O(n²)
C. O(n log n)
D. O(1)
- 若想要程序统计非元音字母(辅音字母和其他字符)的个数,应如何修改?( )
A. 将 ans++ 改为 ans--
B. 将 if 条件中的 == 改为 !=
C. 将 if 条件中的 || 改为 &&
D. 将 ans 初始值改为 n,并将 ans++ 改为 ans--
(二)
#include <iostream>
using namespace std;
int fun(int n) {
if (n <= 1) return n;
return fun(n - 1) + fun(n - 2);
}
int main() {
int n;
cin >> n;
cout << fun(n) << endl;
return 0;
}
判断题
该程序使用了贪心算法来求解问题。( )
当输入 n 的值较大时(如 n=50),程序可能在短时间内无法完成计算。( )
单选题
- 该程序实现的功能是计算( )。
A. n 的阶乘
B. 斐波那契数列的第 n 项(F(0)=0, F(1)=1)
C. 斐波那契数列的第 n 项(F(1)=1, F(2)=1)
D. 从 1 到 n 的累加和
- 该程序的时间复杂度是( )。
A. O(n)
B. O(2^n)
C. O(n²)
D. O(log n)
(三)
#include <iostream>
using namespace std;
const int MAXN = 1005;
int a[MAXN];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n - 1; i++) {
int min_idx = i;
for (int j = i + 1; j < n; j++) {
if (a[j] < a[min_idx]) {
min_idx = j;
}
}
swap(a[i], a[min_idx]);
}
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
return 0;
}
判断题
该程序实现了一种稳定的排序算法。( )
无论输入数据如何,程序中的 swap 操作总会执行 exactly n-1 次。( )
单选题
- 该程序使用的排序算法是( )。
A. 冒泡排序
B. 插入排序
C. 选择排序
D. 快速排序
- 该算法的时间复杂度是( )。
A. 最好、最坏和平均情况下都是 O(n log n)
B. 最好情况下是 O(n),最坏情况下是 O(n²)
C. 最好、最坏和平均情况下都是 O(n²)
D. 最好情况下是 O(n log n),最坏情况下是 O(n²)
三、完善程序 (共2题,每题15分,共计30分)
(一)(数字反转) 题目描述:输入一个不小于 100 且小于 1000 的正整数,将这个数反转后输出。
输入样例:123 输出样例:321
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a = n % 10; // 获取个位数
int b = ①; // 获取十位数
int c = n / 100; // 获取百位数
int reversed = ②;
cout << reversed << endl;
return 0;
}
①处应填( )
A. n % 100
B. (n / 10) % 10
C. n / 10
D. (n % 100) / 10
②处应填( ) A. a + b + c
B. a * 100 + b * 10 + c
C. c * 100 + b * 10 + a
D. a * 100 + c * 10 + b
(二)(最大公约数与最小公倍数) 题目描述:输入两个正整数 a 和 b,求它们的最大公约数(GCD)和最小公倍数(LCM)。 输入样例:6 8 输出样例:GCD=2 LCM=24 方法提示:使用辗转相除法(欧几里得算法)求最大公约数。最小公倍数 = a * b / 最大公约数。
#include <iostream>
using namespace std;
// 使用辗转相除法计算最大公约数
int gcd(int x, int y) {
int r;
while (y != 0) {
①;
x = y;
y = r;
}
return x;
}
// 计算最小公倍数
int lcm(int x, int y) {
return ②;
}
int main() {
int a, b;
cin >> a >> b;
int g = gcd(a, b);
int l = lcm(a, b);
cout << "GCD=" << g << " LCM=" << l << endl;
return 0;
}
①处应填( )
A. r = x % y
B. r = x / y
C. r = x - y
D. r = x + y
②处应填( ) A. x * y / g
B. x * y / gcd(x, y)
C. x * y
D. (x * y) / g (注意:此选项中的 g 是全局变量吗?函数内无法直接使用 main 中的 g)
正确答案应为 x * y / gcd(x, y),但选项B和D表述不清。通常这里会调用 gcd 函数。
我们修改一下选项,使其更清晰:
A. x * y
B. x / y
C. (x * y) / gcd(x, y)
D. x + y
(为了逻辑严谨,我们修改第4题的选项)
(接上题)②处应填( ) A. x * y
B. x / y
C. (x * y) / gcd(x, y)
D. x + y