一、选择题(共15题,每题4分,满分60分)
请将正确答案的序号填入答题栏,多选、错选、不选均不得分。
1、已知某二叉树的前序序列为ABCDEF,中序序列为BADCFE,则其后序序列为()
A. BDFECA B. BDFCEA C. BDFEAC D. BDFEAC
2、二叉树中,节点的“度”是指()
A. 该节点的子节点数量 B. 该节点的高度 C. 该节点所在层数 D. 树的总节点数
3、若栈的输入序列为2,4,6,8,10,则不可能的输出序列是()
A. 4,2,6,8,10 B. 10,8,6,4,2 C. 6,4,2,10,8 D. 2,8,4,6,10
4、执行栈操作:push(1)、push(2)、pop()、push(3)、push(4)、pop(),最终栈顶元素是()
A. 1 B. 3 C. 4 D. 栈空
5、将十进制数37转换为二进制数,结果为()
A. 100101 B. 101001 C. 100111 D. 110001
6、十六进制数5E转换为十进制数是()
A. 86 B. 94 C. 102 D. 110
7、若有向图中有n个顶点,要保证图是强连通的,最少需要的边数是()
A. n B. n+1 C. n(n-1) D. 2n
8、有向图中,所有顶点的入度之和与出度之和的关系是()
A. 入度之和大于出度之和 B. 入度之和小于出度之和 C. 相等 D. 无固定关系
9、从6个不同元素中选4个元素进行排列,排列数为()
A. 30 B. 60 C. 120 D. 360
10、从8个不同元素中选3个元素进行组合,组合数为()
A. 24 B. 56 C. 112 D. 336
11、以下关于C++中char类型的描述,正确的是()
A. char类型一定占1个字节 B. char只能存储字母 C. char的取值范围是0~255 D. char是无符号类型
12、若short类型占2个字节,则其能表示的最大整数是()
A. 215 B. 215-1 C. 216 D. 216-1
13、已知某二叉树的后序序列为DCBGFEA,中序序列为DCBAEFG,则其前序序列为()
A. ABCDEFG B. ADEFGBC C. ABDECFG D. AEDCBFG
14、进制转换中,将十六进制数4B转换为八进制数,结果为()
A. 113 B. 123 C. 133 D. 143
15、有4个元素a,b,c,d,入栈顺序为a→b→c→d,则可能的出栈顺序有()种
A. 8 B. 14 C. 20 D. 24
二、程序阅读题(共3题,满分40分)
请阅读下列C++程序,根据程序功能和逻辑,完成每题的判断和选择(判断题选A为正确,B为错误;选择题唯一正确答案)。
题1(13分)
阅读以下C++程序,回答问题:
#include <iostream> #include <string> using namespace std; int main() { string s = "xY123zA45"; string res; for (int i = 0; i < s.size(); i++) { if (s[i] >= 'A' && s[i] <= 'Z') { res += s[i] + 32; } else if (s[i] >= 'a' && s[i] <= 'z') { res += s[i]; } else if (s[i] >= '0' && s[i] <= '9') { continue; } } cout << "处理结果:" << res << endl; return 0; }1、判断题:程序中continue的作用是跳过当前循环的剩余语句,进入下一次循环()(3分)
A. 正确 B. 错误
2、判断题:代码s[i] + 32的作用是将小写字母转换为大写字母()(3分)
A. 正确 B. 错误
3、该程序的功能是()(3分)
A. 保留小写字母,将大写字母转小写,删除数字
B. 保留大写字母,将小写字母转大写,删除数字
C. 保留数字,删除所有字母
D. 保留所有字符,仅转换字母大小写
4、程序的输出结果是()(4分)
A. xY123zA45 B. xyza C. xYza D. 12345
题2(14分)
阅读以下C++程序,回答问题:
#include <iostream> #include <string> using namespace std; // 查找子串在原串中首次出现的位置(从pos开始) int findFirst(string str, string sub, int pos) { return str.find(sub, pos); } int main() { string s = "test1test2test3"; string sub = "test"; int cnt = 0; int pos = 0; while (true) { pos = findFirst(s, sub, pos); if (pos == string::npos) { break; } cnt++; pos += sub.size(); } cout << cnt << endl; return 0; }1、判断题:string::npos表示“未找到子串”()(3分)
A. 正确 B. 错误
2、判断题:循环中pos += sub.size()的作用是避免重复查找同一子串()(4分)
A. 正确 B. 错误
3、该程序的功能是()(3分)
A. 计算原串的长度 B. 计算子串的长度
C. 统计子串在原串中不重叠出现的次数 D. 拼接原串和子串
4、程序的输出结果是()(4分)
A. 1 B. 2 C. 3 D. 4
题3(13分)
阅读以下C++程序,回答问题:
#include <iostream> #include <cstring> using namespace std; // 字符数组逆序 void reverseArray(char arr[], int len) { int left = 0; int right = len - 1; while (left < right) { // 交换arr[left]和arr[right] char temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } } int main() { char str[] = "csp2025"; int length = strlen(str); reverseArray(str, length); cout << str << endl; return 0; }1、判断题:strlen(str)的作用是获取字符数组的长度(包含结束符'\0')()(3分)
A. 正确 B. 错误
2、判断题:该程序的时间复杂度是O(1)(n为字符数组长度)()(3分)
A. 正确 B. 错误
3、该程序的功能是()(3分)
A. 复制字符数组 B. 逆序字符数组
C. 截取字符数组前半部分 D. 拼接两个字符数组
4、程序的输出结果是()(4分)
A. csp2025 B. 5202psc C. psc2025 D. 2025csp