2022CCF非专业级别软件能力认证第一轮CSP-J初赛试题

标签:
普通文字版
2024-07-12
| 12页
| 264人阅读
| 13人下载

内容正文:

2022 CCF非专业级别软件能力认证第 一轮 (CSP-Jl)入门级C++语言试题 认证时间:2022年9月18日09:30~11:3θ 考生注意事项: • 试题纸共有12页, 答题纸共有1页, 满分100分。 请在答题纸上作答, 写在试题纸上的 一律无效。 • 不得使用任何电子设备(如计算器、 于机、 电子词典等)或查阅任何书籍资料。 一 、 单项选择题(共15题, 每题2分, 共计到分:每题有且仅有一个正确选项〉 1. 以下哪种功能没有涉及(++语言的面向对象特性支持:( )。 A. C++中调用printf函数 B. C++中调用用户定义的类成员函数 (. (++中构造一个class或struct D. C++中构造来源于同 一基类的多个派生类 2. 有6个元素, 按照6、 5、 4、 3、 2、 1的顺序进入校5, 请问下列哪个出枝序列是非法的 ( ) 。 A. 5 4 3 6 1 2 B. 4 5 3 1 2 6 C. 346521 D. 2 3 4 1 5 6 3. 运行以下代码片段的行为是( )。 int X = 101; int y = 201; int *p = &x; int 丰 q = &y; p = q; A. 将x的值赋为201 B. 将y的值赋为101 CCF CSP-J 2022 第一轮 C++语言试题 第1页, 共 12页 C. 将q指向x的地址 D. 将p指向y的地址 4. 链表和数组的区别包括( )。 A. 数组不能排序, 链表可以 B. 链表比数组能存储更多的信息 C. 数组大小固定, 链表大小可动态调整 D. 以上均正确 5. 对假设枝5和队列Q的初始状态为墅。存在el~e6六个互不相同的数据,每个数据按照进 枝弘出校5、 进队列Q、 出队列Q的顺序操作, 不同数据间的操作可能会交错。 己知枝 s 中依次有数据el、 e2、 e3、 e4、 es和e6进枝, 队列Q依次有数据e2、 e4、 e3、 e6、 es 和el出队列。 则核5的容量至少是( )个数据。 A. 2 B. 3 C. 4 D. 6 6. 对表达式a+(b-c)*d的前缀表达式为( ), 其中+、 - 、 *是运算符。 A. *+a-bed B. +a*-bcd C. abc-d*+ D. abc-+d 7. 假设字母表{a, b, c, d, e}在字符串出现的频率分别为1锁, 15%, 30%, 16%, 29%。 若使用哈夫曼编码方式对字母进行不定长的二进制编码, 字母d的编码长度为( )位。 A. 1 B. 2 c. 2或3 CCF CSP-J 2022第一轮C++语言试题 第2页, 共12页 D. 3 8. 一棵有n个结点的完全二叉树用数组进行存储与表示, 己知根结点存储在数组的第1个位 置。 若存储在数组第9个位置的结点存在兄弟结点和两个子结点, 则它的兄弟结点和右子 结点的位置分别是( 〉。 A. 8、 18 B. 10 、 18 C. 8、 19 D. 10、 19 9. 考虑、由N个顶点构成的有向连通图, 采用邻接矩阵的数据结构表示时, 该矩阵中至少存在 ( )个非零元素。 A. N-1 B. N C. N+l D. N2 1θ.以下对数据结构的表述不恰当的一项为: ( )。 A. 图的深度优先遍历算法常使用的数据结构为楼。 B. 梭的访问原则为后进先出, 队列的访问原则是先进先出。 C. 队列常常被用于广度优先搜索算法。 D. 校与队列存在本质不同, 无法用核实现队列。 11.以下哪组操作能完成在双向循环链表结点p之后插入结点s的效果(其中, next域为结 点的直接后继, prev域为结点的直接前驱): ( )。 A. p->next->prev=s; s->prev=p; p->next=s; s->next=p->next; B. p->next->prev=s; p->next=s; s->prev=p; s->next=p->next; C. s->prev=p; s->next=p->next; p->next=s; p->next->p俨 ev=s; D. s->next=p->next; p->next->prev=s; s->prev=p; p->next=s; CCF CSP-J 2022第一轮C++语言试题 第3页, 共12页 12.以下排序算法的常见实现中, 哪个选项的说法是错误的: ( )。 A. 冒泡排序算法是稳定的 B. 简单选择排序是稳定的 C. 简单插入排序是稳定的 D. 归并排序算法是稳定的 13.八进制数32.1对应的十进制数是( )。 A. 24.125 B. 24.250 (. 26.125 D. 26.250 14.一个字符串中任意个连续的字符组成的子序列称为该字符串的子串, 则字符串abcab有 ( )个内容互不相同的子串。 A. 12 B. 13 (. 14 D. 15 15.以下对递归方法的描述中, 正确的是: ( ) A. 递归是允许使用多组参数调用函数的编程技术 B. 递归是通过调用自身来求解问题的编程技术 C. 递归是面向对象和数据而不是功能和逻辑的编程语言模型 D. 递归是将用某种高级语言转换为机器代码的编程技术 二、 阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填d, 错误填×:除特 殊说明外, 判断题1.5分, 选择题3分, 共计40分) (1) 01 #include <iostream> CCF CSP-J 2022第一轮C++语言试题 第4页, 共12页 02 03 using namespace std; 04 05 int main() 06 { 07 unsigned shor、t x, y; 08 Cln 》 X 》 y; 09 X = (X X 《 2) & 0x33; 10 X = (x X 《 1) & 0x55; 11 y = (y y 《 2) & 0x33; 12 y = (y y 《 1) & 0x55; 13 unsigned shor、t z = X I y 《 1; 14 cout 《 Z 《 endl; 15 return 0; 16} 假设输入的x、 y均是不超过15的自然数, 完成下面的判断题和单选题z • 判断题 16. 删去第7行与第13行的unsigned, 程序行为不变。 ( ) 17. 将第7行与第13行的short均改为char, 程序行为不变。 ( ) 18. 程序总是输出一个整数 “ @ ” 。 ( ) 19. 当输入为 “ 2 2 ” 时, 输出为 “ 四 ” 。 ( ) 20. 当输入为 “ 2 2 ” 时, 输出为 “ 四 ” 。 ( ) • 单选题 21. 当输入为 “ 13 8 ” 时, 输出为( )。 A. “@ ” B. “209 (2) 01 #include <algorithm> 02 #include <iostr、earn> 03 #include <limits> 04 05 using namespace std; 06 07 const int MAXN = 105; 08 const int MAXK = 105; 09 C. “197 CCF CSP-J 2022 第一轮 C++语言试题 第5页, 共12页 D. “226 10 int h[MAXN][问AXK]; 11 12 int f(int n, 13 { 14 int m) r、eturn n; r、eturn 0; (m == 1) (n == 0) if if + 1); 1)) m 1, f(i ret = numeric_limits< int>::『nax(); (int i= 1; i <= n; i++) ret = min(ret, max(f(n - i, return ret; .,、,,,m int for for (int i= 1; h[i][l] = i; for (int j = 1; j h[0][j] = 0; i++) 1 <= n; int m) pn g(int 18 19 20 21} 22 23 int 24 { 25 26 FD FO 寸J 句4 句4 咱4 j++) <= m; 27 28 + 1); for (int i= 1; i <= n; i++) { for (int j = 2; j <= m; j++) { h[i][j] = numeric_limits< int>::max(); for (int k = 1; k <= i; k++) h[i][j] = min( h[i][j], max(h[i - 1]) l][j LK FEE--』」门k][j], endl; 《、、,,,m g(n, 《 endl 《 return h[n][m]; int n, m; cin 》 n 》 m; cout 《 f(n, m) return 0; 29 、】,,,,.‘、n . la m+L n 、bJ - 1· F4L @ 1 2 3 4 5 6 7 8 9 @ 1 2 3 4 5 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 46 47 48 49 假设输入的n 、 m均是不超过四@的正整数, 完成下面的判断题和单选题z 判断题 22.当输入为 " 7 3 ” 时, 第19行用来取最小值的min函数执行了449次。 . CCF CSP-J 2022第一轮C++语言试题 第6页, 共12页 23.输出的两行整数总是相同的。 ( ) 24.当m为1时, 输出的第一行总为n。 ( ) • 单选题 25.算法g(n,m)最为准确的时间复杂度分析结果为( )。 A. 0 (η3/Zm) B. 0 〔nm) C. O(n2m) D. O (ηmz ) 26.当输入为 “ 20 2 ” 时, 输出的第 一行为( )。 A. “4 ” B. “5 ” C. “6 ” D. “2θ ” 27. (4分)当输入为 “ 四0 100 ” 时, 输出的第 一行为( )。 A. “6 ” B. “7 ” (3) θ1 #include < iostream> 02 03 using namespace std; 04 05 int n, k; 06 07 int solvel() 08 { 09 10 11 int 1 = 0, 俨 = n; while (1 <= 俨){ int mid= (1 + 俨) I 2; C. “8 ” 12 if (mid* mid<= n) 1 = mid + 1; 13 else r = mid - 1; 14 15 return 1 - 1; 16} 17 18 double solve2(double x) 19 { 20 if (x == 0) r、eturn x; 21 手0 俨( inti= 0; i < k; i++) 22 x = (x + n Ix) I 2; 23 return x; 24} 25 26 int main() 27 { 28 cin 》 n 》 k; CCF CSP-J 2022第一轮C++语言试题 第7页, 共12页 D. “ 9 ” 29 double ans = solve2(solvel()); 30 cout 《 ans 《 E E 《(ans * ans == n )《 endl; 31 return 0; 32} 假设int为32位有符号整数类型, 输入的n是不超过47000的自然数、 k是不超过int 表示范围的自然数, 完成下面的判断题和单选题: • 判断题 28.该算法最准确的时间复杂度分析结果为O(logn +的。 ( 〉 29.当输入为 “ 9801 1 ” 时,输出的第一个数为 “ 99 ” 。 ( ) 30.对于任意输入的n,随着所输入k的增大,输出的第二个数会变成 " 1 ” 。 ( ) 31.该程序有存在缺陷。 当输入的n过大 时,第12行的乘法有可能溢出,因此应当将mid 强制转换为64位整数再计算。 ( ) • 单选题 32.当输入为 “ 2 1 ” 时,输出的第一个数最接近( )。 A. 1 B. 1.414 C. 1. 5 33.当输入为 " 3四 ” 时,输出的第一个数最接近( )。 A. 1.7 B. 1. 732 C. 1. 75 34.当输入为 “256 11 ” 时, 输出的第一个数( )。 A. 等于16 B. 接近但小于16 C. 接近但大于 16 D. 前三种情况都有可能 三、 完善程序(单选题, 每小题3分, 共计到分) (1) 〈枚举因数)从小到大打印正整数n的所有正因数。 试补全枚举程序。 01 #include <bits/stdc++.h> 02 using namespace std; 03 04 int main() { 05 int n; 06 cin 》 n; 07 08 vector、<int> fac; CCF CSP-J 2022第一轮C++语言试题 第8页, 共12页 D. 2 D. 2 09 10 11 12 13 14 15 16 17 18 for (int k = 0; k < fac.size(); ++k) { 19 cout《②《 H II; 20 } 21 if (③){ 22 cout《④《 ’ ; 23 } 24 for (int k = fac.size() 25 cout《⑤《 ’ 3 26 } 27} fac.俨eserve((int)ceil(sqrt(n))); int i; for (i = 1; i * i < n; ++i) { if (①){ fac.push_back(i); } } --k) {k >= 0; - 1; n % i == 1 n % (i-1) == 1 B. 35.①处应填() A. n % i == 0 C. n % ( i-1) == 0 fac[k] n I (fac[k]-1) D. B. 36.②处应填( ) A. n I fac[k] C. fac[k]-1 (i-1) * i == n i * (i-1) == n D. B. 37.③处应填( ) A. (i-1) * (i-1) == n C. i * i == n 44 + - l nH - 14 D. B. 38.④处应填( A. n-i (. i-1 fac[k] n I (fac[k]-1) D. B. 39.⑤处应填( ) A. n I fac[k] C. fac[k]-1 D. (2) (洪水填充)现有用字符标记像素颜色的 8x8 图像。颜色填充的操作描述如下:给 定起始像素的位置和待填充的颜色,将起始像素和所有可达的像素(可达的定义:经过一 次或多次的向上、下、左、右四个方向移动所能到达且终点和路径上所有像素的颜色都与 起始像素颜色相同),替换为给定的颜色。 CCF CSP-J 2022第一轮C++语言试题 第9页, 共12页 试补全程序。 01 #include <bits/stdc++.h> 02 using namespace std; 03 04 const int ROWS = 8; 05 const int COLS = 8; 06 07 struct Point { 08 int r, c; 09 Point(int r, int c) 俨(r), c(c) {} 10 } ; 11 12 bool is_valid(char、image[ROWS][COLS], Point pt, 13 int p俨ev_color, int new_color、){ 14 int 俨 = pt. r; 15 int C = pt. C j 16 return (0 <= r && r < ROWS && 0 <= c && c < COLS && 17 ①&& image[r][c] != new_color); 18 } 19 20 void flood_fill(char、image[ROWS][COLS], Point cur 飞 int new_c。lor) { 21 queue<Point> queue; 22 queue. push (cur); 23 24 int p俨ev_colo俨 = image[cur.r][cur.c]; 25 ②; 26 27 while (!queue.empty()) { 28 Point pt = queue.俨ront(); 29 queue. pop(); 30 31 Point points [ 4] = {③, Point(pt.r - 1, pt.c), 32 Point(pt.r, pt.c + 1), Point(pt.r, pt.c - 1)}; 33 for (auto p : points) { 34 if (is_valid(image, p, prev_color、, new_color)) { 35 ④; 36 ⑤; 37 } 38 } 39 } 40 } 41 CCF CSP-J 2022 第一轮 C++语言试题 第 10页, 共 12页 42 int main() { 43 char、image[ROWS][COLS] = {{ I g ’ , ’ g ’ , 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 { ’ g ’ 3 ’ g ’ 3 { ’ g ’ 3 'r ’ P { ’ g ’ 3 I b I J { ’ g ’ , ’ g I J { ’ g I J I g I J { ’ g ’ 3 g { ’ g I J g Point cur(4, 4); char new color = ’y I; flood_fill(image, cur, new_color); for (int r = θ;俨< ROWS;俨++){ for、(int C = θ ; c < COLS; c++) { cout《image[俨][ c ]《 ” ” ; } cout 《 endl; //输出: II g g g g g g g g II g g g g g g r r II g俨俨g g r g g II g y y y y俨g r II g g g y y俨g俨 II g g g y y y y r II g g g g g y g g II g g g g g y y g return 0; 74} 40.①处应填( A. B. (. D. image[「][c] prev_color image[俨][c] != p俨ev_color image[r][c] new color image [ r] [ c] ! = new color 41.②处应填( ) A. image[cur.r+l][cur.c] = new_color、 B. image[cur.r][cur.c] = new_color C. image[cur.r][cur.c+l] = new_color、 g , ’ g I J Ir I J I b I J I g' J ’ g I J g g CCF CSP-J 2022 第一轮 C++语言试题 第11页, 共 12页 g , I g I J ’ g ’ , ’ g ’ 3 ’ g I}, g , ’ g ’ 3 ’ g ’ 3 ’ r ’ , ’ r'}, I g' J ’ g ’ 3 ’ I句 ’ 3 ’ g ’ 3 ’ g ’ }, I b I J ’ b ’ 3 ’ I鸣 ’ 3 ’ g ’ 3 ’ r'}, 'b ’ , ’ b ’ 3 ’ I例 ’ 3 I g ’ , 'r'}, 'b ’ , ’ b ’ 3 ’ b ’ 3 I b ’ 3 ’ r ’ }, I g' J g ’ b ’ 3 g ’ g ’ }, g g ’ b ’ 3 ’ b I J ’ g ’ }}; D. image[cur.r][cur.c] = prev_color 42.③处应填( ) A. Point(pt.r, pt.c) C. Point(pt.r+l, pt.c) 43.④处应填( ) A. prev_color = image[p.r][p.c] C. image[p.r][p.c] = prev_color 44.⑤处应填( ) A. queue.push(p) B. queue.push(pt) C. queue.push(cur) D. queue.push(Point(ROWS,COLS)) B. Point(pt.r, pt.c+l) D. Point(pt.r+l, pt.c+l) B. new_color、 = image[p.r][p.c] D. image[p.r][p.c] = new color CCF CSP-J 2022 第一轮 C++语言试题 第 12页, 共 12页

资源预览图

2022CCF非专业级别软件能力认证第一轮CSP-J初赛试题
1
2022CCF非专业级别软件能力认证第一轮CSP-J初赛试题
2
2022CCF非专业级别软件能力认证第一轮CSP-J初赛试题
3
2022CCF非专业级别软件能力认证第一轮CSP-J初赛试题
4
所属专辑
相关资源
示范课
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。