一、单项选择题 (共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 的值是( )。

cpp 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 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) 4. 若想要程序统计非元音字母(辅音字母和其他字符)的个数,应如何修改?( ) A. 将 ans++ 改为 ans-- B. 将 if 条件中的 == 改为 != C. 将 if 条件中的 || 改为 && D. 将 ans 初始值改为 n,并将 ans++ 改为 ans--

(二)

#include 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),程序可能在短时间内无法完成计算。( )

单选题 3. 该程序实现的功能是计算( )。 A. n 的阶乘 B. 斐波那契数列的第 n 项(F(0)=0, F(1)=1) C. 斐波那契数列的第 n 项(F(1)=1, F(2)=1) D. 从 1 到 n 的累加和 4. 该程序的时间复杂度是( )。 A. O(n) B. O(2^n) C. O(n²) D. O(log n)

(三)

#include 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 次。( )

单选题 3. 该程序使用的排序算法是( )。 A. 冒泡排序 B. 插入排序 C. 选择排序 D. 快速排序 4. 该算法的时间复杂度是( )。 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 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 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

0 条评论

目前还没有评论...